2008/03/06

ちょっと目から鱗な物みつけた。
Google Code FAQ - Using cURL to interact with Google data services
curlを使ってコマンドラインから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」あたり
コードめちゃめちゃ汚いですが...

Posted at 13:08 | WriteBacks () | Edit
Edit this entry...

wikieditish message: Ready to edit this entry.






















A quick preview will be rendered here when you click "Preview" button.