Return Type | Function name | Arguments |
---|---|---|
hzEcode | hzWebhost::getRss_r | (HttpRC&,const hzUrl&,unsigned int,) |
Declared in file: hzHttpClient.h
Defined in file : hzHttpClient.cpp
Function Logic:
Function body:
hzEcode hzWebhost::getRss_r (HttpRC& hRet, const hzUrl& feed, unsigned int nLevel) { _hzfunc("hzWebhost::getRss_r") ; hzVect<hzXmlNode*> linx ; hzVect<hzUrl> todo ; hzDocXml X ; hzXmlNode* pN1 ; hzXmlNode* pN2 ; hzDocMeta* pMark ; hzDocument* pDoc ; hzUrl page ; hzString desc ; hzString dstr ; hzString uqid ; hzString title ; uint32_t nIndex ; hzEcode rc = E_OK ; pDoc = Download(feed) ; if (rc != E_OK) { threadLog("Could not fetch URL %s\n", *feed) ; return rc ; } if (pDoc->Whatami() != DOCTYPE_XML) { threadLog("case 1. Fetched feed (%s) is not of doctype XML\n", *feed) ; return E_TYPE ; } nLevel++ ; rc = X.Load(HC.m_Content) ; if (rc != E_OK) return hzerr(rc, "Could not load feed %s", *feed) ; rc = X.FindNodes(linx, m_tagItem.m_Slct) ; threadLog("Found %d <item> tags in feed %s\n", linx.Count(), *feed) ; if (rc != E_OK) return rc ; for (nIndex = 0; nIndex < linx.Count() ; nIndex++) { threadLog("case 1\n") ; pN1 = linx[nIndex] ; title = (char*) 0; desc = (char*) 0; page = (char*) 0; uqid = (char*) 0; dstr = (char*) 0; for (pN2 = pN1->GetFirstChild() ; pN2 ; pN2 = pN2->Sibling()) { threadLog("case 2\n") ; if (pN2->NameEQ(*m_tagTitl.m_Slct)) { title = pN2->m_fixContent ; continue ; } if (pN2->NameEQ(*m_tagDesc.m_Slct)) { desc = pN2->m_fixContent ; continue ; } if (pN2->NameEQ(*m_tagLink.m_Slct)) { page = pN2->m_fixContent ; continue ; } if (pN2->NameEQ(*m_tagUqid.m_Slct)) { uqid = pN2->m_fixContent ; continue ; } if (pN2->NameEQ(*m_tagDate.m_Slct)) { dstr = pN2->m_fixContent ; continue ; } } threadLog("case 3\n") ; if (!page) { threadLog("case 1: title=%s; link=null uqid=%s\n", *title, *uqid) ; page = uqid ; } if (!page) { threadLog("case 2: title=%s; link=null uqid=%s\n", *title, *uqid) ; continue ; } threadLog("title=%s; link=%s\n", *title, *page) ; if (m_mapHist.Exists(page)) threadLog("Exists in history, page %s\n", *page) ; else { pMark = new hzDocMeta() ; pMark->m_Title = title ; pMark->m_Desc = desc ; pMark->m_urlReq = page ; if (dstr) pMark->m_Modified.SetDateTime(*dstr) ; todo.Add(page) ; threadLog("Adding to history, page %s\n", *page) ; } } for (nIndex = 0; nIndex < todo.Count() ; nIndex++) { page = todo[nIndex] ; threadLog("Processing %s\n", *page) ; rc = getRss_r(hRet, page, nLevel) ; } return rc ; }