Skip to content

Instantly share code, notes, and snippets.

@eight
Created November 18, 2009 01:00
Show Gist options
  • Save eight/237451 to your computer and use it in GitHub Desktop.
Save eight/237451 to your computer and use it in GitHub Desktop.
#!/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