フォト蔵APIライブラリ for Python

だいぶ前に書いたんだけど、すっかり公開するのを忘れていました。

実行には、 MultipartPostHandler.py が必要ですので、同じディレクトリに置いてください。他に ElementTree も必要ですが、Python 2.5から標準機能に組み込まれるので、最初からインストールされていることが多いのではないかと思います。FedoraだとPRMパッケージが用意されています。

#!/usr/bin/env python
import base64
import urllib2
import MultipartPostHandler
from elementtree import ElementTree

class Photozou:
    API_HOST = "http://api.photozou.jp"
    API_URL = API_HOST + "/rest/"

    def __init__(self, userid, password):
        self.userid = userid
        self.password = password
        auth_handler = urllib2.HTTPBasicAuthHandler()
        auth_handler.add_password("photo", self.API_HOST,
                                  self.userid, self.password)
        self.opener = urllib2.build_opener(auth_handler,
                        MultipartPostHandler.MultipartPostHandler)
        urllib2.install_opener(self.opener)

    def check(self):
        return self.nop()

    def nop(self):
        url = self.API_URL + "nop"
        return self._sendRequest(url)

    def photo_add(self, photo_file, album_id, photo_title="",
                  tag="", comment="", **args):
        url = self.API_URL + "photo_add"
        photo_title2 = photo_title[:]
        tag2 = tag[:]
        comment2 = comment[:]
        params = {"photo"      : open(photo_file, "rb"),
                  "album_id"   : album_id,
                  "photo_title": photo_title2,
                  "date_type"  : 'exif',
                  "tag"        : tag2,
                  "comment"    : comment2}
        return self._sendRequest(url, params)

    def photo_add_album(self, name, description=""):
        url = self.API_URL + "photo_add_album"
        params = {"name": name, "description": description}
        return = self._sendRequest(url, params)

    def photo_album(self):
        url = self.API_URL + "photo_album"
        retxml = self._sendRequest(url)
        albums = [album for album in retxml.findall('info/album')]
        return albums

    def user_group(self):
        url = self.API_URL + "user_group"
        retxml = self._sendRequest(url)
        groups = [group for group in retxml.findall('info/user_group')]
        return groups

    def _sendRequest(self, url, params=None):
        try:
            ret = self.opener.open(url, params)
            xml = ElementTree.parse(ret)
            return xml
        except urllib2.HTTPError:
            return False
        except IndexError:
            print "Error! -> ", xml.find('err').attrib['msg']


if __name__ == '__main__':
    pz = Photozou('mail', 'password')
    if pz.check():
        print "Auth OK!"
    else:
        print "Auth Failed."

最後の if __name__ == '__main__': っていうのは、このファイルが直接実行された際に実行される処理です。他のプログラムからimportされた場合には、実行されません。クラス定義にもこれを書いておくことで、簡単な使い方が分かったりしてけっこう便利。



Leave a comment


:

:

:

:

このエントリーのはてなブックマーク (-)