我正在尝试编写一个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/
答案 0 :(得分:3)
我自己从未使用Google Data API,但尝试将Content-Type标头设置为image/jpeg
,而不仅仅是image/*
。