2

我正在尝试编写一个 ruby​​ 应用程序来更新 Google 联系人照片,但我无法让上传工作。我不确定我是否误解了 Google API,但这就是我目前所拥有的:

Net::HTTP.start(URI.parse(image_element.attributes['href']).host) do |http|
  response, body = http.put(URI.parse(image_element.attributes['href']).path, data, {'If-Match' => '*', 'content-type'=>'image/*'})
end

谷歌数据 API 说:

每个联系人都有一个照片链接元素。它具有以下形式:

href='https://www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012de' gd:etag='"KTlcZWs1bCp7ImBBPV43VUV4LXEZCXERZAc."'>

无论联系人是否有相关照片,都会出现该元素。如果联系人确实有照片,则该元素包含一个 gd:etag 属性,为照片指定一个 ETag。如果联系人没有照片,则没有 gd:etag 属性,并且 href 属性提供用于向联系人添加照片的 URL。

要添加或更新给定上述元素的照片,请将带有 PUT 命令的新照片发送到 URL: https ://www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012de 。请记住设置正确的“image/*”Content-Type 标头。

要删除照片,请向同一 URL 发送 HTTP DELETE 请求。

更新或删除照片时,在 HTTP 请求的 If-Match 标头中发送照片的 ETag。或者,无论您是否拥有最新版本的照片,都可以使用 If-Match: * 更新或删除。

谁能看到我哪里出错了?

更新和回答:在 StackOverflow 和一位伙伴的帮助下,我设法完成了这项工作。基本上错误是设置了不正确的 MIME 类型(见下文),而且我没有通过 Google 正确验证 PUT 请求。我试图写的是一个脚本,它用来自 Gravatar 的图像(在可能的情况下)更新任何丢失的谷歌联系人照片。一旦我开始工作,它就很好用:设法匹配大约 2 到 3 打联系人。我写了一篇关于脚本的博客文章,以防有人也想运行它:http: //ashleyangell.com/2011/06/ruby-script-to-import-google-contact-photos-from-gravatar/

4

1 回答 1

3

我自己从未使用过 Google Data API,但尝试将 Content-Type 标头设置为,例如,image/jpeg而不仅仅是image/*.

于 2011-06-07T21:54:34.117 回答