lisz-works

技術と興味の集合体

Python3 はてな APIのOAuth認証する(ほぼコピペでOK)

【スポンサーリンク】

Python

はてなブログを使って、早数年……

はてなのAPIを使ってみたいなぁと思い、色々していました。

ということで、はてな APIをPythonから使う目論見のため、OAuth認証を行いました!

はてなに新しいアプリケーションを登録

APIを使用するには、認証に必要な情報を取得する為に、「アプリケーション」というものを登録します。

まずはコチラにアクセス。

www.hatena.ne.jp

新しいアプリケーションの追加ボタンを押します。

アプリケーションの追加

こんな感じの表示がされます。

アプリケーションの登録画面

情報を入力

情報を登録していきましょう。

最低限必要なのは「アプリケーションの名称」の名称に、任意の名前を入力してください。

説明や画像は設定しなくてもOKです。
またURLは空にしても、勝手に入力し直されます。

アクセス権を変更

「承認を求める操作」という欄で、アクセス権を変更できます。

「何目的でAPIを使用するか?」に応じて、変更しましょう。

権限変更

ひとまずそのままでもOKです。

登録を確定する

「現在の状態」という欄の下にある「変更ボタン」を押せば、登録完了です。

変更ボタン

変更が正常に完了すると、「登録しました」という表示がされます。

完了表示

必要な情報をメモする

アプリケーションの登録を行った画面で、必要な情報が記載されているのでメモしておきます。

この2つの欄がその項目です。

  1. キー
  2. OAuth認証URL

キーとOAuth認証URL

キーは認証に必要な情報になります。

またこのアプリケーション(API)を使用するのに必要な、秘密の情報となります。

この情報が漏洩しないように気をつけましょう。

OAuth認証URLは、認証時にアクセスするのに必要なURLです。

共通なので、下記を参照でもOKです。

項目 URL
Temporary Credential Request URL https://www.hatena.com/oauth/initiate
Resource Owner Authorization URL (PC) https://www.hatena.ne.jp/oauth/authorize
Resource Owner Authorization URL (スマートフォン) https://www.hatena.ne.jp/touch/oauth/authorize
Resource Owner Authorization URL (携帯電話) http://www.hatena.ne.jp/mobile/oauth/authorize
Token Request URL https://www.hatena.com/oauth/token

必要ライブラリのインストール

必要なものをpipでインストールします。

この2つです。

pip install requests
pip install requests_oauthlib

ソースコード

ソースの内容は、参考ページのものとほぼ同じです。
ただし参考ページは、Python2で書かれているので、一部修正が必要。

ということでPython3に対応したものがコチラ。

import urllib
import webbrowser

import requests
from requests_oauthlib import OAuth1


API_KEY = 'OAuth Consumer Keyプライベート'
SECRET_KEY = 'OAuth Consumer Secretプライベート'

request_url = 'https://www.hatena.com/oauth/initiate'
authorize_url = 'https://www.hatena.ne.jp/oauth/authorize'
access_token_url = 'https://www.hatena.com/oauth/token'
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(urllib.parse.parse_qsl(r.text))

    # User Authorization
    # ブラウザが開き、ユーザ許可を行う
    webbrowser.open('%s?oauth_token=%s&perms=delete' % (authorize_url, request_token['oauth_token']))
    # ユーザ許可後に表示される、PINコードを入力する
    oauth_verifier = input("Please input PIN code:")
    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(urllib.parse.parse_qsl(r.text))
    return access_token

if __name__ == '__main__':
    # アクセストークンを取得して、表示する
    print(oauth_requests())

実行してみる

ということで作成したものを実行します。

$ python requestsOauth.py
Please input PIN code:

ブラウザでページが開きます。

「許可する」を押します。

許可画面

すると許可した旨と、PINコードが出力されます。

PINコード

このPINコードをコピーして、Pythonを実行したコンソールに貼り付けてEnterします。

$ python requestsOauth.py
Please input PIN code:KKOaOZuGPYtjbJvgKcZm25ft

するとこのような結果が表示されます。

{'oauth_token': 'OAuthトークン', 'oauth_token_secret': 'OAuthトークンシークレット', 'url_name': 'liszworks', 'display_name': 'lis'}

参考

コチラを参考にしました。ありがとうございました!

qiita.com

docs.python.org

qiita.com

www.ibm.com

あとがき

PythonではてなのAPIを使うために、OAuth認証をする方法でした!

これでフォトライフをいじったり、ブログの操作とかをできるんじゃなかろうか……