📜  谷歌翻译 - C++ (1)

📅  最后修改于: 2023-12-03 15:12:12.885000             🧑  作者: Mango

谷歌翻译 - C++

谷歌翻译是一个非常优秀的翻译工具,能够轻松地将各种语言翻译成目标语言,而且翻译质量很高。该工具不仅提供了网页版和手机应用,还提供了API供开发者使用。

使用方法

使用谷歌翻译API可以分为以下几个步骤:

  1. 注册并获取API密钥
  2. 构造HTTP请求
  3. 发送HTTP请求并获取响应
  4. 处理响应数据
注册并获取API密钥

在使用谷歌翻译API之前,需要先注册并获取API密钥。注册时需要提供Google账户并创建一个新的API项目,然后在该项目中启用翻译API,最后创建API密钥。

构造HTTP请求

谷歌翻译API使用HTTP协议进行通信,因此需要构造HTTP请求。请求URL的格式如下:

https://translation.googleapis.com/language/translate/v2?key=API_KEY&q=QUERY&source=SOURCE_LANG&target=TARGET_LANG

其中,API_KEY是在注册时获取的API密钥;QUERY是待翻译的文本;SOURCE_LANG是源语言代码;TARGET_LANG是目标语言代码。

如果需要翻译多个文本,可以使用HTTP POST方法,并将文本放在请求体中。

发送HTTP请求并获取响应

发送HTTP请求并获取响应可以使用任何HTTP客户端库。下面以C++为例,使用curl库发送HTTP GET请求:

#include <curl/curl.h>
#include <string>
#include <iostream>

struct curl_data {
  std::string str;
};

size_t curl_write_callback(char* ptr, size_t size, size_t nmemb, void* userdata) {
  curl_data* data = reinterpret_cast<curl_data*>(userdata);
  data->str.append(ptr, size * nmemb);
  return size * nmemb;
}

int main() {
  std::string query = "Hello, world!";
  std::string source_lang = "en";
  std::string target_lang = "zh-CN";
  std::string api_key = "YOUR_API_KEY";
  std::string url = "https://translation.googleapis.com/language/translate/v2?key=" + api_key + "&q=" + query + "&source=" + source_lang + "&target=" + target_lang;
  
  curl_global_init(CURL_GLOBAL_ALL);
  CURL* curl = curl_easy_init();
  curl_data data;
  curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
  curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write_callback);
  CURLcode res = curl_easy_perform(curl);
  if(res != CURLE_OK) {
    std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
  }
  else {
    std::cout << "Response: " << data.str << std::endl;
  }
  curl_easy_cleanup(curl);
  curl_global_cleanup();
  return 0;
}
处理响应数据

响应数据是一个JSON格式的字符串。可以使用任何JSON库进行解析。下面以C++为例,使用rapidjson库解析JSON字符串:

#include <curl/curl.h>
#include <rapidjson/document.h>
#include <rapidjson/error/en.h>
#include <string>
#include <iostream>

struct curl_data {
  std::string str;
};

size_t curl_write_callback(char* ptr, size_t size, size_t nmemb, void* userdata) {
  curl_data* data = reinterpret_cast<curl_data*>(userdata);
  data->str.append(ptr, size * nmemb);
  return size * nmemb;
}

int main() {
  std::string query = "Hello, world!";
  std::string source_lang = "en";
  std::string target_lang = "zh-CN";
  std::string api_key = "YOUR_API_KEY";
  std::string url = "https://translation.googleapis.com/language/translate/v2?key=" + api_key + "&q=" + query + "&source=" + source_lang + "&target=" + target_lang;
  
  curl_global_init(CURL_GLOBAL_ALL);
  CURL* curl = curl_easy_init();
  curl_data data;
  curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
  curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write_callback);
  CURLcode res = curl_easy_perform(curl);
  if(res != CURLE_OK) {
    std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
    return 1;
  }
  curl_easy_cleanup(curl);
  curl_global_cleanup();
  
  rapidjson::Document doc;
  doc.Parse(data.str.c_str());
  if(doc.HasParseError()) {
    std::cerr << "JSON parse error: " << rapidjson::GetParseError_En(doc.GetParseError()) << std::endl;
    return 1;
  }
  
  if(!doc.HasMember("data") || !doc["data"].HasMember("translations") || !doc["data"]["translations"].IsArray()) {
    std::cerr << "Invalid JSON format" << std::endl;
    return 1;
  }
  
  for(const auto& translation : doc["data"]["translations"].GetArray()) {
    std::cout << translation["translatedText"].GetString() << std::endl;
  }
  
  return 0;
}
总结

谷歌翻译API提供了非常方便的翻译功能,可以轻松地将各种语言翻译成目标语言。使用API需要先注册并获取API密钥,然后构造HTTP请求,发送请求并获取响应,最后解析响应数据。使用curl和rapidjson等库,可以轻松地实现API的调用和数据处理。