static void process(struct cconf *config) { int i; struct buffer *data; proc_cache_purge(PROC_CACHE_PURGE_INTERVAL); dlhist_purge(DLHIST_PURGE_INTERVAL); for(i=0; i < config->nr; i++) { struct target *t = config->target + i; rss_t rss; data = http_fetch_page(t->src); if (!data) continue; rss = rss_parse(data->block, data->len); if (!rss) { error("failed to parse rss: %s", t->src); continue; } process_items(rss, t); rss_free(rss); http_free(data); } }
rss_file *rss_open_file(const char *filename) { xmlParserCtxtPtr ctxt; xmlDocPtr doc; rss_file *f; xmlNode *root_element = NULL; gchar *fetched_time; ctxt = xmlNewParserCtxt(); ctxt->sax->getEntity = _get_entity; doc = xmlSAXParseFile(ctxt->sax, filename, 0); if (!doc) { fprintf(stderr, "Error parsing RSS file %s.\n", filename); xmlFreeParserCtxt(ctxt); return NULL; } root_element = xmlDocGetRootElement(doc); if (!root_element) { xmlFreeDoc(doc); xmlFreeParserCtxt(ctxt); fprintf(stderr, "Error parsing RSS file %s.\n", filename); return NULL; } /* Establish the time the RSS file was 'fetched'. */ fetched_time = get_rfc822_time(); if (!fetched_time) { xmlFreeDoc(doc); xmlFreeParserCtxt(ctxt); g_fprintf(stderr, "Error retrieving current time.\n"); return NULL; } f = rss_parse(filename, root_element, fetched_time); xmlFreeDoc(doc); xmlFreeParserCtxt(ctxt); g_free(fetched_time); return f; }