在Ruby中更新Google Contact Picture时出现问题

时间:2011-05-27 10:35:47

标签: ruby google-api gdata google-contacts

我正在尝试编写一个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 Data 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。   记得设置一个合适的“图像/ *”   Content-Type标题。

     

要删除照片,请发送HTTP DELETE   请求使用相同的网址。

     

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

谁能看到我哪里出错了?

更新和答案: 我已经设法通过StackOverflow和配合的一些帮助来实现这一点。基本上错误的是设置了错误的MIME类型(见下文),但我没有正确地使用Google对PUT请求进行身份验证。我试图写的是一个脚本,用Gravatar中的图像更新任何遗漏的Google联系人照片(如果可能)。一旦我开始工作,它运作得很好:设法匹配大约2-3个联系人。我写了一篇关于脚本的博客文章,以防任何人想要运行它:http://ashleyangell.com/2011/06/ruby-script-to-import-google-contact-photos-from-gravatar/

1 个答案:

答案 0 :(得分:3)

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