Introduction
Introduction Statistics Contact Development Disclaimer Help
tscrape_html.c - tscrape - twitter scraper (not working anymore)
git clone git://git.codemadness.org/tscrape
Log
Files
Refs
README
LICENSE
---
tscrape_html.c (4358B)
---
1 #include <err.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <time.h>
6
7 #include "util.h"
8
9 static struct feed **feeds;
10 static int showsidebar;
11 static char *line;
12 static size_t linesize;
13 static unsigned long totalnew;
14 static time_t comparetime;
15
16 static void
17 printfeed(FILE *fp, struct feed *f)
18 {
19 char *fields[FieldLast];
20 struct tm *tm;
21 time_t parsedtime;
22 unsigned int islink, isnew;
23 ssize_t linelen;
24
25 if (f->name[0]) {
26 fputs("<h2 id=\"", stdout);
27 xmlencode(f->name, stdout);
28 fputs("\"><a href=\"#", stdout);
29 xmlencode(f->name, stdout);
30 fputs("\">", stdout);
31 xmlencode(f->name, stdout);
32 fputs("</a></h2>\n", stdout);
33 }
34 fputs("<pre>\n", stdout);
35
36 while ((linelen = getline(&line, &linesize, fp)) > 0) {
37 if (line[linelen - 1] == '\n')
38 line[--linelen] = '\0';
39 if (!parseline(line, fields))
40 break;
41
42 parsedtime = 0;
43 if (strtotime(fields[FieldUnixTimestamp], &parsedtime))
44 continue;
45 if (!(tm = localtime(&parsedtime)))
46 err(1, "localtime");
47
48 isnew = (parsedtime >= comparetime) ? 1 : 0;
49 islink = fields[FieldItemid][0] ? 1 : 0;
50
51 totalnew += isnew;
52 f->totalnew += isnew;
53 f->total++;
54
55 fprintf(stdout, "%04d-%02d-%02d&nbsp;%02d:%02d ",
56 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
57 tm->tm_hour, tm->tm_min);
58
59 if (isnew)
60 fputs("<b><u>", stdout);
61
62 if (fields[FieldRetweetid][0]) {
63 fputs("<a href=\"https://mobile.twitter.com/", s…
64 xmlencode(fields[FieldItemUsername], stdout);
65 fputs("/status/", stdout);
66 xmlencode(fields[FieldRetweetid], stdout);
67 fputs("\">retweeted</a>", stdout);
68 fputs(" <a href=\"https://mobile.twitter.com/", …
69 xmlencode(fields[FieldItemUsername], stdout);
70 fputs("\">@", stdout);
71 xmlencode(fields[FieldItemUsername], stdout);
72 fputs("</a> ", stdout);
73 }
74
75 if (islink) {
76 fputs("<a href=\"https://mobile.twitter.com/", s…
77 xmlencode(fields[FieldUsername], stdout);
78 fputs("/status/", stdout);
79 xmlencode(fields[FieldItemid], stdout);
80 fputs("\">", stdout);
81 }
82 xmlencode(fields[FieldText], stdout);
83 if (islink)
84 fputs("</a>", stdout);
85 if (isnew)
86 fputs("</u></b>", stdout);
87
88 fputs("\n", stdout);
89 }
90 fputs("</pre>\n", stdout);
91 }
92
93 int
94 main(int argc, char *argv[])
95 {
96 struct feed *f;
97 char *name;
98 FILE *fp;
99 int i;
100
101 if (pledge(argc == 1 ? "stdio" : "stdio rpath", NULL) == -1)
102 err(1, "pledge");
103
104 if (!(feeds = calloc(argc, sizeof(struct feed *))))
105 err(1, "calloc");
106 if ((comparetime = time(NULL)) == -1)
107 err(1, "time");
108 /* 1 day old is old news */
109 comparetime -= 86400;
110
111 fputs("<!DOCTYPE HTML>\n"
112 "<html>\n"
113 "\t<head>\n"
114 "\t\t<meta http-equiv=\"Content-Type\" content=\"text/html…
115 "\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"sty…
116 "\t</head>\n"
117 "\t<body class=\"noframe\">\n", stdout);
118
119 showsidebar = (argc > 1);
120 if (showsidebar)
121 fputs("\t\t<div id=\"items\">\n", stdout);
122 else
123 fputs("\t\t<div id=\"items\" class=\"nosidebar\">\n", st…
124
125 if (argc == 1) {
126 if (!(feeds[0] = calloc(1, sizeof(struct feed))))
127 err(1, "calloc");
128 feeds[0]->name = "";
129 printfeed(stdin, feeds[0]);
130 if (ferror(stdin))
131 err(1, "ferror: <stdin>:");
132 } else {
133 for (i = 1; i < argc; i++) {
134 if (!(feeds[i - 1] = calloc(1, sizeof(struct fee…
135 err(1, "calloc");
136 name = ((name = strrchr(argv[i], '/'))) ? name +…
137 feeds[i - 1]->name = name;
138 if (!(fp = fopen(argv[i], "r")))
139 err(1, "fopen: %s", argv[i]);
140 printfeed(fp, feeds[i - 1]);
141 if (ferror(fp))
142 err(1, "ferror: %s", argv[i]);
143 fclose(fp);
144 }
145 }
146 fputs("</div>\n", stdout); /* div items */
147
148 if (showsidebar) {
149 fputs("\t<div id=\"sidebar\">\n\t\t<ul>\n", stdout);
150
151 for (i = 1; i < argc; i++) {
152 f = feeds[i - 1];
153 if (f->totalnew > 0)
154 fputs("<li class=\"n\"><a href=\"#", std…
155 else
156 fputs("<li><a href=\"#", stdout);
157 xmlencode(f->name, stdout);
158 fputs("\">", stdout);
159 if (f->totalnew > 0)
160 fputs("<b><u>", stdout);
161 xmlencode(f->name, stdout);
162 fprintf(stdout, " (%lu)", f->totalnew);
163 if (f->totalnew > 0)
164 fputs("</u></b>", stdout);
165 fputs("</a></li>\n", stdout);
166 }
167 fputs("\t\t</ul>\n\t</div>\n", stdout);
168 }
169
170 fprintf(stdout, "\t</body>\n\t<title>Tweets (%lu)</title>\n</htm…
171 totalnew);
172
173 return 0;
174 }
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.