void MovieSearchClient::Search(int start)
{
QUrl url("http://www.google.com/m/movies");
+ url.addQueryItem("action","chgloc");
url.addQueryItem("loc", _town);
url.addQueryItem("sort", QString::number(1));
AbstractSearchClient::Search(url, start);
PARSE_MOVIE_LINK,
PARSE_EXPECT_DIV1,
PARSE_EXPECT_DIV2, PARSE_DIV2,
- PARSE_SPAN, PARSE_RATING, PARSE_TRAILER
+ PARSE_SPAN, PARSE_RATING, PARSE_TRAILER,
+ PARSE_NEXT_PAGE_LINK
};
void MovieSearchClient::ReplyFinished(QNetworkReply *reply)
QString movie_theaters_url;
QRegExp duration_pattern("((\\d+)hr )?(\\d+)min");
QRegExp reviews_pattern("\\d+ review(s)?");
+ QString next_page_url;
+ int next_page_start;
while (!xml.atEnd()) {
QXmlStreamReader::TokenType token = xml.readNext();
if (token == QXmlStreamReader::StartElement) {
movie_rating = -1.0;
movie_theaters_url = attr_href;
state = PARSE_MOVIE_LINK;
+ } else if (url.hasQueryItem("start")) {
+ QString sort = url.queryItemValue("sort");
+ QString start = url.queryItemValue("start");
+ int istart = start.toInt();
+ if (sort == "1" && istart > GetStartIndex()) {
+ //std::cout << "next page LINK " << qPrintable(attr_href) << std::endl;
+ next_page_url = attr_href;
+ next_page_start = istart;
+ }
+ state = PARSE_NEXT_PAGE_LINK;
} else {
state = PARSE_HTML;
}
}
}
state = PARSE_HTML;
+ } else if (state == PARSE_NEXT_PAGE_LINK) {
+ state = PARSE_HTML;
}
} else if (token == QXmlStreamReader::Characters) {
if (state == PARSE_MOVIE_LINK) {
emit SearchFinished(GetSearchTaskId(), false);
deleteLater();
} else {
- if (found > 0) {
+ if (!next_page_url.isEmpty()) {
emit Reply(GetSearchTaskId(), true);
- Search(GetStartIndex() + found);
+ SearchEncodedUrl(next_page_url, next_page_start);
} else {
emit Reply(GetSearchTaskId(), false);
emit SearchFinished(GetSearchTaskId(), true);