概要
TumblrのAPIを突然利用したくなったので、利用方法をメモする。
OAuth Key の取得
API を利用するには Twitter 等と同様 アプリケーションを登録して OAuth Keyを取得する必要がある。
プリの登録は、「http://www.tumblr.com/oauth/apps」で行なう。
「Register application」ボタンで登録。
「Application name」、「Administrative contact email」、「Default callback URL」が必須なので入力する。
登録内容は後でも変更できる。callback URL はとりあえず自分のサイト等にしておけば良い。
登録が完了すると、「OAuth Consumer Key」、「Secret Key」が取れる。
クライアントアプリケーション作成
クライアントアプリケーショを作成する。
Python で rauth を利用して認証と表示までしたサンプルが以下。実際に利用する場合は「OAuth Consumer Key」、「Secret Key」を自分の物に変更する。
rauth は OAuth を簡単に処理する外部ライブラリでかなり便利。「pip install rauth」などであらかじめインストールしておくこと。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import os
import re
import webbrowser
from ConfigParser import SafeConfigParser
from rauth import OAuth1Service
class TumblrClientTest(unittest.TestCase):
"""
Tumblr クライアントサンプルテスト
"""
def test_sample(self):
"""
テスト
"""
client = TumblrClient()
# sessin の取得
session = client.get_session()
# user/info 取得
response = session.get('user/info').json()
self.assertEqual(response['meta']['status'], 200)
self.assertEqual(response['meta']['msg'], 'OK')
# blog/info 取得
path = 'blog/scipsy.tumblr.com/info?api_key={api_key}'
response = session.get(path.format(
api_key=client.get_api_key())).json()
self.assertEqual(response['meta']['status'], 200)
self.assertEqual(response['meta']['msg'], 'OK')
self.assertEqual(response['response']['blog']['name'], 'scipsy')
class TumblrClient(object):
"""
Tumblr クライアントサンプル
"""
def get_api_key(self):
"""
API key = OAuth Consumer Key
"""
return 'OAuth Consumer Key'
def get_consumer_secret(self):
"""
Secret Key
"""
return 'Secret Key'
def get_session(self):
"""
session の取得
"""
# 設定ファイルのパス
config_file = os.path.abspath(os.path.join(
os.path.dirname(__file__), 'tumblr.cfg'))
tumblr = OAuth1Service(
name='tumblr',
consumer_key=self.get_api_key(),
consumer_secret=self.get_consumer_secret(),
request_token_url='https://www.tumblr.com/oauth/request_token',
access_token_url='https://www.tumblr.com/oauth/access_token',
authorize_url='https://www.tumblr.com/oauth/authorize',
base_url='https://api.tumblr.com/v2/')
if os.path.exists(config_file):
# 設定ファイルが存在する場合、設定ファイル読み込み
config = SafeConfigParser()
config.read(config_file)
access_token = config.get('account', 'access_token')
access_token_secret = config.get('account', 'access_token_secret')
session = tumblr.get_session((access_token, access_token_secret))
else:
# 設定ファイルが存在しない場合、初回認証
session = self.auth(tumblr)
# 設定ファイル出力
config = SafeConfigParser()
sec_name = 'account'
config.add_section(sec_name)
config.set(sec_name, 'access_token', session.access_token)
config.set(sec_name, 'access_token_secret',
session.access_token_secret)
with open(config_file, 'wb') as configfile:
config.write(configfile)
return session
def auth(self, tumblr):
"""
ブラウザでの初回認証
"""
request_token, request_token_secret = tumblr.get_request_token()
authorize_url = tumblr.get_authorize_url(request_token)
print '表示されたURLをブラウザで開きます: ' + authorize_url
webbrowser.open(authorize_url)
authed_url = raw_input('ブラウザアドレスバーのURLをペースとしてください: ')
verifier = re.search(r'\oauth_verifier=([^#]*)', authed_url).group(1)
# session 取得
session = tumblr.get_auth_session(
request_token,
request_token_secret,
method='POST',
data={'oauth_verifier': verifier})
return session
if __name__ == '__main__':
unittest.main()
正しく認証されていると、設定画面の「Apps」に登録したアプリが表示される。
API のドキュメント
公式 APIドキュメントが「http://www.tumblr.com/docs/en/api/v2」に存在するので、あとは必要な物を利用するだけ。