Created
November 18, 2009 01:00
-
-
Save eight/237451 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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