2011-12-18 18 views
1

私はC++の初心者で、GoogleタスクAPIを使用しています。Google Translate APIをC++で使用する方法

単語を受け入れ、Google翻訳を呼び出して英語からフランス語に翻訳した後、結果のページをローカルファイルに保存するC++プログラムを作成するにはどうすればよいですか?

例えば、ユーザ入力「川」場合、プログラムはフランス語、結果のページに変換するためにGoogle翻訳を呼び出す必要がある。 http://translate.google.com/#en|fr|River%0A このページは保存する必要があります。

公式ドキュメントは完全にhttp://code.google.com/apis/language/translate/v2/getting_started.html ですが、RESTの使い方を理解できず、JSONやAJAXに慣れていません。

答えて

2

JSONオブジェクトをC++でそのまま使用することはできません。あなたはこのようなオブジェクトを解析することができる何かを作成/産卵する必要が

JSON = JavaScriptオブジェクト表記

。たとえば、QNetworkManagerをQt(C++で)を使ってビルドjavascriptを送信し、Google APIにリクエストを送信しました。結果はJSONオブジェクトで、これを解析してブラウザ(私がC++で作成したもの)に表示するか、結果をC++クラスに解析し、別の方法で処理します(いくつかの計算を行います)。

データが必要な場合は、JSONではなくXMLを要求してから、標準のXMLパーサーを使用して翻訳された単語を抽出することができます。

EDIT 1:自分の例では

Googleが使用しています:
https://www.googleapis.com/language/translate/v2?key=YOUR-API-KEY&source=en&target=de&q=words+to+translate

これは、(デ)、ドイツ語に英語(en)から変換します。翻訳する単語は「翻訳する単語」です。

このURLをデータとして使用して、C++でHTTPリクエストを作成します。いくつかのネットワークマネージャやソケットを使ってそれを送信し、返信を待つ。 Googleからデータを返送します。

+0

こんにちはエイドリアンを:あなたは、GoogleのAPIを呼び出すC++のコードを発揮することにより、よりを説明できます。 – yara

+0

私はQ ++をC++で使用していますので、純粋なC++ではありません。 C++には、HTTP GETリクエストをGoogle APIに送信するために使用できるソケットやブラウザが必要です。私はそのためのコードはなく、Qt C++のためだけです。 – Adrian

+0

@yara最初にする必要があるのは、APIにサインアップすることです.Googleからキーが届きます。このキーを使用して、リクエストをGoogleサーバーに送信します。基本的には、C++からHTTPリクエストを行います。その中で、データを次のように設定します:https://www.googleapis.com/language/translate/v2/detect?キー= INSERT-YOUR-KEY&q = words + to + translate – Adrian

0

誰かに助言をお願いしますlibcurl、私は試してみます。

0

何らかの種類のHTTPライブラリが必要です。私はエイドリアンが言ったことの2番目に多くの、しかしここにいくつかの(不完全な)あなたにアイデアを与えるべき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

は、私がどこかに、以下のこのコードを見たが、私はとにかく、どこ覚えてこれを試してみません:

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; 
} 
関連する問題