2008/12/08

Picasaのウェブアルバムに写真を自動的に載せるpythonスクリプトを組んでみた。

これはホント前々から作っておきたかったスクリプトの一つです。

Picasaのウェブアルバムは無料ながらにして容量が1GBととても大容量なので、クローズドに写真をアップロードする場所としてとても重宝してきました。だけどどうしても納得できないことが一つだけあって、それが写真のアップロード方法。


なんで一度に5枚しかアップロードできんのじゃい

普通アルバムに画像をアップロードしたいと思ったら2〜30枚くらいは軽くこえるだろうーどうして5枚だけ、しかもいちいち選択し直さなきゃならないのかとっても謎。

いや、「そんなことしないでPicasa使えば楽にアップロードできるのに」って思う人がいるかもしれません。そりゃそうなんですけど、個人的にあのアプリケーションは好きになれないのです。べつにキャッシュしなくてもいい画像ファイルもキャッシュしてしまうし。そんくらい自分でちゃんと整理します。

というわけで不自由なら自分でなんとかするの精神で、Picasaのウェブアルバムに指定したフォルダーの写真をすべて自動的にアップロードするpythonスクリプトを作りましたので公開します。
まず、使用するには以下の環境が必要です。

ソースみれば大体何やってるかわかると思いますが、画像が大量に入っているフォルダを用意しておいて、
$ python picasa.py new_album ./photos/
とか指定してやれば"new_album"っていうアルバムを新しく作って、./photos/ フォルダの画像すべてを自動的にアップロードしてくれます。すごく楽ちん。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys, os
import gdata.photos.service

USER_EMAIL = "ログインに用いるeメールアドレス"
USER_PASSWORD = "パスワード"

def main():
# ログイン開始
gd_client = gdata.photos.service.PhotosService()
gd_client.email = USER_EMAIL
gd_client.password = USER_PASSWORD
gd_client.source = "Picasa-AutoUploadApp"
print u"Picasaへのログインを開始します。"
gd_client.ProgrammaticLogin()

# アルバムを新しく追加
target_album = gd_client.InsertAlbum(title=sys.argv[1], summary='')
print u"新しいアルバム \"%s\" を追加しました。" % sys.argv[1]

# 指定されたディレクトリから写真の読み込み
filepath = []
for root, dirs, files in os.walk(sys.argv[2]):
for f in files:
if ( f.endswith(".JPG") or f.endswith(".jpg") ):
filepath.append( (os.path.join(root, f), f) )

# 写真の追加
print u"写真の読み込み完了。アップロードを開始します。"

album_url = "/data/feed/api/user/default/albumid/%s" % target_album.gphoto_id.text
for ( i , (photo_path, photo_name) ) in enumerate(filepath):
print u"(%i/%i) \"%s\"をアップロードしています..." % (i+1, len(filepath), photo_name),
gd_client.InsertPhotoSimple(album_url, photo_name, '', photo_path, content_type="image/jpeg")
print u"\t完了"

print u"すべての写真のアップロードが正常に行われました。"

if __name__ == '__main__':
sys.exit(main())

これでやっとひたすらボタンとにらめっこする重荷から開放される…

追記

これを書いている途中で気になったんですが、pythonってprint文で自動的に改行させないようにしたい場合、
print "hogehoge",
ってコンマを最後に付けるんですね。これなんとかなんないでしょうか?python 3.0ではさすがに修正されているとは思いますが、すんごくsyntax errorっぽい…

0 件のコメント: