// 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) {
}
}
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);
}
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)
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);
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);
}
-// 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)
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