youtube: fix information for NSFW videos and add fields - frontends - front-ends for some sites (experiment) (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit ad970d5ed90fca291bb8e2a1738977efd788bcfa (DIR) parent 4d8ef4606fcdb808af8b505fc84318f22fe1c552 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Sun, 26 Feb 2023 14:00:41 +0100 youtube: fix information for NSFW videos and add fields Also add category, isunlisted and isfamilysafe field. Diffstat: M youtube/youtube.c | 14 +++++++++++--- M youtube/youtube.h | 3 +++ 2 files changed, 14 insertions(+), 3 deletions(-) --- (DIR) diff --git a/youtube/youtube.c b/youtube/youtube.c @@ -317,8 +317,6 @@ processnode_video(struct json_node *nodes, size_t depth, const char *value, if (depth > 1) { if (nodes[0].type == JSON_TYPE_OBJECT && !strcmp(nodes[1].name, "streamingData")) { - r->isfound = 1; /* a video is found */ - if (depth == 2 && nodes[2].type == JSON_TYPE_STRING && !strcmp(nodes[2].name, "expiresInSeconds")) { @@ -388,10 +386,18 @@ processnode_video(struct json_node *nodes, size_t depth, const char *value, nodes[3].type == JSON_TYPE_STRING && !strcmp(nodes[1].name, "microformat") && !strcmp(nodes[2].name, "playerMicroformatRenderer")) { + r->isfound = 1; + if (!strcmp(nodes[3].name, "publishDate")) { strlcpy(r->publishdate, value, sizeof(r->publishdate)); - } if (!strcmp(nodes[3].name, "uploadDate")) { + } else if (!strcmp(nodes[3].name, "uploadDate")) { strlcpy(r->uploaddate, value, sizeof(r->uploaddate)); + } else if (!strcmp(nodes[3].name, "category")) { + strlcpy(r->category, value, sizeof(r->category)); + } else if (!strcmp(nodes[3].name, "isFamilySafe")) { + r->isfamilysafe = !strcmp(value, "true"); + } else if (!strcmp(nodes[3].name, "isUnlisted")) { + r->isunlisted = !strcmp(value, "true"); } } @@ -399,6 +405,8 @@ processnode_video(struct json_node *nodes, size_t depth, const char *value, if (nodes[0].type == JSON_TYPE_OBJECT && nodes[2].type == JSON_TYPE_STRING && !strcmp(nodes[1].name, "videoDetails")) { + r->isfound = 1; + if (!strcmp(nodes[2].name, "title")) { strlcpy(r->title, value, sizeof(r->title)); } else if (!strcmp(nodes[2].name, "videoId")) { (DIR) diff --git a/youtube/youtube.h b/youtube/youtube.h @@ -46,6 +46,9 @@ struct video_response { long viewcount; long lengthseconds; char shortdescription[4096 * 4]; + char category[256]; + int isfamilysafe; + int isunlisted; int isfound;