readr

Minimal Terminal RSS Reader
Log | Files | Refs | README | LICENSE

commit 02a4d6e68bff637ead8e0fd9d60eecd9c6b9be69
parent 2929cef4604ce0e9bdba5f49d8eb2f3cea312f8c
Author: citbl <citbl@citbl.org>
Date:   Sat, 25 Oct 2025 19:23:26 +1000

1.4 pass chrome user_agent for Reddit support

Diffstat:
Mdocs/readr.1 | 4++--
Mdocs/readr.html | 4++--
Msrc/config.h | 4+++-
Msrc/feeds.c | 21+++++++++++++++------
4 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/docs/readr.1 b/docs/readr.1 @@ -5,7 +5,7 @@ .nh .ad l .\" Begin generated content: -.TH "READR" "1" "2025-10-08" +.TH "READR" "1" "2025-10-25" .PP .SH NAME .PP @@ -29,7 +29,7 @@ make install .PP .SH REQUIREMENTS .PP -\fBlibcurl\fR(1), \fBlibmrss\fR(1) +\fBlibcurl\fR(1), \fBlibmrss\fR(1), \fBsqlite3\fR(1) .PP .SH EXAMPLES .PP diff --git a/docs/readr.html b/docs/readr.html @@ -52,7 +52,7 @@ </section> <section class="Sh"> <h1 class="Sh" id="REQUIREMENTS"><a class="permalink" href="#REQUIREMENTS">REQUIREMENTS</a></h1> -<p class="Pp"><b>libcurl</b>(1), <b>libmrss</b>(1)</p> +<p class="Pp"><b>libcurl</b>(1), <b>libmrss</b>(1), <b>sqlite3</b>(1)</p> </section> <section class="Sh"> <h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> @@ -88,7 +88,7 @@ https://example3.com/rss</pre> </div> <table class="foot"> <tr> - <td class="foot-date">2025-10-08</td> + <td class="foot-date">2025-10-25</td> <td class="foot-os"></td> </tr> </table> diff --git a/src/config.h b/src/config.h @@ -1,6 +1,8 @@ #pragma once -#define VERSION "v1.3" +#define VERSION "v1.4" + +#define USER_AGENT "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" // source file for RSS URLS, one per line // folder and file must exist diff --git a/src/feeds.c b/src/feeds.c @@ -47,10 +47,24 @@ void fetch_feed(feed_t* feed, char* url) { static mrss_t* rss = NULL; + + mrss_options_t* opt; + opt = mrss_options_new(10, // timeout + NULL, // proxy + NULL, // proxy_auth + NULL, // certfile + NULL, // password + NULL, // cacert + 1, // verifypeer + NULL, // authentication + USER_AGENT // for reddit etc. using Chrome + ); + *feed = (feed_t) { .url = url }; feed->title = (char*)ecalloc(FEED_CAP, sizeof(char)); - mrss_error_t rc = mrss_parse_url(url, &rss); + /* process feed */ + mrss_error_t rc = mrss_parse_url_with_options(url, &rss, opt); if (rc != MRSS_OK || rss == NULL) { snprintf(feed->title, FEED_CAP, "%s%s ", "(bad) ", url ? url : "(unknown feed url)"); @@ -59,17 +73,12 @@ fetch_feed(feed_t* feed, char* url) snprintf(feed->title, FEED_CAP, "%s", rss->title ? rss->title : "(unknown feedtitle)"); - // size_t len = MIN(FEED_CAP, strlen(rss->title) + 1); - // feed->title = (rss->title != NULL) ? strndup(rss->title, len) : "Unknown feed"; - // feed->title[len - 1] = '\0'; - for (mrss_item_t* it = rss->item; it; it = it->next) { char* title = (it->title && *it->title) ? it->title : ""; char* link = (it->link && *it->link) ? it->link : ""; char* comments = (it->comments && *it->comments) ? it->comments : ""; char* desc = (it->description && *it->description) ? it->description : ""; char* date = (it->pubDate && *it->pubDate) ? it->pubDate : ""; - // char* author = (it->author && *it->author) ? it->author : ""; remove_all_tags(desc);