Google Contact Photosを更新するためのrubyアプリを作成しようとしていますが、アップロードを機能させることができません。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 DataAPIによると:
すべての連絡先には写真リンク要素があります。次の形式になります。
href ='https://www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012de' gd:etag='"KTlcZWs1bCp7ImBBPV43VUV4LXEZCXERZAc。"'>
その要素は、連絡先に写真が関連付けられているかどうかに関係なく表示されます。連絡先に写真がある場合、要素には写真のETagを指定するgd:etag属性が含まれます。連絡先に写真がない場合、gd:etag属性はなく、href属性は連絡先に写真を追加するために使用するURLを提供します。
上記の要素を指定して写真を追加または更新するには、PUTコマンドを使用して新しい写真をURLhttps: //www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012deに送信します。適切な「image/*」Content-Typeヘッダーを設定することを忘れないでください。
写真を削除するには、同じURLにHTTPDELETEリクエストを送信します。
写真を更新または削除するときは、HTTPリクエストのIf-Matchヘッダーで写真のETagを送信します。または、写真の最新バージョンを使用しているかどうかに関係なく、If-Match:*を使用して更新または削除します。
誰かが私がどこで間違っているのか見ることができますか?
更新と回答:StackOverflowと仲間の助けを借りて、これを機能させることができました。基本的に間違っていたのは、間違ったMIMEタイプが設定されていたことです(以下を参照)が、PUTリクエストに対してGoogleで適切に認証されていませんでした。私が書き込もうとしていたのは、不足しているGoogleコンタクトフォトをGravatarの画像で更新するスクリプトでした(可能な場合)。私がそれを機能させると、それはうまく機能しました:約2〜3ダースの連絡先に一致することができました。誰かがスクリプトを実行したい場合に備えて、スクリプトにブログ投稿を書きました:http: //ashleyangell.com/2011/06/ruby-script-to-import-google-contact-photos-from-gravatar/