youtube: gopher: improvements - frontends - front-ends for some sites (experiment)
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit 8d9f251630daa1827e8651058d0bc31910dc1106
DIR parent 9f0f2a73c85c3fc233e5ad5e806c4e42c72e838f
HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sat, 2 May 2020 16:42:56 +0200
youtube: gopher: improvements
Diffstat:
M youtube/gopher.c | 95 +++++++++++++++++++------------
1 file changed, 58 insertions(+), 37 deletions(-)
---
DIR diff --git a/youtube/gopher.c b/youtube/gopher.c
@@ -18,8 +18,40 @@
#define OUTTEXT(s) gophertext(stdout, s, strlen(s));
#define OUTLINK(s) gophertext(stdout, s, strlen(s));
-static const char *server = "127.0.0.1";
-static const char *port = "70";
+static const char *host = "127.0.0.1", *port = "70";
+
+void
+line(int _type, const char *username, const char *selector)
+{
+ putchar(_type);
+ OUTTEXT(username);
+ putchar('\t');
+ OUTLINK(selector);
+ printf("\t%s\t%s\r\n", host, port);
+}
+
+void
+error(const char *s)
+{
+ line('3', s, "");
+}
+
+void
+info(const char *s)
+{
+ line('i', s, "");
+}
+
+void
+header(void)
+{
+}
+
+void
+footer(void)
+{
+ printf(".\r\n");
+}
int
render(struct search_response *r)
@@ -27,11 +59,10 @@ render(struct search_response *r)
struct item *videos = r->items;
size_t i;
- if (pledge("stdio", NULL) == -1) {
- fprintf(stderr, "pledge: %s\n", strerror(errno));
+ if (pledge("stdio", NULL) == -1)
exit(1);
- }
+ header();
for (i = 0; i < r->nitems; i++) {
if (videos[i].id[0])
putchar('h');
@@ -61,7 +92,7 @@ render(struct search_response *r)
OUT("URL:https://www.youtube.com/embed/");
OUTLINK(videos[i].id);
}
- printf("\t%s\t%s\r\n", server, port);
+ printf("\t%s\t%s\r\n", host, port);
if (videos[i].channelid[0] || videos[i].userid[0]) {
OUT("hAtom feed of ");
@@ -75,70 +106,60 @@ render(struct search_response *r)
OUT("user=");
OUTLINK(videos[i].userid);
}
- printf("\t%s\t%s\r\n", server, port);
+ printf("\t%s\t%s\r\n", host, port);
}
if (videos[i].duration[0]) {
OUT("iDuration: " );
OUTTEXT(videos[i].duration);
- printf("\t%s\t%s\t%s\r\n", "", server, port);
+ printf("\t%s\t%s\t%s\r\n", "", host, port);
}
if (videos[i].publishedat[0]) {
OUT("iPublished: ");
OUTTEXT(videos[i].publishedat);
- printf("\t%s\t%s\t%s\r\n", "", server, port);
+ printf("\t%s\t%s\t%s\r\n", "", host, port);
}
if (videos[i].viewcount[0]) {
OUT("iViews: ");
OUTTEXT(videos[i].viewcount);
- printf("\t%s\t%s\t%s\r\n", "", server, port);
+ printf("\t%s\t%s\t%s\r\n", "", host, port);
}
- printf("i%s\t%s\t%s\t%s\r\n", "", "", server, port);
- printf("i%s\t%s\t%s\t%s\r\n", "", "", server, port);
+ info("");
+ info("");
}
- printf(".\r\n");
+ footer();
return 0;
}
-static void
-usage(const char *argv0)
-{
- fprintf(stderr, "usage: %s <keywords>\n", argv0);
- exit(1);
-}
-
int
-main(int argc, char *argv[])
+main(void)
{
struct search_response *r;
char *p, search[1024];
- if (pledge("stdio dns inet rpath unveil", NULL) == -1) {
- fprintf(stderr, "pledge: %s\n", strerror(errno));
- exit(1);
- }
- if (unveil(TLS_CA_CERT_FILE, "r") == -1) {
- fprintf(stderr, "unveil: %s\n", strerror(errno));
+ if (pledge("stdio dns inet rpath unveil", NULL) == -1)
exit(1);
- }
- if (unveil(NULL, NULL) == -1) {
- fprintf(stderr, "unveil: %s\n", strerror(errno));
+ if (unveil(TLS_CA_CERT_FILE, "r") == -1 ||
+ unveil(NULL, NULL) == -1)
exit(1);
- }
if ((p = getenv("SERVER_NAME")))
- server = p;
+ host = p;
if ((p = getenv("SERVER_PORT")))
port = p;
- if (argc < 2 || !argv[1][0])
- usage(argv[0]);
- if (!uriencode(argv[1], search, sizeof(search)))
- usage(argv[0]);
+ if (!(p = getenv("X_GOPHER_SEARCH"))) /* geomyidae */
+ p = getenv("SEARCHREQUEST"); /* gophernicus */
+
+ if (p && !uriencode(p, search, sizeof(search))) {
+ error("Invalid search");
+ printf(".\r\n");
+ exit(1);
+ }
r = youtube_search(search, "", "", "", "relevance");
if (!r || r->nitems == 0) {
- printf("iNo videos found\t%s\t%s\t%s\r\n", "", server, port);
+ error("No videos found");
printf(".\r\n");
exit(1);
}