PythonスクリプトからTumblrに画像を投稿してみたメモ

使用するライブラリをインストールします

pip install python-tumblpy

https://github.com/michaelhelmick/python-tumblpy

手順1

Tumblrアプリの登録をして、 OAuth Consumer KeyとSecret Keyを取得します。
コールバックURLは適当にlocalhost:8000とかを入れました

アプリの登録
http://www.tumblr.com/oauth/apps

手順2

以下のスクリプトを実行して、oauth_tokenとoauth_token_secret、auth_urlを取得します

from tumblpy import Tumblpy

OAuth_Consumer_Key = "手順1で取得したOAuth Consumer Key"
Secret_Key = "手順1で取得したSecret key"

t = Tumblpy(app_key OAuth_Consumer_Key,
            app_secret=Secret_Key)

auth_props = t.get_authentication_tokens()

auth_url = auth_props['auth_url']

oauth_token = auth_props['oauth_token']
oauth_token_secret = auth_props['oauth_token_secret']

print auth_url
print oauth_token
print oauth_token_secret

手順3

手順2で取得したauth_urlにブラウザからアクセスして、「許可」を選択します。



リダイレクトされてエラーページに飛ばされますが、リダイレクト先のURLのクエリパラメータにoauth_verifierがありますので、この値をメモしておきます。


手順4

手順2で取得したoauth_token、oauth_token_secret、手順3で取得したoauth_verifierを使って以下のスクリプトを実行します。
このスクリプトで得られた2つのトークンを使って、Tumblr投稿を行いますので、メモしておきます。

from tumblpy import Tumblpy

OAuth_Consumer_Key = "手順1で取得したOAuth Consumer Key"
Secret_Key = "手順1で取得したSecret key"
oauth_token = "手順2で取得したoauth_token"
oauth_token_secret = "手順2で取得したoauth_token_secret"


t = Tumblpy(app_key = OAuth_Consumer_Key,
            app_secret = Secret_Key,
            oauth_token=oauth_token,
            oauth_token_secret=oauth_token_secret)


oauth_verifier = "手順3で取得したoauth_verifier"
authorized_tokens = t.get_access_token(oauth_verifier)

final_oauth_token = authorized_tokens['oauth_token']
final_oauth_token_secret = authorized_tokens['oauth_token_secret']

print final_oauth_token
print final_oauth_token_secret

手順5

ローカルにある画像をpostしてみます

from tumblpy import Tumblpy

OAuth_Consumer_Key = "手順1で取得したOAuth Consumer Key"
Secret_Key = "手順1で取得したSecret key"
oauth_token = "手順4で取得したoauth_token"
oauth_token_secret = "手順4で取得したoauth_token_secret"


t = Tumblpy(app_key = OAuth_Consumer_Key,
            app_secret = Secret_Key,
            oauth_token=oauth_token,
            oauth_token_secret=oauth_token_secret)

blog_url = t.post('user/info')
blog_url = blog_url['user']['blogs'][0]['url']

files = open('/path/to/image_file', 'rb')

post = t.post('post', blog_url=blog_url, params={'type':'photo', 'caption': 'Test Caption'}, files=files)

これでtumblrに画像投稿できました。


web上にある画像を投稿する場合は、paramsにsourceとしてURLを指定するとうまくいくようです

post = t.post('post', blog_url=blog_url, params={'type':'photo',
                                                 'caption': "Test Caption,
                                                 'source': 'http://exapmle.com/img/test_image.jpg' })


参考)
http://www.tumblr.com/docs/en/api/v2