Как использовать Google Translate API с C ++ - PullRequest
1 голос
/ 18 декабря 2011

Я новичок в C ++ и использую API задач Google.

Как мне написать программу на C ++, которая принимает слово, затем вызывает Google Translate для перевода его с английского на французский, а затем сохраняет полученный результатстраница в локальный файл?

Например, если пользователь вводит «река», программа должна вызвать Google Translate для перевода на французский язык, в результате получается страница: http://translate.google.com/#en|fr|River%0A Эта страница должна быть сохранена.

Я полностью прочитал официальную документацию: http://code.google.com/apis/language/translate/v2/getting_started.html, но я не мог понять, как использовать REST, и я не знаком с JSON или AJAX.

Ответы [ 4 ]

2 голосов
/ 18 декабря 2011

Вы не можете использовать объекты JSON прямо в C ++.

JSON = JavaScript Object Notation

Вам нужно создать / создать что-то, что может анализировать такие объекты.Например, я использовал QNetworkManager в Qt (на C ++) для отправки сборки javascript и отправки запросов в API Google.Результатом будет объект JSON, который мне нужно было проанализировать и отобразить в браузере (который я сделал в c ++) или проанализировать результаты в классе c ++ и обработать его по-другому (выполнить некоторые вычисления с ним).

Если вам просто нужны данные, вы можете запросить XML вместо JSON, а затем использовать стандартный синтаксический анализатор XML для извлечения переведенного слова.

EDIT 1:

Google в своем примере использует:
https://www.googleapis.com/language/translate/v2?key=YOUR-API-KEY&source=en&target=de&q=words+to+translate

Это перевод с английского (en) на немецкий (de).Слова для перевода: «слова для перевода».

Теперь создайте HTTP-запрос в C ++ с этим URL-адресом в качестве данных.Отправьте это с каким-нибудь сетевым менеджером или сокетами и дождитесь ответа.Google вернет вам данные.

0 голосов
/ 15 сентября 2013

Я где-то видел эти коды ниже, но я не помню где, в любом случае попробуйте это:

QString YourClass::translate(QString keyword, QString from, QString to)
{
    //Translate URL
    QString url = QString("http://translate.google.com/translate_a/t?client=t&text=%0&hl=%1&sl=%2&tl=%1&multires=1&prev=enter&oc=2&ssel=0&tsel=0&uptl=%1&sc=1").arg(keyword).arg(to).arg(from);

    QNetworkAccessManager manager;
    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);

    //Get reply from Google
    do {
        QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
    } while(!reply->isFinished());

    //Convert to string
    QString translation(reply->readAll());
    reply->close();

    //Free memory
    delete reply;

    //Remove [[[" from the beginning
    translation = translation.replace("[[[\"", "");

    //Extract final translated string
    translation = translation.mid(0, translation.indexOf(",\"") - 1);

    return translation;
}
0 голосов
/ 18 января 2012

Вам нужна какая-то библиотека HTTP.Я повторяю большую часть того, что сказал Адриан, но вот некоторый (неполный) код Qt, который должен дать вам представление.

namespace {
    const QString API_KEY = /* TODO */;
}

MyQObject :: MyQbject ()
: m_manager (new QNetworkAccessManager (this))
{
    connect(manager, SIGNAL (finished (QNetworkReply *)),
            this, SLOT (reply_finished (QNetworkReply *)));
}

void MyQObject :: fetch_translation (
     QString words,
     void (*on_receive)(const QString &))
{
    // Let's assume asynchronous but non-concurrent requests.
    m_on_receive = on_receive;

    QString request =
        "https://www.googleapis.com/language/translate/v2"
        "?key=%1&source=en&target=de&q=%2";

    // May want to url-encode 'words' first.

    m_manager -> get (QUrl (request .arg (API_KEY) .arg (words));
}

void MyQObject :: reply_finished (QNetworkReply * reply)
{
    m_on_receive (reply -> readAll ());
}

// ...
{
    my_q_object -> translate ("hello, world", [](const QString & s) {
        qWarning () << "translation is: " << s;
    });
}
0 голосов
/ 19 декабря 2011

кто-то посоветует мне использовать libcurl , попробую и посмотрю.

...