bool ArtistInfo::parse(std::string &data) { size_t a, b; bool parse_failed = false; if ((a = data.find("<content>")) != std::string::npos) { a += static_strlen("<content>"); if ((b = data.find("</content>")) == std::string::npos) parse_failed = true; } else parse_failed = true; if (parse_failed) { data = msgParseFailed; return false; } if (a == b) { data = "No description available for this artist."; return false; } std::vector< std::pair<std::string, std::string> > similars; for (size_t i = data.find("<name>"), j, k = data.find("<url>"), l; i != std::string::npos; i = data.find("<name>", i), k = data.find("<url>", k)) { j = data.find("</name>", i); i += static_strlen("<name>"); l = data.find("</url>", k); k += static_strlen("<url>"); similars.push_back(std::make_pair(data.substr(i, j-i), data.substr(k, l-k))); StripHtmlTags(similars.back().first); } a += static_strlen("<![CDATA["); b -= static_strlen("]]>"); data = data.substr(a, b-a); postProcess(data); data += "\n\nSimilar artists:\n"; for (size_t i = 1; i < similars.size(); ++i) { data += "\n * "; data += similars[i].first; data += " ("; data += similars[i].second; data += ")"; } data += "\n\n"; data += similars.front().second; return true; }
bool Feed::Load() { // Initialize wstring file = GetDataPath() + L"feed.xml"; items.clear(); // Load XML file xml_document doc; xml_parse_result result = doc.load_file(file.c_str()); if (result.status != status_ok) { return false; } // Read channel information xml_node channel = doc.child(L"rss").child(L"channel"); title = XML_ReadStrValue(channel, L"title"); link = XML_ReadStrValue(channel, L"link"); description = XML_ReadStrValue(channel, L"description"); // Read items for (xml_node item = channel.child(L"item"); item; item = item.next_sibling(L"item")) { // Read data items.resize(items.size() + 1); items.back().index = items.size() - 1; items.back().category = XML_ReadStrValue(item, L"category"); items.back().title = XML_ReadStrValue(item, L"title"); items.back().link = XML_ReadStrValue(item, L"link"); items.back().description = XML_ReadStrValue(item, L"description"); // Remove if title or link is empty if (category == FEED_CATEGORY_LINK) { if (items.back().title.empty() || items.back().link.empty()) { items.pop_back(); continue; } } // Clean up title DecodeHtmlEntities(items.back().title); Replace(items.back().title, L"\\'", L"'"); // Clean up description Replace(items.back().description, L"<br/>", L"\n"); Replace(items.back().description, L"<br />", L"\n"); StripHtmlTags(items.back().description); DecodeHtmlEntities(items.back().description); Trim(items.back().description, L" \n"); Aggregator.ParseDescription(items.back(), link); Replace(items.back().description, L"\n", L" | "); // Get download link if (InStr(items.back().link, L"nyaatorrents", 0, true) > -1) { Replace(items.back().link, L"torrentinfo", L"download"); } } return true; }
LastfmService::Result LastfmService::fetch(Args &args) { Result result; std::string url = baseURL; url += methodName(); for (Args::const_iterator it = args.begin(); it != args.end(); ++it) { url += "&"; url += it->first; url += "="; url += Curl::escape(it->second); } std::string data; CURLcode code = Curl::perform(data, url); if (code != CURLE_OK) { result.second = curl_easy_strerror(code); return result; } if (actionFailed(data)) { StripHtmlTags(data); result.second = data; return result; } if (!parse(data)) { // if relevant part of data was not found and one of arguments // was language, try to fetch it again without that parameter. // otherwise just report failure. Args::iterator lang = args.find("lang"); if (lang != args.end()) { args.erase(lang); return fetch(args); } else { // parse should change data to error msg, if it fails result.second = data; return result; } } result.first = true; result.second = data; return result; }
void FormatDialog::RefreshPreviewText() { // Replace variables std::wstring str; GetDlgItemText(IDC_RICHEDIT_FORMAT, str); anime::Episode* episode = &taiga::DummyEpisode; if (CurrentEpisode.anime_id > 0) episode = &CurrentEpisode; str = ReplaceVariables(str, *episode, false, false, true); switch (mode) { case kFormatModeMirc: { // Strip IRC characters for (size_t i = 0; i < str.length(); i++) { if (str[i] == 0x02 || // Bold str[i] == 0x16 || // Reverse str[i] == 0x1D || // Italic str[i] == 0x1F || // Underline str[i] == 0x0F) { // Disable all str.erase(i, 1); i--; continue; } // Color code if (str[i] == 0x03) { str.erase(i, 1); if (IsNumericChar(str[i])) str.erase(i, 1); if (IsNumericChar(str[i])) str.erase(i, 1); i--; continue; } } break; } case kFormatModeSkype: { // Strip HTML codes StripHtmlTags(str); break; } } // Set final text SetDlgItemText(IDC_EDIT_PREVIEW, str.c_str()); }
void LastfmService::postProcess(std::string &data) { StripHtmlTags(data); Trim(data); }