Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@kosystem

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

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の仕様に関してはまた別の機会に…

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
16
Help us understand the problem. What are the problem?