Russian Qt Forum

Qt => Работа с сетью => Тема начата: sobr_vamp от Июнь 16, 2011, 16:58



Название: Qt + API к поисковикам
Отправлено: sobr_vamp от Июнь 16, 2011, 16:58
Всем привет.
Делаю приложение, связанное с поиском.
Задача:
Нужно обращаться к поисковику (неважно google, yandex или другое что-то) при помощи POST метода, получать от него ответы (10-20 первых) в xml (или другом формате), парсить их и использовать дальше. Также отлично было бы, если была возможность загружать html-документы (или их фрагменты), в которых были найдены ответы.

Проблема:
1. Знаю, что нужно использовать QNetworkManager, QNetworkRequest и так далее. Пытался переделать http://habrahabr.ru/blogs/net/116479/ эту статью, где для .NET написано, получилось это:

Код:
    QString* query = new QString("<?xml version=""1.0"" encoding=""UTF-8""?>"
                                 "<request><query>" + ui->search_le->text().toUtf8() +
                                 "</query><groupings><groupby attr=""d"""
                                 "mode=""deep""groups-on-page=""10""docs-in-group=""1"" />"
                                 "</groupings></request>");

    QUrl apiurl = QUrl("http://xmlsearch.yandex.ru/xmlsearch?user=*******&"
                       "key=03.*******:**************f01e29f007af7994e951");

    manager = new QNetworkAccessManager();
    request = new QNetworkRequest(apiurl);
    reply = manager->post(*request, query->toUtf8());

    QString answer = QString::fromUtf8(reply->readAll());
Вроде всё нормально, но результатов не возвращает. И как ошибку найти непонятно.

2. Также не могу найти готовые решения или хотя бы примеры реального использования.
Есть примеры POST-запросов. А чтобы именно по API к поисковику - нет.

Если кто чем может помочь, буду премного благодарен.
Может кто реализовывал что подобное и поделится или укажет на существующие обёртки.
Спасибо.


Название: Re: Qt + API к поисковикам
Отправлено: sobr_vamp от Июнь 16, 2011, 20:56
Помогли на stackoverflow
Нужно было дописать примерно следующее:

Код:
connect(manager, SIGNAL(finished(QNetworkReply*)),
     this, SLOT(replyFinished(QNetworkReply*)));

MyClass::replyFinished(QNetworkReply* reply)
{
 QString answer = QString::fromUtf8(reply->readAll());     
}