フォト蔵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された場合には、実行されません。クラス定義にもこれを書いておくことで、簡単な使い方が分かったりしてけっこう便利。









