OAuthの勉強とTwitterを使って過去記事を宣伝するプログラムを書きたくてプログラム書いてみました。
まずコード全体
今回のコードはそこそこ大きくなったのでブログに全文載せることはせずにGitHubにあげます。正直Pythonはあまり触れたことがないので、Pythonらしい書き方はほとんどできてないと思います。
Python3を対象に書きました。
以下を実行すると実際にためすことができます(コード中のブログIDなどは適宜書き直してください)。
$ python request_token.py $ python req.py
OAuthとはなんぞや?
僕も今回やるまでOAuthはおっかなびっくり触ってきた人種で、「コピペして動いたからいいや」と思って目を背けてきました。しかし、仕組みはわかってしまえばかなり簡単でした。
OAuthの大まかな流れ
- 「このアプリを認証しますか?」というページに行くためのトークンを取得
- ユーザが承認する
- はてなブログ のデータへアクセスするためのトークンを はてなブログ からもらう
- トークンを使って記事一覧を取得
これだけです。Twitterでサードパーティ製のクライアントを使っている人にはわかりやすいかと思います。
よく聞く「リクエストトークン」、「アクセストークン」というのは1、3それぞれで取得するトークンのことです。
詳細な流れ
- Consumer KeyとConsumer Secretを使ってはてなブログへアクセス
- リクエストトークンを取得
- はてなブログの認証用ページにリクエストトークンとともにアクセス
- ユーザーが認証する
- アプリが設定したリダイレクト先URLにはてなブログがアクセストークンとともにアクセス
- アクセストークンを取得
- アクセストークンを使って記事一覧を取得
こうなります。
PIN認証の場合
- Consumer KeyとConsumer Secretを使ってはてなブログへアクセス
- リクエストトークンを取得
- はてなブログの認証用ページにリクエストトークンとともにアクセス
- ユーザーが認証する
- はてなブログがPINコードを発行
- ユーザーがPINコードをアプリ上で入力
- アプリは取得したPINコードを使ってはてなブログへアクセス
- はてなブログからアクセストークンが発行される
- アクセストークンを使って記事一覧を取得
PIN認証はブラウザアプリ以外の場合に利用されます。
どうですか?おもっていたより簡単ですよね?
実際のコード
request_token.pyにてアクセストークンの取得までを行い、その後req.pyで記事一覧を取得します。上の流れで対応する部分のコードにコメントを振ったのでよろしければ参照ください。