【发布时间】:2011-05-27 10:35:47
【问题描述】:
我正在尝试编写一个 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
Google 数据 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/*” 内容类型标头。
要删除照片,请发送 HTTP DELETE 请求相同的 URL。
更新或删除照片时, 在 If-Match 中发送照片的 ETag HTTP 请求的标头。 或者,使用 If-Match: * 到 无论是否更新或删除 你有最新版本的 照片。
谁能看出我哪里出错了?
更新和回答: 在 StackOverflow 和一位伙伴的帮助下,我设法完成了这项工作。基本上错误是设置了不正确的 MIME 类型(见下文),而且我没有通过 Google 正确验证 PUT 请求。我试图写的是一个脚本,它用来自 Gravatar 的图像更新任何丢失的谷歌联系人照片(如果可能的话)。一旦我开始工作,它就很好用:设法匹配大约 2 到 3 打联系人。我在脚本上写了一篇博文,以防有人也想运行它:http://ashleyangell.com/2011/06/ruby-script-to-import-google-contact-photos-from-gravatar/
【问题讨论】:
标签: ruby google-api gdata google-contacts-api