bool CScraperUrl::DownloadThumbnail(const CStdString &thumb, const CScraperUrl::SUrlEntry& entry) { if (entry.m_url.IsEmpty()) return false; CURL url(entry.m_url); if (url.GetProtocol() != "http") { // do a direct file copy try { return CPicture::CreateThumbnail(entry.m_url, thumb); } catch (...) { XFILE::CFile::Delete(thumb); } return false; } XFILE::CFileCurl http; http.SetReferer(entry.m_spoof); CStdString thumbData; if (http.Get(entry.m_url, thumbData)) { try { return CPicture::CreateThumbnailFromMemory((const BYTE *)thumbData.c_str(), thumbData.size(), URIUtils::GetExtension(entry.m_url), thumb); } catch (...) { XFILE::CFile::Delete(thumb); } } return false; }
bool CWeatherJob::DoWork() { // wait for the network if (!g_application.getNetwork().IsAvailable(true)) return false; // Download our weather CLog::Log(LOGINFO, "WEATHER: Downloading weather"); XFILE::CFileCurl httpUtil; CStdString strURL; strURL.Format("http://xoap.weather.com/weather/local/%s?cc=*&unit=m&dayf=4&prod=xoap&link=xoap&par=%s&key=%s", m_areaCode.c_str(), PARTNER_ID, PARTNER_KEY); CStdString xml; if (httpUtil.Get(strURL, xml)) { CLog::Log(LOGINFO, "WEATHER: Weather download successful"); if (!m_imagesOkay) { CDirectory::Create(WEATHER_BASE_PATH); if (WEATHER_USE_ZIP) g_ZipManager.ExtractArchive(WEATHER_SOURCE_FILE, WEATHER_BASE_PATH); #ifdef HAS_FILESYSTEM_RAR else if (WEATHER_USE_RAR) g_RarManager.ExtractArchive(WEATHER_SOURCE_FILE, WEATHER_BASE_PATH); #endif m_imagesOkay = true; } LoadWeather(xml); // and send a message that we're done CGUIMessage msg(GUI_MSG_NOTIFY_ALL,0,0,GUI_MSG_WEATHER_FETCHED); g_windowManager.SendThreadMessage(msg); } else CLog::Log(LOGERROR, "WEATHER: Weather download failed!"); return true; }
bool CWeather::GetSearchResults(const CStdString &strSearch, CStdString &strResult) { // Check to see if the user entered a weather.com code if (strSearch.size() == 8) { strResult = ""; int i = 0; for (i = 0; i < 4; ++i) { strResult += toupper(strSearch[i]); if (!isalpha(strSearch[i])) break; } if (i == 4) { for ( ; i < 8; ++i) { strResult += strSearch[i]; if (!isdigit(strSearch[i])) break; } if (i == 8) { return true; // match } } // no match, wipe string strResult = ""; } CGUIDialogSelect *pDlgSelect = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT); CGUIDialogProgress *pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); //do the download CStdString strURL; CStdString strXML; XFILE::CFileCurl httpUtil; if (pDlgProgress) { pDlgProgress->SetHeading(410); //"Accessing Weather.com" pDlgProgress->SetLine(0, 194); //"Searching" pDlgProgress->SetLine(1, strSearch); pDlgProgress->SetLine(2, ""); pDlgProgress->StartModal(); pDlgProgress->Progress(); } strURL.Format("http://xoap.weather.com/search/search?where=%s", strSearch); if (!httpUtil.Get(strURL, strXML)) { if (pDlgProgress) pDlgProgress->Close(); return false; } //some select dialog init stuff if (!pDlgSelect) { if (pDlgProgress) pDlgProgress->Close(); return false; } pDlgSelect->SetHeading(396); //"Select Location" pDlgSelect->Reset(); /////////////////////////////// // load the xml file /////////////////////////////// TiXmlDocument xmlDoc; xmlDoc.Parse(strXML.c_str()); if (xmlDoc.Error()) return false; TiXmlElement *pRootElement = xmlDoc.RootElement(); if (pRootElement) { CStdString strItemTmp; TiXmlElement *pElement = pRootElement->FirstChildElement("loc"); while (pElement) { if (!pElement->NoChildren()) { strItemTmp.Format("%s - %s", pElement->Attribute("id"), pElement->FirstChild()->Value()); pDlgSelect->Add(strItemTmp); } pElement = pElement->NextSiblingElement("loc"); } } if (pDlgProgress) pDlgProgress->Close(); pDlgSelect->EnableButton(true, 222); //'Cancel' button returns to weather settings pDlgSelect->DoModal(); if (pDlgSelect->GetSelectedLabel() < 0) { if (pDlgSelect->IsButtonPressed()) { pDlgSelect->Close(); //close the select dialog and return to weather settings return true; } } //copy the selected code into the settings if (pDlgSelect->GetSelectedLabel() >= 0) strResult = pDlgSelect->GetSelectedLabelText(); if (pDlgProgress) pDlgProgress->Close(); return true; }
bool CScraperUrl::Get(const SUrlEntry& scrURL, std::string& strHTML, XFILE::CFileCurl& http, const CStdString& cacheContext) { CURL url(scrURL.m_url); http.SetReferer(scrURL.m_spoof); CStdString strCachePath; if (scrURL.m_isgz) http.SetContentEncoding("gzip"); if (!scrURL.m_cache.IsEmpty()) { URIUtils::AddFileToFolder(g_advancedSettings.m_cachePath, "scrapers/"+cacheContext+"/"+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.clear(); strHTML.append(temp,temp+file.GetLength()); file.Close(); delete[] temp; return true; } } CStdString strHTML1(strHTML); if (scrURL.m_post) { CStdString strOptions = url.GetOptions(); strOptions = strOptions.substr(1); url.SetOptions(""); if (!http.Post(url.Get(), strOptions, strHTML1)) return false; } else if (!http.Get(url.Get(), strHTML1)) return false; strHTML = strHTML1; if (scrURL.m_url.Find(".zip") > -1 ) { XFILE::CFileZip file; CStdString strBuffer; int iSize = file.UnpackFromMemory(strBuffer,strHTML,scrURL.m_isgz); if (iSize) { strHTML.clear(); strHTML.append(strBuffer.c_str(),strBuffer.data()+iSize); } } if (!scrURL.m_cache.IsEmpty()) { CStdString strCachePath; URIUtils::AddFileToFolder(g_advancedSettings.m_cachePath, "scrapers/"+cacheContext+"/"+scrURL.m_cache, strCachePath); XFILE::CFile file; if (file.OpenForWrite(strCachePath,true)) file.Write(strHTML.data(),strHTML.size()); file.Close(); } return true; }