tscrape_plain.c - tscrape - twitter scraper (not working anymore)
(HTM) git clone git://git.codemadness.org/tscrape
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tscrape_plain.c (1854B)
---
1 #include <sys/types.h>
2
3 #include <err.h>
4 #include <locale.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <time.h>
8
9 #include "util.h"
10
11 static time_t comparetime;
12 static char *line;
13 static size_t linesize;
14
15 static void
16 printfeed(FILE *fp, const char *feedname)
17 {
18 char *fields[FieldLast];
19 struct tm *tm;
20 time_t parsedtime;
21 ssize_t linelen;
22
23 while ((linelen = getline(&line, &linesize, fp)) > 0) {
24 if (line[linelen - 1] == '\n')
25 line[--linelen] = '\0';
26 if (!parseline(line, fields))
27 break;
28
29 parsedtime = 0;
30 if (strtotime(fields[FieldUnixTimestamp], &parsedtime))
31 continue;
32 if (!(tm = localtime(&parsedtime)))
33 err(1, "localtime");
34
35 if (parsedtime >= comparetime)
36 putchar('N');
37 else
38 putchar(' ');
39 if (fields[FieldRetweetid][0])
40 putchar('R');
41 else
42 putchar(' ');
43 putchar(' ');
44
45 if (feedname[0])
46 printf("%-15.15s ", feedname);
47
48 fprintf(stdout, "%04d-%02d-%02d %02d:%02d ",
49 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
50 tm->tm_hour, tm->tm_min);
51
52 printutf8pad(stdout, fields[FieldItemFullname], 25, ' ');
53 fputs(" ", stdout);
54 fputs(fields[FieldText], stdout);
55 putchar('\n');
56 }
57 }
58
59 int
60 main(int argc, char *argv[])
61 {
62 FILE *fp;
63 char *name;
64 int i;
65
66 if (pledge("stdio rpath", NULL) == -1)
67 err(1, "pledge");
68
69 setlocale(LC_CTYPE, "");
70
71 if (pledge(argc == 1 ? "stdio" : "stdio rpath", NULL) == -1)
72 err(1, "pledge");
73
74 if ((comparetime = time(NULL)) == -1)
75 err(1, "time");
76 /* 1 day is old news */
77 comparetime -= 86400;
78
79 if (argc == 1) {
80 printfeed(stdin, "");
81 } else {
82 for (i = 1; i < argc; i++) {
83 if (!(fp = fopen(argv[i], "r")))
84 err(1, "fopen: %s", argv[i]);
85 name = ((name = strrchr(argv[i], '/'))) ? name + 1 : argv[i];
86 printfeed(fp, name);
87 if (ferror(fp))
88 err(1, "ferror: %s", argv[i]);
89 fclose(fp);
90 }
91 }
92 return 0;
93 }