Google Code FAQ - Using cURL to interact with Google data servicescurlを使ってコマンドラインからGDataにアクセスする方法。
濃いなぁ...苦笑。手順を追って説明してくれています。色々書かれていますが以下ではPicasaWebAlbumに画像をアップロードするまでの簡単な手順を示して行きます。
まず
https://www.google.com/accounts/ClientLogin
にEmail、Passwd、accountType、source、serviceをパラメータ指定してGDataへのAuthトークンを取得しに行きます。ここで返って来るのは3行程のデータで
SID=XXXXXX
LSID=YYYYYY
Auth=ZZZZZZ
といった物が返ってきます。認証に必要なのは最後の「Auth」です。以降のコマンドライン操作ではこの
Authorization: GoogleLogin auth=ZZZZZZ
というヘッダを加えてやれば、GDataのやり取りが出来る様になります。まず、Authを取得する為に以下の様なコマンドを発行します。
curl -s https://www.google.com/accounts/ClientLogin \
-d Email=xxxxx@your-google-account.com \
-d Passwd=YoUr-GoOgLe-PaSsWoRd \
-d accountType=GOOGLE \
-d source=Google-Picssa-Upload \
-d service=lh2 | grep ^Auth= | sed 's/^Auth=//'
これで上記「Auth=ZZZZZZ」でいうZZZZZZの部分が取得出来ます。lh2は「Google Code FAQ - What is the service name in ClientLogin for each Data API?」にも書いてある通りPicasaWebAlbumのサービスコードになります。そしてPicasaへ画像をアップするには以下の様なコマンドを発行します。
curl -s http://picasaweb.google.com/data/feed/api/user/default \
-X POST \
--data-binary "@my_picture.jpg" \
-H "Content-Type: image/jpg" \
-H "Slug: my_picture.jpg" \
-H "Authorization: GoogleLogin auth=ZZZZZZ"
Slugヘッダはファイル名を指します。後はこれを汎用的にシェルスクリプトへ...
#!/bin/sh
# include 'GDATA_USER' and 'GDATA_PASS'.
. ~/.gdata
GDATA_AUTH=`
curl -s https://www.google.com/accounts/ClientLogin \
-d Email=$GDATA_USER \
-d Passwd=$GDATA_PASS \
-d accountType=GOOGLE \
-d source=Google-Picssa-Upload \
-d service=lh2 | grep ^Auth= | sed 's/^Auth=//'
`
FILE=`basename $1`
curl -s http://picasaweb.google.com/data/feed/api/user/default \
-X POST \
--data-binary "@$1" \
-H "Content-Type: image/jpg" \
-H "Slug: $FILE" \
-H "Authorization: GoogleLogin auth=$GDATA_AUTH" > /dev/null
こんな感じでしょうか...実行には「$HOME/.gdata」に
GDATA_USER=xxxxx@your-google-account.com
GDATA_PASS=YoUr-GoOgLe-PaSsWoRd
を書いておく必要があります。パスワードが書かれていますからパーミッションに注意
これで引数に指定されたJPGファイルをPicasaWebAlbumのドロップボックスにアップロードされる様になっています。
もう少し凝れば、タグを付けたりアルバムを作ったりと出来そうです。またPicasaWebAlbumに限らずGDataを扱う物であれば、ちょっとした事にcurlを使えそうです。
色々やって見たいですが、今日はこの辺でおひらき。
なおC言語上の実装例ですが、CodeReposに上げてあるBlogWriterのコードAtomPP.cppで、Bloggerへのログインとポストしている部分も参考になるかもしれません。
「getBloggerAuth」あたり
コードめちゃめちゃ汚いですが...