Posted at

requestsを使ったOAuth認証 例題:Flickr

More than 3 years have passed since last update.

requestsとrequests_oauthlibを使ってFlickrにOAuth認証を簡単に行う

「requestsを使ってWebAPIをたたく 例題:Flickr」でFlickrのWebAPIのたたいたが、実際には自分のアカウント内のプライペート写真にアクセスしたいことが多い。

そこでOAuth認証を使いアカウントにアクセス可能にする方法を示す。


install

PyPiに登録されているのでpipまたはeasy_installを使ってインストール

$ pip install requests requests_oauthlib


API keyの取得

Flickrのアカウントを持っていない場合は必要に応じて取得する。

下記のアドレスにアクセスしアプリケーションの登録を行いAPI KeyとSECRETを入手する。非商用ならNon-Commercialで登録する。

https://www.flickr.com/services/apps/create/apply/


OAuth認証


サンプルコード

FlickrのOAuthの手順については公式サイトに説明がある。今回はFlickrを対象としているが、基本的にOAuth1であれば同じ手順のはず。

Flickr:User Authentication

import urlparse

import webbrowser

import requests
from requests_oauthlib import OAuth1

API_KEY = 'YOUR_API_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'

request_url = 'https://www.flickr.com/services/oauth/request_token'
authorize_url = 'https://www.flickr.com/services/oauth/authorize'
access_token_url = 'https://www.flickr.com/services/oauth/access_token'
access_url = 'https://api.flickr.com/services/rest/'
callback_uri = 'oob'

def oauth_requests():
# Get request token
auth = OAuth1(API_KEY, SECRET_KEY, callback_uri=callback_uri)
r = requests.post(request_url, auth=auth)
request_token = dict(urlparse.parse_qsl(r.text))

# Getting the User Authorization
webbrowser.open('%s?oauth_token=%s&perms=delete' % (authorize_url, request_token['oauth_token'])) # ブラウザを開きOAuth認証確認画面を表示 ユーザーが許可するとPINコードが表示される

oauth_verifier = raw_input("Please input PIN code:") # 上記PINコードを入力する
auth = OAuth1(
API_KEY,
SECRET_KEY,
request_token['oauth_token'],
request_token['oauth_token_secret'],
verifier=oauth_verifier)
r = requests.post(access_token_url, auth=auth)

access_token = dict(urlparse.parse_qsl(r.text))
return access_token

if __name__ == '__main__':
print oauth_requests()

これによりAccess tokenおよびAccess token secretが取得でき、以後これを用いることでユーザーのアカウントにアクセスすることができるはず。

認証後のAPIの仕様に関してはまた別の機会に…


参考