写真をflickrに自動アップロードして、月ごとにアルバムを自動作成する方法(実装編)

前回は、flickrに写真を自動アップロードするプログラムの概要を紹介しました。

今回はその実装編です。

Pythonでflickr APIを使うまでの流れ

flickr API公式ページにAPI Kitsとして紹介されているflickrapiを使うと、flickr APIを使ったプログラムがPythonで簡単に書けてしまいます。

ただし、API keyやSecret keyの取得など、初回のみブラウザとPythonコンソールとを行ったり来たりする必要があってややこしいので、全体の流れをアクティビティ図にしました。

この図に沿って説明していきます。

ブラウザ操作: API keyとSecret keyの取得

flickrアカウントを持っているだけでは、APIを使うことができません。

API keyとSecret keyを発行しましょう。

flickrのCreate an Appページで必要事項を記入し、submitすることで、keyを発行することができます。

NON-COMMERCIAL(非営利目的)であれば、難しい質問は特にないので迷うことはありません。

発行したkeyは どうせ覚えられないので 忘れないようにメモを取っておきましょう。

Python操作: Read/Writeアクセストークンを取得する

先ほど発行したAPI keyとSecret keyを使って、ReadまたはWriteアクセストークンを取得します。

ReadとWrite、どちらの権限が必要かは、使用したいAPIによって異なります。

例えばflickr.contacts.getList APIは This method requires authentication with ‘read’ permission. という記載があり、Read権限が必要であることがわかります。

そしてupload APIは This method requires authentication with ‘write’ permission. の通り、Write権限が必要であることがわかります。

以下のように、api.auth_url()に与えるキーワード引数permsを必要に応じて指定してください。

Python操作: flickrに写真をアップロードする

flickrに写真をアップロードしてみます。

たったこれだけのコードで、path_to_photoが示す写真をflickrにアップロードできてしまいます。

各キーワード引数の意味はflickrapi公式ドキュメントに記載されている通りなんですが、一応説明しておくと、

キーワード引数 意味
filename アップロードしたい写真ファイルのパス。
title アップロード後にflickr上に表示されるタイトル。ファイル名を指定しています。
is_private 一般公開する写真はアップロード後に手動で選択することにしたため、Trueとします。

他にもtagを指定できたりと色々あるんですが、ここでは必要最小限の設定でアップロードすることにしています。

Python操作: アップロードした写真をphotosetに追加する

見苦しいコードですが… というか、ほとんどコメント。

すでにphotosetタイトルが存在すれば、今回アップロードした写真をそこへ追加し、存在しなければ新規作成するようにしています。

flickr.photosets.create() や flickr.photosets.addPhoto() に与えるキーワード引数の意味は、flick API公式ドキュメントを参照してください。

例えばflickr.photosets.createであれば、以下の通りです。

キーワード引数 必須? 意味
api_key 必須だけど不要 最初に取得した API key を指定します。
必須と言いながら、Pythonのflickrapiを使っている場合は不要です。
title 必須 photoset タイトルを文字列で指定します。
description 必須ではない photoset の概要を文字列で指定します。
primary_photo_id 必須 photoset の代表となる写真のIDを指定します。

flickr.photosets.create() を呼ぶ祭、API keyが必要そうに見えるんですが、実は不要です。

Pythonのflickrapi公式ドキュメントにも記載されている通り、FlickrAPIオブジェクトが既に内部に抱えているので、個別のAPIコール時に指定する必要ありません。

これで無事、写真をflickrにアップロードしつつ、その写真の撮影日に応じてphotosetを自動生成した上で、そのphotosetに写真を追加することができました。

まとめ

写真のアップロードまでは本当に簡単。

photosetを作ってそこに写真を追加しようとすると、ちょっと面倒なことをするハメになって、意外と時間がかかってしまいました…。

同じタイトルのphotosetを複数作ることが可能なため、flickr.photosets.createする前に同じタイトルのphotosetがないかチェックする必要があります。
既存のphotosetがあるなら勝手にそこへaddPhotoしてくれると思っていたら、そうではないんですね。

それと、後で気づきましたが、flickrapiの戻り値を、扱いやすいjsonや、parse済みのPythonオブジェクトで返してくれる設定があるんですね。
そのうち直そう…。

今回紹介したコードはこちらにpush済みなので、ぜひ使ってみてください。
argparseを使っているので、その解説ページなんかも併せてどうぞ。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする