X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Frssclient%2Fserv_rssclient.c;h=72ce11ed280f8164cdaa538ce73b0bf6994d7529;hb=684e3a06c4d2ab35e39760f328a0d354ad330622;hp=2b1baa5d9b14f014a6677f3d8e355729bcea1fe0;hpb=83b162e34bdb8474a872ae531b56c4cbb934a9a6;p=citadel.git diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index 2b1baa5d9..72ce11ed2 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -134,7 +134,7 @@ void rss_end_element(void *data, const char *el) // check the use table StrBuf *u = NewStrBuf(); StrBufAppendPrintf(u, "rss/%s", r->item_id); - time_t already_seen = CheckIfAlreadySeen("rss", u, time(NULL), 604800, eUpdate, 0, 0); + int already_seen = CheckIfAlreadySeen(u); FreeStrBuf(&u); if (already_seen == 0) { @@ -185,7 +185,7 @@ void rss_end_element(void *data, const char *el) } } else { - syslog(LOG_DEBUG, "%s was already seen %ld seconds ago", r->item_id, already_seen); + syslog(LOG_DEBUG, "%s was already seen", r->item_id); } CM_Free(r->msg); @@ -213,13 +213,21 @@ void rss_end_element(void *data, const char *el) } else if (!strcasecmp(el, "pubdate")) { // date/time stamp (rss) Sat, 25 Feb 2017 14:28:01 EST - if (CM_IsEmpty(r->msg, eTimestamp)) { + if ((r->msg)&&(r->msg->cm_fields[eTimestamp]==NULL)) { CM_SetFieldLONG(r->msg, eTimestamp, parsedate(ChrPtr(r->CData))); } } else if (!strcasecmp(el, "updated")) { // date/time stamp (atom) 2003-12-13T18:30:02Z - // FIXME parse it + if ((r->msg)&&(r->msg->cm_fields[eTimestamp]==NULL)) { + struct tm t; + char zulu; + memset(&t, 0, sizeof t); + sscanf(ChrPtr(r->CData), "%d-%d-%dT%d:%d:%d%c", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec, &zulu); + t.tm_year -= 1900; + t.tm_mon -= 1; + CM_SetFieldLONG(r->msg, eTimestamp, mktime(&t)); + } } else if (!strcasecmp(el, "link")) { // link to story (rss) @@ -246,6 +254,7 @@ void rss_end_element(void *data, const char *el) else if ( (!strcasecmp(el, "description")) // message text (rss) || (!strcasecmp(el, "summary")) // message text (atom) + || (!strcasecmp(el, "content")) // message text (atom) ) { if (r->description != NULL) { free(r->description); @@ -284,7 +293,7 @@ void rss_parse_feed(StrBuf *Feed, struct rssroom *rooms) memset(&r, 0, sizeof r); r.rooms = rooms; - XML_Parser p = XML_ParserCreateNS("UTF-8", ':'); + XML_Parser p = XML_ParserCreate("UTF-8"); XML_SetElementHandler(p, rss_start_element, rss_end_element); XML_SetCharacterDataHandler(p, rss_handle_data); XML_SetUserData(p, (void *)&r); @@ -323,17 +332,6 @@ void rssclient_push_todo(char *rssurl, char *roomname) } -// Callback function for curl -// -size_t rss_pof_write_data(void *buffer, size_t size, size_t nmemb, void *userp) -{ - StrBuf *Downloaded = (StrBuf *)userp; - size_t bytes = size * nmemb; - StrBufAppendBufPlain(Downloaded, buffer, bytes, 0); - return(bytes); -} - - // pull one feed (possibly multiple rooms) // void rss_pull_one_feed(struct rssurl *url) @@ -352,8 +350,10 @@ void rss_pull_one_feed(struct rssurl *url) Downloaded = NewStrBuf(); curl_easy_setopt(curl, CURLOPT_URL, url->url); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // Follow redirects - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, rss_pof_write_data); // What to do with downloaded data + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlFillStrBuf_callback); // What to do with downloaded data curl_easy_setopt(curl, CURLOPT_WRITEDATA, Downloaded); // Give it our StrBuf to work with curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20L); // Time out after 20 seconds res = curl_easy_perform(curl); // Perform the request