{Python}flickrAPIを利用する

PythonからのflickrAPIは、
{Python}自分のTLの画像を保存する
{Python}ウェブサイトやブログの画像を保存する
{Python}instagramの画像を保存する
等で、自動収集した画像&メタデータをアップロードするために初期からずっと使っています。
まだ書いてなかったので、こちらの接続も書いておこうと思います。
 
 

環境等

  • win 10(32bit)
  • python2.7
  • python lib:flickrapi
  • MySQL Community Server 8.0.11
  •  
     

    APIキー、APIシークレットの取得

    Flickr APP GardenのCreate an APPページからGet your API Keyの下Request an API Keyをクリックします。
    商用か非商用か問われるのでNon-Commercial(非商用)を選択します。

    APIキーを使用するアプリケーションの名前と説明の入力画面になるので、記入し、SUBMITします。


    APIキー、APIシークレットが発行されました。
     
     

    flckrapiでAPIに接続する

    flickrのAPIを使用するには、flickrapiというライブラリを使います。
    $pip install frickrapi であらかじめインストールしておきます。

    今回は私のflickrアカウントから、2018年5月12日に撮影された(taken_dateが2018-05-12)写真の情報を取得するプログラムを書きました。

     

    作成したものがこちらです。

    出力結果を貼る前に今回はコードの補足説明を書いておきます。
     

    #インスタンスの作成

    formatはJSONで取得しています。他XMLなどでも取得することができます。
     

    #APIリクエストを送ってレスポンスを得る
  • メソッド名の指定
  • photos.searchはficckrAPIのメソッド名です。APIを通してどんな操作をしたいかで変わります。
    Flickr API Documentationでメソッド一覧を確認できます。

    例えば検索なら、flickr.photos.searchを使うので、Documentationに載っているメソッド名の通りflickr以下の「photos.search」を指定しています。
    flickr上に保存されている、該当写真の全ての画像データ(サムネイルやオリジナルサイズ画像など、同じ画像でもflickrには使用シーンに合わせて複数の画像データが保存されています)のURLを取得したい場合は、flickr.photos.getSizesなど、操作の種類にあったメソッドを探す必要があります。

  • user_idの確認方法
  • ちょっとわかりにくいですが、APIで使用するuser_idとは、flickrにログインした状態で上部メニューのYOUをクリックして、アドレスに現れる「000000000@X00」のような形式の文字列のことです。

  • パラメータに指定する日付の取り扱い
  • min_taken_dateは、指定した日付を含みます。
    max_taken_dateは、指定した日付を含ません。
    そのため5月12日の情報を取得したいときは、
    min_taken_date = ‘2018-05-12’,
    max_taken_date = ‘2018-05-13’,
    のようにパラメータを指定する必要があります。

  • その他のパラメータについて
  • 指定したメソッドで使えるパラメータやその説明は、メソッド詳細ページで確認します。
    例えば、flickr.photos.searchならこちらです。
    例えば上のコード中のextrasは取得したいデータを指定するパラメータです。このパラメータに指定できるものはどんなものがあるかもここで確認できます。

  • 補足:API Explorerでレスポンス確認
  • APIリクエストは、自分のプログラムで確認する前にAPI EXplorerという機能でどんなレスポンスが帰ってくるかを確認することもできます。
    各メソッド詳細ページの最下部、「API Explorer : (メソッド名)」というリンクから飛べます。

      
    では、コードの意味が分かったところで、さきほどのプログラムを実行した結果(APIのレスポンス)を見てみます。
    出力結果(一部省略あり):

    {u'photos': {u'page': 1,
                 u'pages': 1,
                 u'perpage': 50,
                 u'photo': [{u'description': {u'_content': u'\ud754\ud55c \ub300\uae30\uc2e4    src: www.instagram.com/bumkeyk'},
                             u'farm': 1,
                             u'height_o': u'480',
                             u'id': u'41310367665',
                             u'isfamily': 0,
                             u'isfriend': 0,
                             u'ispublic': 1,
                             u'media': u'photo',
                             u'media_status': u'ready',
                             u'owner': u'159634774@N05',
                             u'tags': u'instagram keystagram jpg',
                             u'title': u'2018-05-12_bumkeystagram_pugJFIVKl9_1',
                             u'url_o': u'https://farm1.staticflickr.com/828/41310367665_23846b53e7_o.jpg',
                             u'width_o': u'640'}],
                 u'total': u'1'},
     u'stat': u'ok'}

    無事にJSON形式で取得できています。
     
    url_oがオリジナルサイズ(縮小なし)の画像のアドレスになります。
    url_oに格納された「https://farm1.staticflickr.com/828/41310367665_23846b53e7_o.jpg」を確認してみると……

    きちんとリクエストした画像がでてきました!正しいデータを取得できているようです。おわり。
     
     

    Leave a Reply

    Your email address will not be published. Required fields are marked *