#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
"""flickr.pyの利用サンプル。 http://code.google.com/p/flickrpy/ | |
Flickrから指定したユーザの全ての写真を取得してローカルディスクに保存する。 | |
もしかすると無料アカウントでは最大200件に制限されているのかもしれない。 | |
自分の写真をダウンロードするために作ったので、他人の写真でも使えるかどうかは未確認。 | |
2010-08-24 サイズは固定だとダメっぽいので最大サイズをダウンロードするように変更。 | |
flickr.pyのisadminがどうこうというエラーが出たら、エラー行をコメントアウトすればOK。 | |
""" | |
import os | |
import time | |
import flickr | |
import urllib | |
####################################################### | |
# ここから設定変更 | |
####################################################### | |
#ユーザID | |
#これ変更必須。自分のアカウントページでURLをひょいと見ると書いてあった。@を含んだ12文字。 | |
#ここで http://idgettr.com/ ユーザ名を入れると教えてくれる | |
user_id = "XXXXXXXX@YYY" | |
#Flickr API Key + Secret | |
#これ必須。ここで作成後に、 http://www.flickr.com/services/apps/create/apply/ | |
#自分のアカウントのページで確認。 | |
flickr.API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" | |
flickr.API_SECRET = "XXXXXXXXXXXXXXXX" | |
#ファイル名に使う値。他にはidとか。 | |
photo_filename_attr = 'title' | |
####################################################### | |
# ここまで設定変更 | |
####################################################### | |
#ダウンロード写真を保持するディレクトリの作成 | |
MY_DIR = os.path.dirname(os.path.abspath(__file__)) | |
IMAGE_DIR = os.path.join(MY_DIR, 'flickr_images') | |
if os.path.exists(IMAGE_DIR): | |
os.rename(IMAGE_DIR, "%s.bak-%s" % (IMAGE_DIR, time.strftime('%Y%m%d%H%M%S'))) | |
os.makedirs(IMAGE_DIR) | |
def _max_size_name(photo_sizes): | |
"""一番大きいサイズ名を返す。Originalが使えればこんなことしなくていいのに。 | |
""" | |
size_name = None | |
square_size = 0 | |
for photo_size in photo_sizes: | |
if square_size < (photo_size['width'] * photo_size['height']): | |
size_name = photo_size['label'] | |
square_size = (photo_size['width'] * photo_size['height']) | |
return size_name | |
def get_size_name(photo_sizes): | |
"""ダウンロードするサイズ名を返す""" | |
return _max_size_name(photo_sizes) | |
if __name__=='__main__': | |
user = flickr.User(user_id) | |
photo_count = int(user.photos_count) | |
print("%s has %d photos." % (user.username, photo_count)) | |
retr_count = 0 | |
page = 1 | |
while retr_count < photo_count: | |
photos = flickr.people_getPublicPhotos(user_id, per_page = 500, page = page) | |
for photo in photos: | |
size = get_size_name(photo.getSizes()) | |
url = photo.getURL(size = size, urlType = 'source') | |
filename = os.path.join(IMAGE_DIR, '%s.jpg' % (getattr(photo, photo_filename_attr))) | |
file(filename, "wb+").write(urllib.urlopen(url).read()) | |
retr_count += 1 | |
print("%d/%d: %s retrieved." % (retr_count, photo_count, os.path.basename(filename))) | |
page += 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment