| 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 ;
}