Google-api-ruby-client翻译API示例

时间:2011-02-22 04:56:11

标签: ruby google-api translate google-api-client

我很高兴看到谷歌代码: google-api-ruby-client 项目,因为对我而言,Ruby人员可以使用 Google API 来修饰代码 - 第

目前虽然我很难过,因为唯一的例子是使用Buzz,但是从我的实验中,谷歌翻译(v2)api的行为必须与 {{3}中的Buzz完全不同}}

我对'资源管理器'演示示例很感兴趣 - 但就我所见,它并不是一个探险家。它所做的只是调用一个Buzz服务,然后在它已经知道的关于Buzz服务的事情上发表意见。对我来说,探险家应该让你“发现”所提供的服务和方法/功能,而必然已经知道它们。

我很想听到Ruby命令行和桌面应用程序使用此功能: google-api-ruby-client 用于服务 其他 而不是Buzz特别是翻译api(我现在 对使用翻译服务的现有Ruby宝石感兴趣)。

谢谢......

6 个答案:

答案 0 :(得分:9)

调用translate API的代码如下所示:

require 'google/api_client'
client = Google::APIClient.new(:key => YOUR_DEVELOPER_KEY)
translate = client.discovered_api('translate', 'v2')
result = client.execute(
  :api_method => translate.translations.list,
  :parameters => {
    'format' => 'text',
    'source' => 'en',
    'target' => 'es',
    'q' => 'The quick brown fox jumped over the lazy dog.'
  }
)

答案 1 :(得分:3)

我发布了auth问题和解决方法(使用api密钥)的完整代码和详细信息 the code abode - google-api-client for ruby

安装宝石后,获取Google API密钥,并设置自定义搜索帐户(其首选项扩展到所有网页)....我可以使用以下内容在irb中搜索谷歌搜索结果(复制粘贴到irb,然后在完成后检查响应):

  require 'openssl'
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

  require 'google/api_client'
  client = Google::APIClient.new(:key => 'your-api-key', :authorization => nil)
  search = client.discovered_api('customsearch')

  response = client.execute(
    :api_method => search.cse.list,
    :parameters => {
      'q' => 'the hoff',
      'key' => 'your-api-key',
      'cx' => 'your-custom-search-id'
    }
  )

这是为了让服务器访问google api并绕过所有oauth的东西。最重要的是在构建客户端时的授权参数....这确保了在调用时使用api密钥,而不是oauth。没有它,您每次都会获得401 Unauthorized响应状态。

答案 2 :(得分:2)

我最近在一个 Rails 5 项目中解决了这个问题,这是我如何让它工作的。我知道这是使用更新的 Google Gem - 但希望人们会找到这个更新的答案并发现它有用。

首先,您需要在 Google 控制台中启用翻译 API - 我还创建了一个服务帐户 here。我在这里通过向导获得了我的 json 凭据文件(见下文)。

首先:

/Gemfile

gem 'google-cloud-translate'

我将 ENV 设置添加到初始化文件中。我还添加了一个项目字符串......花了我一段时间才弄清楚。确保将第二行的 'google-project-name' 设置为您的 google 控制台项目名称!

/config/initializers/my_project_name_init.rb

ENV['GOOGLE_APPLICATION_CREDENTIALS'] = Rails.root.to_s + '/cert/my_project-translation-credentials.json'
GOOGLE_TRANSLATE_PROJECT_STRING = "projects/google-project-name/locations/us-central1"

之后就很简单了。我在模型中添加了一个简单的方法:

require "google/cloud/translate"
client   = Google::Cloud::Translate.new
response = client.translate_text(["Let's go surfing"], 'fr', GOOGLE_TRANSLATE_PROJECT_STRING)
translation = response.translations&.first&.translated_text

我知道这是一个初级的答案 - 但我希望这可以为某人节省很多时间。我花了很长时间才弄到这个,谷歌的文档已经过时,冗余而且很糟糕......

答案 3 :(得分:0)

感谢Bob,我向前迈了一步。

我现在发现.CRT证书文件有问题。我有一个CA-bundle,来自cURL网站(http://curl.haxx.se/ca)上提供的CA-bundle生成器。

另请阅读: How to Cure NetHhttps Risky Default HTTPS Behavior

我认为下一个问题需要是为OpenSSL找到捆绑包。

瓦特

答案 4 :(得分:0)

嗨(全部)感兴趣的人

更多进步。我为bug report添加Google-API-Ruby-client部分问题。简短版本是Translate(至少)Google-API-Ruby-client在SSL :: VERIFY_PEER下失败,并且在使用SSL :: VERIFY_NONE时成功。

在坚果壳中,需要修复一个问题,需要两个增强功能。

  1. 当基础层(可以知道或检测到)使安全性,身份隐私和数据完整性无效时,API客户端接口层应报告错误或警告
  2. 报告所使用的基础服务的相关配置信息(例如,是否使用了SSL?是VERIFY_PEER还是VERIFY_NONE?提供错误的完全限定URI是什么?对我来说,我认为信息可以对日志文件执行对服务类(类方法)和实例变量的选项进行排序和“请求”。
  3. 使用您的Gem设计提供诊断并将诊断扩展到您自己的代码中(例如:网络'执行'调用次数,字节数和字节数)等指标。

答案 5 :(得分:0)

我有一个解决方案(http://jjinux.blogspot.com/2012/02/ruby-working-around-ssl-errors-on-os-x.html)猴子补丁Net :: HTTP#use_ssl =为了使用操作系统的根证书。