sfeed_twtxt.c - sfeed - RSS and Atom parser
(HTM) git clone git://git.codemadness.org/sfeed
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
sfeed_twtxt.c (1569B)
---
1 #include <stdio.h>
2 #include <string.h>
3 #include <time.h>
4
5 #include "util.h"
6
7 static char *line;
8 static size_t linesize;
9
10 static void
11 printfeed(FILE *fp, const char *feedname)
12 {
13 char *fields[FieldLast];
14 struct tm parsedtm, *tm;
15 time_t parsedtime;
16 ssize_t linelen;
17
18 while ((linelen = getline(&line, &linesize, fp)) > 0 &&
19 !ferror(stdout)) {
20 if (line[linelen - 1] == '\n')
21 line[--linelen] = '\0';
22 parseline(line, fields);
23
24 parsedtime = 0;
25 if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
26 (tm = gmtime_r(&parsedtime, &parsedtm))) {
27 fprintf(stdout, "%04d-%02d-%02dT%02d:%02d:%02dZ\t",
28 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
29 tm->tm_hour, tm->tm_min, tm->tm_sec);
30 } else {
31 fputs("\t", stdout);
32 }
33 if (feedname[0])
34 printf("[%s] ", feedname);
35 fputs(fields[FieldTitle], stdout);
36 if (fields[FieldLink][0]) {
37 fputs(": ", stdout);
38 fputs(fields[FieldLink], stdout);
39 }
40 putchar('\n');
41 }
42 }
43
44 int
45 main(int argc, char *argv[])
46 {
47 FILE *fp;
48 char *name;
49 int i;
50
51 if (pledge(argc <= 1 ? "stdio" : "stdio rpath", NULL) == -1)
52 err(1, "pledge");
53
54 if (argc <= 1) {
55 printfeed(stdin, "");
56 checkfileerror(stdin, "<stdin>", 'r');
57 } else {
58 for (i = 1; i < argc; i++) {
59 if (!(fp = fopen(argv[i], "r")))
60 err(1, "fopen: %s", argv[i]);
61 name = ((name = strrchr(argv[i], '/'))) ? name + 1 : argv[i];
62 printfeed(fp, name);
63 checkfileerror(fp, argv[i], 'r');
64 checkfileerror(stdout, "<stdout>", 'w');
65 fclose(fp);
66 }
67 }
68
69 checkfileerror(stdout, "<stdout>", 'w');
70
71 return 0;
72 }