void OnlineSearchBioRxiv::startSearch(const QMap<QString, QString> &query, int numResults) { m_hasBeenCanceled = false; emit progress(curStep = 0, numSteps = numResults * 2 + 1); QString urlText(QString(QStringLiteral("http://biorxiv.org/search/numresults:%1 sort:relevance-rank title_flags:match-phrase format_result:standard ")).arg(numResults)); urlText.append(query[queryKeyFreeText]); bool ok = false; int year = query[queryKeyYear].toInt(&ok); if (ok && year >= 1800 && year < 2100) urlText.append(QString(QStringLiteral(" limit_from:%1-01-01 limit_to:%1-12-31")).arg(year)); const QStringList authors = splitRespectingQuotationMarks(query[queryKeyAuthor]); int authorIndex = 1; for (QStringList::ConstIterator it = authors.constBegin(); it != authors.constEnd(); ++it, ++authorIndex) urlText.append(QString(QStringLiteral(" author%1:%2")).arg(authorIndex).arg(QString(*it).replace(QStringLiteral(" "), QStringLiteral("+")))); const QString title = QString(query[queryKeyTitle]).replace(QStringLiteral(" "), QStringLiteral("+")); if (!title.isEmpty()) urlText.append(QString(QStringLiteral(" title:%1")).arg(title)); QNetworkRequest request(QUrl::fromUserInput(urlText)); QNetworkReply *reply = InternalNetworkAccessManager::self()->get(request); InternalNetworkAccessManager::self()->setNetworkReplyTimeout(reply); connect(reply, &QNetworkReply::finished, this, &OnlineSearchBioRxiv::resultsPageDone); }
void UltimateLyricsProvider::fetchInfo(int id, const Song &metadata) { #if QT_VERSION < 0x050000 const QTextCodec *codec = QTextCodec::codecForName(charset.toAscii().constData()); #else const QTextCodec *codec = QTextCodec::codecForName(charset.toLatin1().constData()); #endif if (!codec) { emit lyricsReady(id, QString()); return; } QString artistFixed=metadata.basicArtist(); QString urlText(url); if (QLatin1String("lyrics.wikia.com")==name) { QUrl url(urlText); #if QT_VERSION < 0x050000 QUrl &query=url; #else QUrlQuery query; #endif query.addQueryItem(QLatin1String("artist"), artistFixed); query.addQueryItem(QLatin1String("song"), metadata.title); query.addQueryItem(QLatin1String("func"), QLatin1String("getSong")); query.addQueryItem(QLatin1String("fmt"), QLatin1String("xml")); #if QT_VERSION >= 0x050000 url.setQuery(query); #endif NetworkJob *reply = NetworkAccessManager::self()->get(url); requests[reply] = id; connect(reply, SIGNAL(finished()), this, SLOT(wikiMediaSearchResponse())); return; } songs.insert(id, metadata); // Fill in fields in the URL bool urlContainsDetails=urlText.contains(QLatin1Char('{')); if (urlContainsDetails) { doUrlReplace(constArtistArg, artistFixed, urlText); doUrlReplace(constArtistLowerArg, artistFixed.toLower(), urlText); doUrlReplace(constArtistLowerNoSpaceArg, noSpace(artistFixed.toLower()), urlText); doUrlReplace(constArtistFirstCharArg, firstChar(artistFixed), urlText); doUrlReplace(constAlbumArg, metadata.album, urlText); doUrlReplace(constAlbumLowerArg, metadata.album.toLower(), urlText); doUrlReplace(constAlbumLowerNoSpaceArg, noSpace(metadata.album.toLower()), urlText); doUrlReplace(constTitleArg, metadata.title, urlText); doUrlReplace(constTitleLowerArg, metadata.title.toLower(), urlText); doUrlReplace(constTitleCaseArg, titleCase(metadata.title), urlText); doUrlReplace(constYearArg, QString::number(metadata.year), urlText); doUrlReplace(constTrackNoArg, QString::number(metadata.track), urlText); } // For some reason Qt messes up the ? -> %3F and & -> %26 conversions - by placing 25 after the % // So, try and revert this... QUrl url(urlText); if (urlContainsDetails) { QByteArray data=url.toEncoded(); data.replace("%253F", "%3F"); data.replace("%253f", "%3f"); data.replace("%2526", "%26"); url=QUrl::fromEncoded(data, QUrl::StrictMode); } QNetworkRequest req(url); req.setRawHeader("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0"); NetworkJob *reply = NetworkAccessManager::self()->get(req); requests[reply] = id; connect(reply, SIGNAL(finished()), this, SLOT(lyricsFetched())); }