Skip to content

Commit 4b2549e

Browse files
committed
add example
1 parent 97e2679 commit 4b2549e

File tree

4 files changed

+239
-0
lines changed

4 files changed

+239
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
*.selections.json
33
*.o
44
mrss
5+
6+
examples/parser/parser

examples/parser/.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.dub
2+
docs.json
3+
__dummy.html
4+
*.o
5+
*.obj

examples/parser/dub.sdl

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
name "parser"
2+
dependency "mrss" version="~>0.0.4"

examples/parser/source/app.d

+230
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
import core.stdc.stdio;
2+
import core.stdc.string;
3+
import deimos.mrss;
4+
import etc.c.curl;
5+
import std.string;
6+
7+
int main (string[] args)
8+
{
9+
mrss_t *data;
10+
mrss_error_t ret;
11+
mrss_hour_t *hour;
12+
mrss_day_t *day;
13+
mrss_category_t *category;
14+
mrss_item_t *item;
15+
CURLcode code;
16+
17+
if (args.length != 2)
18+
{
19+
fprintf (stderr,
20+
"Usage:\n\t%s url_rss\n\nExample:\n\t%s http://ngvision.org/rss|file.rss\n\n",
21+
args[0].toStringz, args[0].toStringz);
22+
return 1;
23+
}
24+
25+
if (!strncmp (args[1].toStringz, "http://", 7) || !strncmp (args[1].toStringz, "https://", 8))
26+
ret = mrss_parse_url_with_options_and_error (cast(char*) args[1].toStringz, &data, null, &code);
27+
else
28+
ret = mrss_parse_file (cast(char*) args[1].toStringz, &data);
29+
30+
if (ret)
31+
{
32+
fprintf (stderr, "MRSS return error: %s\n",
33+
ret ==
34+
mrss_error_t.MRSS_ERR_DOWNLOAD ? mrss_curl_strerror (code) :
35+
mrss_strerror (ret));
36+
return 1;
37+
}
38+
39+
fprintf (stdout, "\nGeneric:\n");
40+
fprintf (stdout, "\tfile: %s\n", data.file);
41+
fprintf (stdout, "\tencoding: %s\n", data.encoding);
42+
fprintf (stdout, "\tsize: %d\n", cast(int) data.size);
43+
44+
fprintf (stdout, "\tversion:");
45+
final switch (data.version_) with(mrss_version_t)
46+
{
47+
case MRSS_VERSION_0_91:
48+
fprintf (stdout, " 0.91\n");
49+
break;
50+
51+
case MRSS_VERSION_0_92:
52+
fprintf (stdout, " 0.92\n");
53+
break;
54+
55+
case MRSS_VERSION_1_0:
56+
fprintf (stdout, " 1.0\n");
57+
break;
58+
59+
case MRSS_VERSION_2_0:
60+
fprintf (stdout, " 2.0\n");
61+
break;
62+
63+
case MRSS_VERSION_ATOM_1_0:
64+
fprintf (stdout, " Atom 1.0\n");
65+
break;
66+
67+
case MRSS_VERSION_ATOM_0_3:
68+
fprintf (stdout, " Atom 0.3\n");
69+
break;
70+
}
71+
72+
fprintf (stdout, "\nChannel:\n");
73+
fprintf (stdout, "\ttitle: %s\n", data.title);
74+
fprintf (stdout, "\tdescription: %s\n", data.description);
75+
fprintf (stdout, "\tlink: %s\n", data.link);
76+
fprintf (stdout, "\tlanguage: %s\n", data.language);
77+
fprintf (stdout, "\trating: %s\n", data.rating);
78+
fprintf (stdout, "\tcopyright: %s\n", data.copyright);
79+
fprintf (stdout, "\tpubDate: %s\n", data.pubDate);
80+
fprintf (stdout, "\tlastBuildDate: %s\n", data.lastBuildDate);
81+
fprintf (stdout, "\tdocs: %s\n", data.docs);
82+
fprintf (stdout, "\tmanagingeditor: %s\n", data.managingeditor);
83+
fprintf (stdout, "\twebMaster: %s\n", data.webMaster);
84+
fprintf (stdout, "\tgenerator: %s\n", data.generator);
85+
fprintf (stdout, "\tttl: %d\n", data.ttl);
86+
fprintf (stdout, "\tabout: %s\n", data.about);
87+
88+
fprintf (stdout, "\nImage:\n");
89+
fprintf (stdout, "\timage_title: %s\n", data.image_title);
90+
fprintf (stdout, "\timage_url: %s\n", data.image_url);
91+
fprintf (stdout, "\timage_link: %s\n", data.image_link);
92+
fprintf (stdout, "\timage_width: %d\n", data.image_width);
93+
fprintf (stdout, "\timage_height: %d\n", data.image_height);
94+
fprintf (stdout, "\timage_description: %s\n", data.image_description);
95+
96+
fprintf (stdout, "\nTextInput:\n");
97+
fprintf (stdout, "\ttextinput_title: %s\n", data.textinput_title);
98+
fprintf (stdout, "\ttextinput_description: %s\n",
99+
data.textinput_description);
100+
fprintf (stdout, "\ttextinput_name: %s\n", data.textinput_name);
101+
fprintf (stdout, "\ttextinput_link: %s\n", data.textinput_link);
102+
103+
fprintf (stdout, "\nCloud:\n");
104+
fprintf (stdout, "\tcloud: %s\n", data.cloud);
105+
fprintf (stdout, "\tcloud_domain: %s\n", data.cloud_domain);
106+
fprintf (stdout, "\tcloud_port: %d\n", data.cloud_port);
107+
fprintf (stdout, "\tcloud_registerProcedure: %s\n",
108+
data.cloud_registerProcedure);
109+
fprintf (stdout, "\tcloud_protocol: %s\n", data.cloud_protocol);
110+
111+
fprintf (stdout, "\nSkipHours:\n");
112+
hour = data.skipHours;
113+
while (hour)
114+
{
115+
fprintf (stdout, "\t%s\n", hour.hour);
116+
hour = hour.next;
117+
}
118+
119+
fprintf (stdout, "\nSkipDays:\n");
120+
day = data.skipDays;
121+
while (day)
122+
{
123+
fprintf (stdout, "\t%s\n", day.day);
124+
day = day.next;
125+
}
126+
127+
fprintf (stdout, "\nCategory:\n");
128+
category = data.category;
129+
while (category)
130+
{
131+
fprintf (stdout, "\tcategory: %s\n", category.category);
132+
fprintf (stdout, "\tcategory_domain: %s\n", category.domain);
133+
category = category.next;
134+
}
135+
136+
if (data.other_tags)
137+
print_tags (data.other_tags, 0);
138+
139+
fprintf (stdout, "\nItems:\n");
140+
item = data.item;
141+
while (item)
142+
{
143+
fprintf (stdout, "\ttitle: %s\n", item.title);
144+
fprintf (stdout, "\tlink: %s\n", item.link);
145+
fprintf (stdout, "\tdescription: %s\n", item.description);
146+
fprintf (stdout, "\tauthor: %s\n", item.author);
147+
fprintf (stdout, "\tcomments: %s\n", item.comments);
148+
fprintf (stdout, "\tpubDate: %s\n", item.pubDate);
149+
fprintf (stdout, "\tguid: %s\n", item.guid);
150+
fprintf (stdout, "\tguid_isPermaLink: %d\n", item.guid_isPermaLink);
151+
fprintf (stdout, "\tsource: %s\n", item.source);
152+
fprintf (stdout, "\tsource_url: %s\n", item.source_url);
153+
fprintf (stdout, "\tenclosure: %s\n", item.enclosure);
154+
fprintf (stdout, "\tenclosure_url: %s\n", item.enclosure_url);
155+
fprintf (stdout, "\tenclosure_length: %d\n", item.enclosure_length);
156+
fprintf (stdout, "\tenclosure_type: %s\n", item.enclosure_type);
157+
158+
fprintf (stdout, "\tCategory:\n");
159+
category = item.category;
160+
while (category)
161+
{
162+
fprintf (stdout, "\t\tcategory: %s\n", category.category);
163+
fprintf (stdout, "\t\tcategory_domain: %s\n", category.domain);
164+
category = category.next;
165+
}
166+
167+
if (item.other_tags)
168+
print_tags (item.other_tags, 1);
169+
170+
fprintf (stdout, "\n");
171+
item = item.next;
172+
}
173+
174+
mrss_free (data);
175+
176+
return 0;
177+
}
178+
179+
extern(C) static void
180+
print_tags (mrss_tag_t * tag, int index)
181+
{
182+
mrss_attribute_t *attribute;
183+
int i;
184+
185+
for (i = 0; i < index; i++)
186+
fprintf (stdout, "\t");
187+
188+
fprintf (stdout, "Other Tags:\n");
189+
while (tag)
190+
{
191+
for (i = 0; i < index; i++)
192+
fprintf (stdout, "\t");
193+
194+
fprintf (stdout, "\ttag name: %s\n", tag.name);
195+
196+
for (i = 0; i < index; i++)
197+
fprintf (stdout, "\t");
198+
199+
fprintf (stdout, "\ttag value: %s\n", tag.value);
200+
201+
for (i = 0; i < index; i++)
202+
fprintf (stdout, "\t");
203+
204+
fprintf (stdout, "\ttag ns: %s\n", tag.ns);
205+
206+
if (tag.children)
207+
print_tags (tag.children, index + 1);
208+
209+
for (attribute = tag.attributes; attribute;
210+
attribute = attribute.next)
211+
{
212+
for (i = 0; i < index; i++)
213+
fprintf (stdout, "\t");
214+
215+
fprintf (stdout, "\tattribute name: %s\n", attribute.name);
216+
217+
for (i = 0; i < index; i++)
218+
fprintf (stdout, "\t");
219+
220+
fprintf (stdout, "\tattribute value: %s\n", attribute.value);
221+
222+
for (i = 0; i < index; i++)
223+
fprintf (stdout, "\t");
224+
225+
fprintf (stdout, "\tattribute ns: %s\n", attribute.ns);
226+
}
227+
228+
tag = tag.next;
229+
}
230+
}

0 commit comments

Comments
 (0)