Android写真をDropboxにバックアップしたら、「これを自動でFlickrにアップロードできれば楽なんじゃない?」と思いついた。ほとんどGoogle先生に聞いたらできたよ。ちなみに自分の環境は、Mac、Python2.5。
flickrapiをインストール
FlickrのAPIを利用する必要があるので、APIがモジュール化されたflickrapiをインストールする。easy_installを使えば、すぐに完了。
easy_install flickrapi
Pythonスクリプトを作成
ここを参考にすれば、すぐにできる。
Flickr 一括アップローダ – SPEAKER BREAKA |
Flickr APIのキーを取得しようね。そして、ちょっとだけ自分用にカスタマイズしました。
#!/usr/bin/python # -*- coding:utf-8 -*- from __future__ import with_statement import sys import os import threading import time import re import flickrapi import shutil API_KEY = "取得したAPIキー"; API_SECRET = '取得したAPIシークレット' PAT_EXT = re.compile(r'\.(jpg|jpeg|avi)', re.I) pict_dir = '.' class UploadWorker(threading.Thread): """ """ def __init__(self, flickr, files, lock, name=None, args=(), kwargs={}): """コンストラクタ""" super(UploadWorker, self).__init__() self.flickr = flickr self.files = files self.lock = lock def _pop_file(self): """ """ with self.lock: try: f = self.files.pop() except IndexError: f = None return f def run(self): """ """ while True: f = self._pop_file() if f is None: break print "[%s] Upload start: %s" % (self.getName(), f) try: # プライベート設定はここで。プライベートにするなら全部ゼロ self.flickr.upload(os.path.join(pict_dir, f), is_public=0, is_family=0, is_friend=0) except: print "[%s] Failed... Skip" % self.getName() else: print "[%s] OK: %s" % (pict_dir + "/" + f, f) # 画像をDropboxフォルダから移動 shutil.move(pict_dir + "/" + f, "移動先ディレクトリ") def init_flickr(): """Initialize and authenticate FlickrAPI""" flickr = flickrapi.FlickrAPI(API_KEY, API_SECRET) (token, frob) = flickr.get_token_part_one(perms='write') if not token: raw_input("Press ENTER after you authorized this program") flickr.get_token_part_two((token, frob)) return flickr def main(): """ """ # 画像ディレクトリ設定 global pict_dir pict_dir = "画像を格納するDropboxディレクトリ" # 画像ファイル名取得 files = [f for f in os.listdir(pict_dir) if not f.startswith('.') and PAT_EXT.search(f)] if len(files) == 0: print "No files in the directory." sys.exit() print "File num: %s" % len(files) # Flickr API 初期化 & 認証 flickr = init_flickr() # アップロード lock = threading.Lock() workers = [] for i in xrange(5): w = UploadWorker(flickr, files, lock) workers.append(w) w.start() # 処理終了待ち for w in workers: w.join() print 'Done.' def _test(): import doctest doctest.testmod() if __name__ == '__main__': main()
Mac起動時に自動実行
自動実行するためにどうしようか考えていたが、Platypusという、スクリプトをアプリ化してくれるフリーソフトがあった。
Platypus | Macの手書き説明書 |
これでアプリを作って、「システム環境設定」⇒「アカウント」⇒「ログイン項目」に追加しておしまい。
これでここ数日運用してみたところ、GalaxySで撮った写真が自動でFlickrにアップロードすることができたので、満足。
「指定フォルダの写真を自動アップロードする@Mac」への1件のフィードバック
コメントは停止中です。