5

我很高兴看到 google 代码:google-api-ruby-client项目,因为这对我来说意味着 Ruby 人可以使用Google API -s 润色代码。

现在虽然我很困惑,因为给出的唯一示例使用 Buzz,从我的实验来看,Google Translate (v2) api 的行为必须与google-api-ruby-client中的 Buzz 完全不同。

我对“Explorer”演示示例很感兴趣——但据我所知,它并不是一个探索者。它所做的只是调用一个 Buzz 服务,然后就它已经知道的关于 Buzz 服务的事情进行探讨。对我来说,探索者应该让你“发现”服务和暴露的方法/功能,而不必已经知道它们。

我很想听听 Ruby 命令行和桌面应用程序使用这个:google-api-ruby-client用于 Buzz 以外的服务特别是 Translate api(我对使用 translate 服务的现有 Ruby gem不太感兴趣这点)。

谢谢...

4

6 回答 6

9

调用翻译 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.'
  }
)
于 2011-03-01T01:01:34.363 回答
3

我在代码居所 - google-api-client for ruby​​ 发布了有关身份验证问题和解决方法(使用 api 密钥)的完整代码和详细信息

安装 gem,获取 Google API 密钥并设置自定义搜索帐户(其首选项扩展到所有网页)之后......我可以使用以下内容在 irb 中搜索 google 搜索结果(复制粘贴到 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 的东西。最重要的一点是构建客户端时的 :authorization 参数...。这确保调用时使用 api 密钥,而不是 oauth。没有它,您每次都会得到 401 Unauthorized 响应状态。

于 2012-07-14T03:48:25.507 回答
2

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

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

第一的:

/宝石文件

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

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

于 2021-01-07T18:24:27.773 回答
0

感谢鲍勃,我向前迈出了一步。

我现在发现 .CRT 证书文件有问题。我有一个从 cURL 站点 ( http://curl.haxx.se/ca ) 上可用的 CA 捆绑生成器获得的 CA 捆绑。

另请阅读:如何治愈 NetHhttps 有风险的默认 HTTPS 行为

我认为下一个问题应该是找到 OpenSSL 的捆绑包。

w。

于 2011-03-04T13:32:11.363 回答
0

嗨(所有)感兴趣的人

更多的进步。对于这个问题的一部分,我为Google-API-Ruby-client提交了一个错误报告。简短的版本是,对于翻译(至少)Google-API-Ruby-client在 SSL::VERIFY_PEER 下失败并在使用 SSL::VERIFY_NONE 时成功。

简而言之,有一个问题需要解决,两个增强功能需要。

  1. 当底层(已知或检测到的)使安全性、身份隐私和数据完整性无效时,API 客户端接口层应报告错误或警告。
  2. 报告所使用的底层服务的相关配置信息(例如,是否使用了 SSL?是 VERIFY_PEER 还是 VERIFY_NONE?给出错误的完全限定 URI 是什么?对我来说,我认为该信息可以用于各种日志文件和由服务类(类方法)上的选项和实例变量“请求”。
  3. 为您的 Gem 设计提供诊断,并将诊断扩展到您自己的代码中(例如指标,如:网络“执行”调用的数量、输入和输出字节数)。
于 2011-03-09T17:16:44.337 回答
0

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

于 2012-02-09T00:31:52.330 回答