【问题标题】:How to use Google Translate API With c++如何在 C++ 中使用谷歌翻译 API
【发布时间】:2011-12-18 06:09:41
【问题描述】:

我是 C++ 初学者并使用 Google 任务 API。

如何编写一个接受单词的 C++ 程序,然后调用 Google 翻译将其从英语翻译成法语,然后将结果页面保存到本地文件?

例如,如果用户输入“河流”,程序应该调用谷歌翻译来翻译成法语,结果页面是: http://translate.google.com/#en|fr|River%0A 应保存此页面。

我完整阅读了官方文档:http://code.google.com/apis/language/translate/v2/getting_started.html 但我不明白如何使用 REST,而且我不熟悉 JSON 或 AJAX。

【问题讨论】:

    标签: c++ visual-c++ c++11 google-translate


    【解决方案1】:

    您不能直接在 C++ 中使用 JSON 对象。

    JSON = JavaScript 对象表示法

    您需要生成/创建可以解析此类对象的东西。例如,我在 Qt(C++ 中)中使用了 QNetworkManager 来发送构建 JavaScript 并向谷歌 API 发送请求。结果将是一个 JSON 对象,我必须对其进行解析并在浏览器中显示(我用 c++ 制作)或将结果解析为 c++ 类并以不同方式处理它(用它进行一些计算)。

    如果您只需要数据,您可以请求 XML 而不是 JSON,然后您可以使用标准 XML 解析器来提取翻译后的单词。

    编辑 1:

    Google 在他们的示例中使用:
    https://www.googleapis.com/language/translate/v2?key=YOUR-API-KEY&source=en&target=de&q=words+to+translate

    这从英语 (en) 翻译成德语 (de)。要翻译的词是:“要翻译的词”。

    现在用这个 URL 作为数据在 C++ 中构建一个 HTTP 请求。使用一些网络管理器或套接字发送它并等待回复。 Google 会将数据返回给您。

    【讨论】:

    • 嗨,Adrian:您能否通过演示 C++ 调用 Google API 的代码来解释更多。
    • 我在 c++ 中使用了 Qt,所以不是纯 c++。 C++ 必须有一些套接字或浏览器,您可以使用它们将 HTTP GET 请求发送到 google API。我没有代码,只有 Qt C++。
    • @yara 你需要做的首先是注册API,谷歌会给你一个密钥。您使用密钥将您的请求发送到 Google 服务器。基本上从 c++ 你会发出一个 HTTP 请求。在其中,您将数据设置为:googleapis.com/language/translate/v2/…
    • 我理解google的关键步骤但我无法想象c++程序中的调用语句
    • @yara 你不能使用从 c++ 调用 google API,除非 google 为此提供了 c++ 包。我相信他们确实提供了 C# 和 java,所以在 C++ 中你发送 HTTP 请求:)
    【解决方案2】:

    我在下面某处看到了这段代码,但我不记得在哪里,反正试试这个:

    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;
    }
    

    【讨论】:

      【解决方案3】:

      有人建议我使用libcurl,我会试试看。

      【讨论】:

        【解决方案4】:

        您需要某种 HTTP 库。 Adrian 所说的大部分内容我都排在第二位,但这里有一些(不完整的)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;
            });
        }
        

        【讨论】:

          猜你喜欢
          • 2010-11-11
          • 2011-06-06
          • 2019-02-10
          • 2011-12-26
          • 1970-01-01
          • 1970-01-01
          • 2010-10-10
          相关资源
          最近更新 更多