Introduction
Introduction Statistics Contact Development Disclaimer Help
youtube: add shortdescription from search or channel/user listings - frontends …
Log
Files
Refs
README
LICENSE
---
commit e0461c105d8e02725c05d0cafd896fc54fb8be30
parent d278df39b1e6a28ada817813ecb6a2ed96817b90
Author: Hiltjo Posthuma <[email protected]>
Date: Sat, 25 Feb 2023 19:40:40 +0100
youtube: add shortdescription from search or channel/user listings
Diffstat:
M youtube/cli.c | 7 +++++--
M youtube/youtube.c | 28 ++++++++++++++++++++++------
M youtube/youtube.h | 3 ---
3 files changed, 27 insertions(+), 11 deletions(-)
---
diff --git a/youtube/cli.c b/youtube/cli.c
@@ -79,7 +79,8 @@ render_search_tsv(struct search_response *r)
OUTESCAPE(videos[i].channeltitle);
OUT("\t");
OUTESCAPE(videos[i].userid);
- OUT("\t");
+/* OUT("\t");
+ OUTESCAPE(videos[i].shortdescription); */ /* TODO: escape newl…
OUT("\n");
}
@@ -89,10 +90,12 @@ render_search_tsv(struct search_response *r)
int
render_search(struct search_response *r)
{
- struct item *videos = r->items;
+ struct item *videos = r->items, *v;
size_t i;
for (i = 0; i < r->nitems; i++) {
+ v = &(r->items[i]);
+
switch (videos[i].linktype) {
case Channel:
OUT("Channel: ");
diff --git a/youtube/youtube.c b/youtube/youtube.c
@@ -191,8 +191,24 @@ processnode_search(struct json_node *nodes, size_t depth, …
strlcpy(item->title, value, sizeof(item->title));
}
- /* in channel/user videos listing there is a short description */
-#ifdef neinneinnein
+ /* in search listing there is a short description, string items are ap…
+ if (depth >= 8 &&
+ nodes[depth - 7].type == JSON_TYPE_OBJECT &&
+ nodes[depth - 6].type == JSON_TYPE_ARRAY &&
+ nodes[depth - 5].type == JSON_TYPE_OBJECT &&
+ nodes[depth - 4].type == JSON_TYPE_OBJECT &&
+ nodes[depth - 3].type == JSON_TYPE_ARRAY &&
+ nodes[depth - 2].type == JSON_TYPE_OBJECT &&
+ nodes[depth - 1].type == JSON_TYPE_STRING &&
+ !strcmp(nodes[depth - 7].name, "videoRenderer") &&
+ !strcmp(nodes[depth - 6].name, "detailedMetadataSnippets") &&
+ !strcmp(nodes[depth - 4].name, "snippetText") &&
+ !strcmp(nodes[depth - 3].name, "runs") &&
+ !strcmp(nodes[depth - 1].name, "text")) {
+ strlcat(item->shortdescription, value, sizeof(item->shortdescr…
+ }
+
+ /* in channel/user videos listing there is a short description, string…
if (depth >= 7 &&
nodes[depth - 5].type == JSON_TYPE_OBJECT &&
nodes[depth - 4].type == JSON_TYPE_OBJECT &&
@@ -202,11 +218,9 @@ processnode_search(struct json_node *nodes, size_t depth, …
!strcmp(nodes[depth - 5].name, "videoRenderer") &&
!strcmp(nodes[depth - 4].name, "descriptionSnippet") &&
!strcmp(nodes[depth - 3].name, "runs") &&
- !strcmp(nodes[depth - 1].name, "text") &&
- !item->shortdescription[0]) {
- strlcpy(item->shortdescription, value, sizeof(item->shortdescr…
+ !strcmp(nodes[depth - 1].name, "text")) {
+ strlcat(item->shortdescription, value, sizeof(item->shortdescr…
}
-#endif
if (depth >= 5 &&
nodes[depth - 4].type == JSON_TYPE_OBJECT &&
@@ -275,6 +289,8 @@ parse_search_response(const char *data)
/* skip header */
s += strlen("\r\n\r\n");
+// s = data; // DEBUG
+
if (!(r = calloc(1, sizeof(*r))))
return NULL;
diff --git a/youtube/youtube.h b/youtube/youtube.h
@@ -8,10 +8,7 @@ struct item {
char publishedat[32]; /* "human-friendly" string */
char viewcount[32]; /* view count string, formatted */
char duration[32]; /* duration string */
-
-#ifdef neinneinnein
char shortdescription[4096];
-#endif
};
#define MAX_VIDEOS 50
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.