GoogleからコマンドラインでGoogleAPIを叩くツール、googleclがリリースされたと聞いたので、さっそく試してみました。
Blogger APIを使うために、PythonでGData APIを叩いた事はあったけれど、今回のツールを使うとそんな必要はなくなるのかもしれません。
Ubuntu 10.04 LTSでのセットアップ
code.google.comの GoogleCL::SystemRequirementsページを確認すると、手順がそのまま載っています。
sudo apt-get install python-gdata
[download .deb package]
sudo dpkg -i googlecl*.deb
今後もバージョンが上っていく事から、こういった書き方になっているんだと思いますが、 実際には"Downloads"ページにあるdebパッケージをダウンロードしてから、そのdebファイルを指定してdpkg -iコマンドを実行することになります。
実際に打ったコマンドはこんな感じ。
$ sudo apt-get install python-gdata $ wget http://googlecl.googlecode.com/files/googlecl_0.9.7-1_all.deb $ sudo dpkg -i googlecl_0.9.7-1_all.deb
gdataのバージョンについて
Ubuntu 10.04 (Lucid) LTSに付属のpython-gdataのバージョンは1.2.xですが、Googleドキュメントの文書をvimなどで編集するコマンドは実行できないとあります。
フル機能にアクセスするためには10.10用のpython-gdataのdebパッケージがダウンロードできる旨の記述はありますが、今回はUbuntu 10.04用のpython-gdata 1.2を使用します。
さっそく試してみる
最初にサービスにアクセスする時にブラウザが起動し、OAuthページでサービス単位で許可を与える仕組みになっています。
$ google picasa list title
Please specify user: xxxx@gmail.com Please log in and/or grant access via your browser at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=2f26495b2f0cb5937b53fb982c6ec25a then hit enter. XXX.jpeg YYY.jpeg ...
基本的にはコマンドの打ち方は manualにある通りで、出力は1行1データが基本のようです。
気になったところ
Picasa
どうもメッセージとコマンドの対応関係がおかしいところがあるようです。
$ google help picasa list
...
list: List photos
Requires: delimiter Optional: title, query
...
実際には delimiter オプションは必須ではないし、サンプルの実行例では次のようになっていて、このヘルプは意味がとりずらいと感じました。
...
list: List photos or albums. list title,url-direct --query "A tag"
...
この場合は$ google picasa list title,url,author --title "アルバム名の一部" --delimiter ":"のように実行する事ができて、特定のアルバムに含まれる写真情報の一覧が手に入ります。
しかしlist title,...
のようにlistコマンドの後ろに書かれている"title"に対応する情報はファイル名で、このオプションに指定する アルバム名
ではありません。
また--query
オプションは"--title"オプションと同じ動きをして、アルバム名の一部を指定して特定のアルバムに含まれる写真ファイルの一覧を表示する事ができました。
一度に扱える記事、ファイル数の制限
自分で記事の一覧を取得する時には、取得する記事の最大数を適切に設定するか、再帰的に記事を取得する必要がありました。
そこで試したところ、 /usr/share/pyshared/googlecl/service.py で最大数は1000に設定されていて、扱うファイルや記事が1000を越えた場合にはコードを少し変更する必要があるでしょう。
一度に取得できる記事やらファイルやらの制限って、その時にならないと分からない微妙に面倒な問題なんですよね…。
記事のタイトルをキーにした操作
bloggerで同じタイトルの投稿があった場合にタグの変更がその全てに反映されてしまいます。
$ google blogger list title,tags
test01,N/A
test01,test
$ google blogger tag --title "test01" --tags "test,test2" $ google blogger list title,tags
test01,test2;test
test01,test2;test
ここでbloggerではlistコマンドの引数に tags が指定できますが、これはManualには書かれていません。 実際にコードを眺めるとbloggerやpicasaでは使えないようですが、 summary , email などが指定できるようです。
まとめ
手軽に使えますし、おそらく大抵の作業はこのgoogleclだけで十分になると思います。
ただbloggerではタイトルだけでしか管理ができないので、タイトルがユニークだという前提が必要です。
そういった点では、いろいろ本格的な事をするにはGData APIがまだまだ必要そうです。