youtube: fix JSON extraction - frontends - front-ends for some sites (experiment) (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 416869b0c0f2efa0f43c93a59c6d9a89c01d9aec (DIR) parent 5dbcb6f3c9ab9a48446054e954147b652fb26407 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Sat, 17 Oct 2020 18:38:35 +0200 youtube: fix JSON extraction Youtube does not always serve the same content. This was a recent Youtube change to intentionally break scrapers again. Diffstat: M youtube/youtube.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) --- (DIR) diff --git a/youtube/youtube.c b/youtube/youtube.c @@ -55,12 +55,21 @@ request_search(const char *s, const char *page, const char *order) int extractjson(const char *s, char **start, char **end) { - if (!(*start = strstr(s, "window[\"ytInitialData\"] = "))) + *start = strstr(s, "window[\"ytInitialData\"] = "); + if (*start) { + (*start) += sizeof("window[\"ytInitialData\"] = ") - 1; + } else { + *start = strstr(s, "var ytInitialData = "); + if (*start) + (*start) += sizeof("var ytInitialData = ") - 1; + } + if (!*start) return -1; - if (!(*end = strstr(*start, "};\n"))) + *end = strstr(*start, "};\n"); + if (!*end) + *end = strstr(*start, "}; \n"); + if (!*end) return -1; - - (*start) += sizeof("window[\"ytInitialData\"] = ") - 1; (*end)++; return 0;