bool CScraperUrl::Get(const SUrlEntry& scrURL, string& strHTML, CHTTP& http) { CURL url(scrURL.m_url); http.SetReferer(scrURL.m_spoof); CStdString strCachePath; if (!scrURL.m_cache.IsEmpty()) { CUtil::AddFileToFolder(g_advancedSettings.m_cachePath,"scrapers\\"+scrURL.m_cache,strCachePath); if (XFILE::CFile::Exists(strCachePath)) { XFILE::CFile file; file.Open(strCachePath); char* temp = new char[(int)file.GetLength()]; file.Read(temp,file.GetLength()); strHTML.append(temp,temp+file.GetLength()); file.Close(); delete[] temp; return true; } } if (scrURL.m_post) { CStdString strOptions = url.GetOptions(); strOptions = strOptions.substr(1); url.SetOptions(""); CStdString strUrl; url.GetURL(strUrl); if (!http.Post(strUrl, strOptions, strHTML)) return false; } else if (!http.Get(scrURL.m_url, strHTML)) return false; if (scrURL.m_url.Find(".zip") > -1) { XFILE::CFileZip file; CStdString strBuffer; int iSize = file.UnpackFromMemory(strBuffer,strHTML); if (iSize) { strHTML.clear(); strHTML.append(strBuffer.c_str(),strBuffer.data()+iSize); } } if (!scrURL.m_cache.IsEmpty()) { CStdString strCachePath; CUtil::AddFileToFolder(g_advancedSettings.m_cachePath,"scrapers\\"+scrURL.m_cache,strCachePath); XFILE::CFile file; if (file.OpenForWrite(strCachePath,true,true)) file.Write(strHTML.data(),strHTML.size()); file.Close(); } return true; }
/* <?xml version="1.0" encoding="UTF-8"?> <methodCall> <methodName>method</methodName> <params> <param><value><string>user</string></value></param> <param><value><string>challenge</string></value></param> <param><value><string>auth</string></value></param> <param><value><string>artist</string></value></param> <param><value><string>title</string></value></param> </params> </methodCall> */ bool CLastFmManager::CallXmlRpc(const CStdString& action, const CStdString& artist, const CStdString& title) { CStdString strUserName = g_guiSettings.GetString("lastfm.username"); CStdString strPassword = g_guiSettings.GetString("lastfm.password"); if (strUserName.IsEmpty() || strPassword.IsEmpty()) { CLog::Log(LOGERROR, "Last.fm CallXmlRpc no username or password set."); return false; } if (artist.IsEmpty()) { CLog::Log(LOGERROR, "Last.fm CallXmlRpc no artistname provided."); return false; } if (title.IsEmpty()) { CLog::Log(LOGERROR, "Last.fm CallXmlRpc no tracktitle provided."); return false; } char ti[20]; time_t rawtime; time ( &rawtime ); struct tm *now = gmtime(&rawtime); strftime(ti, sizeof(ti), "%Y-%m-%d %H:%M:%S", now); CStdString strChallenge = ti; CStdString strAuth; CreateMD5Hash(strPassword, strAuth); strAuth.append(strChallenge); CreateMD5Hash(strAuth, strAuth); //create request xml TiXmlDocument doc; TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "UTF-8", "" ); doc.LinkEndChild( decl ); TiXmlElement * elMethodCall = new TiXmlElement( "methodCall" ); doc.LinkEndChild( elMethodCall ); TiXmlElement * elMethodName = new TiXmlElement( "methodName" ); elMethodCall->LinkEndChild( elMethodName ); TiXmlText * txtAction = new TiXmlText( action ); elMethodName->LinkEndChild( txtAction ); TiXmlElement * elParams = new TiXmlElement( "params" ); elMethodCall->LinkEndChild( elParams ); TiXmlElement * elParam = new TiXmlElement( "param" ); elParams->LinkEndChild( elParam ); TiXmlElement * elValue = new TiXmlElement( "value" ); elParam->LinkEndChild( elValue ); TiXmlElement * elString = new TiXmlElement( "string" ); elValue->LinkEndChild( elString ); TiXmlText * txtParam = new TiXmlText( strUserName ); elString->LinkEndChild( txtParam ); elParam = new TiXmlElement( "param" ); elParams->LinkEndChild( elParam ); elValue = new TiXmlElement( "value" ); elParam->LinkEndChild( elValue ); elString = new TiXmlElement( "string" ); elValue->LinkEndChild( elString ); txtParam = new TiXmlText( strChallenge ); elString->LinkEndChild( txtParam ); elParam = new TiXmlElement( "param" ); elParams->LinkEndChild( elParam ); elValue = new TiXmlElement( "value" ); elParam->LinkEndChild( elValue ); elString = new TiXmlElement( "string" ); elValue->LinkEndChild( elString ); txtParam = new TiXmlText( strAuth ); elString->LinkEndChild( txtParam ); elParam = new TiXmlElement( "param" ); elParams->LinkEndChild( elParam ); elValue = new TiXmlElement( "value" ); elParam->LinkEndChild( elValue ); elString = new TiXmlElement( "string" ); elValue->LinkEndChild( elString ); txtParam = new TiXmlText( artist ); elString->LinkEndChild( txtParam ); elParam = new TiXmlElement( "param" ); elParams->LinkEndChild( elParam ); elValue = new TiXmlElement( "value" ); elParam->LinkEndChild( elValue ); elString = new TiXmlElement( "string" ); elValue->LinkEndChild( elString ); txtParam = new TiXmlText( title ); elString->LinkEndChild( txtParam ); CStdString strBody; strBody << doc; CHTTP http; CStdString html; CStdString url = "http://ws.audioscrobbler.com/1.0/rw/xmlrpc.php"; http.SetContentType("text/xml"); if (!http.Post(url, strBody, html)) { CLog::Log(LOGERROR, "Last.fm action %s failed.", action.c_str()); return false; } if (html.Find("fault") >= 0) { CLog::Log(LOGERROR, "Last.fm return failed response: %s", html.c_str()); return false; } return true; }