Iruca Log

読者です 読者をやめる 読者になる 読者になる

Iruca Log

東京に住むWeb系エンジニアによるデータ分析ブログ

SNSでフォローする!

はてなのOAuth API用のアクセストークンを簡単に取得する [python]

こんにちは、irucaです。

今回は「はてなのOAuth APIを使うために必要なアクセストークン」をpythonスクリプト一発で取得する方法をまとめました。
下記に書いてあるプログラムを実行するだけで、API使用開始のためにまず障壁となるアクセストークンをすぐに取得できます。

はじめに

はてなブログにプログラムから投稿できたら夢が広がるよなあと思うことがちょいちょいあります。
私の好きなtwitterハッシュタグ「 #今日の一句 」の内容をまとめて自動的に投稿してくれる私だけが喜ぶプログラムだって簡単に書けちゃうわけです。

「ストレスを 溜め込み禿げる 後頭部」

「帰り道 理由もなしに 鼻血でる」

「おっぱいを 揉むと母乳が 出るんだな」

「うんちする いっぱい出たね うんちした」


これくらいのクオリティのクソ川柳が上記ハッシュタグには流れてるだけなんですが、何故か毎日見ちゃうんですよね。
これを垂れ流すだけのブログいつか作りたい。

とまあそれはさておき、定期的にお決まりのイベント情報、安売り情報を流すブログを書いてる方でも、
自動的に記事をプログラムから投稿できるというのは毎日の時間短縮になってとっても役立つはずです。

ただ、はてなのOAuth APIの仕様を見ると、ほとんどの人が当てはまるであろう
「自分のアカウントの情報を取得/更新するためのアクセストークン」
を取るだけでも、
利用開始するまでにアクセストークンを取得する過程が面倒なのです。
ローカルにサーバを立ててアクセスするのが必須ですし。

Twitter APIだと自分のアカウント情報を利用するアクセストークンはボタン1つで取得できるのになあ。


というわけで、はてなのOAuth APIを使う上で最も障壁となる、
「自分用のアクセストークンの取得をpythonを1回実行するだけで簡単に取得できるプログラム」
を今回は作ってみました。

下記に書いてあるプログラムを実行すると、以下のような出力がサッと得られます。

[root@hoge hatena-oauth-python (master)]# python get_access_token_util.py
Consumer Key: hogefuga==
Consumer Secret: miserarenai=
Access Token: miserarenaiyo==
Access Token Secret: himitsudayo=

トークンの値は偽のものです。

前準備

requests_oauthlibモジュールをpipなどでインストールしておいてください。

$ pip install requests_oauthlib

プログラム紹介

とっても長くなってしまったのでソースコードはgithubに置きました。
cloneしておいてください!
GitHub - iruca/hatena-oauth-python

python2.7で動くはず。
基本的には、以下の流れで動作しています。

  1. request_token を取得
  2. はてなにログイン
  3. はてなにログインした状態で、request_tokenを使ってverifierを取得
  4. access tokenを取得

特にOAuthの仕組みは説明しないので、request tokenや verifierってなんじゃ、と気になる方は各自調べてください。
ただ、詳しい仕組みを知らなくてもこのプログラムさえ実行してもらえればAccessTokenは手に入るので、はてなのAPIを使うのには困らなくなるはずです!

実行してみた

プログラムのget_access_token_util.py の下部の、hatena_id, password, consumer_key, consumer_secret, scopeの値をそれぞれコメントに従って書き換えてもらえれば動きます。

    # アクセストークンを取得するはてなアカウントのはてなIDとログインパスワード
    hatena_id = "iruca21"
    password = "aaaaaaaaa"
    # 事前にアプリケーション登録して得たconsumer_key/consumer_secret文字列
    consumer_key = "aaaaaaaaaaaa"
    consumer_secret = "aaaaaaaaaaaaaa"
    # 取得したいアクセストークンのscope (カンマ区切り)
    scope = "read_public,read_private,write_public,write_private"

試しに実行してみます。

[root@hoge hatena-oauth-python (master)]# python get_access_token_util.py
Consumer Key: hogefuga==
Consumer Secret: miserarenai=
Access Token: miserarenaiyo==
Access Token Secret: himitsudayo=

自分用のAccess Token/Secretが取れる!
自分用のAccess Tokenをとるだけなので、これで十分。
webサーバを立てて、面倒なcallback処理を考えてAccessTokenを取得する方法より断然楽です。

はてなのAPIを1つ使ってみた

本当にこのAccessToken/Secretさえあれば簡単にOAuth対応のはてなAPIが使えるのか、pythonの対話環境を使って実験してみます。
はてなブックマークAtomAPI - Hatena Developer Center

とりあえずルートAtomエンドポイントとやらを取得してみる。

[root@hoge hatena-api]# python
Python 2.7.12 (default, Sep  1 2016, 22:14:00)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
from requests_oauthlib import OAuth1>>> from requests_oauthlib import OAuth1
>>> auth = OAuth1("ここにconsumer_keyを入力", "ここにconsumer_secretを入力", "ここにAccessTokenを入力", "ここにAccessTokenSecretを入力")
>>> print requests.get("http://b.hatena.ne.jp/atom", auth=auth).content

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://purl.org/atom/ns#">
  <link type="application/x.atom+xml" rel="service.post"
        href="http://b.hatena.ne.jp/atom/post" title="iruca21 のブックマーク" />
  <link type="application/x.atom+xml" rel="service.feed"
        href="http://b.hatena.ne.jp/atom/feed" title="iruca21 のブックマーク" />
</feed>

>>>
>>>

なんかよくわからんけど取れてる!満足。
これでプログラムからはてなブログが更新できるぞー。

まとめ

AccessTokenさえ取ってしまえばrequests_oauthlibなど3rd party製のOAuthクライアントライブラリでAPIが簡単に叩けるのですが、
AccessTokenを取るところが厄介だったので自分で自動化しちゃいました。
同じことで悩んでいるpythonプログラマの役に立つはず。