Yahoo!APIのリフレッシュトークンによるアクセストークン更新の流れについて考えてみました。
素人プログラマなので、意味不明な言葉ばかりで苦労しています。
なんとか理解した部分を忘備録的にメモしています。
関連記事:VB.net でYahoo APIのアクセストークンを取得してみました。
スポンサーリンク
「バッチ処理におけるYahoo APIのアクセストークン リフレッシュトークンの処理のフロー」で、Yahoo! APIのアクセストークンの仕組みを調べた結果を元に考えた実際の処理の流れは、次のようになります。
Yahoo!APIによるバッチ処理の流れ
↓
認可コードを使ってアクセストークン、リフレッシュトークンを取得
↓
アクセストークンの期限が切れたら、リフレッシュトークンでアクセストークンを更新する
↓
リフレッシュトークンの期限がきれたら認可コードを取得
↓
認可コードを使ってアクセストークン、リフレッシュトークンを取得
↓
アクセストークンを使って処理を行う(バッチ処理のメイン部分)
↓
アクセストークンの期限が切れたら、リフレッシュトークンでアクセストークンを更新する
↓
アクセストークンを使って処理を行う(バッチ処理のメイン部分)
↓
リフレッシュトークンの期限がきれたら認可コードを取得
↓
認可コードを使ってアクセストークン、リフレッシュトークンを取得
↓
アクセストークンの期限が切れたら、リフレッシュトークンでアクセストークンを更新する
↓
リフレッシュトークンの期限がきれたら認可コードを取得
↓
………(以降同じ処理の繰り返し)
アクセストークン、リフレッシュトークンの期限を確認する方法は多分ありません。
なので、
リフレッシュトークン取得日時とアクセストークン更新日時
を保存しておく必要があります。
認可コードを使ってアクセストークンを取得した日時が最初のアクセストークン更新日時となります。
以上を踏まえて、実際のツールの処理の流れを考えてみます。
開発言語はVB.netです。
スクレイピングでヤフーへログインしないようにとのことなので、認可コードを取得する部分は手動にします。
必要な項目はデータベースにテーブルを作っておいて保存することにします。
例えば、次のようなテーブルにするとします。
列:認可コード、アクセストークン、リフレッシュトークン、アクセストークン更新日時、リフレッシュトークン取得日時
認可コードを取得する部分
↓
ヤフーにログイン(手動でログイン)
↓
コールバックURLで認可コードををDBに保存(ASP.netで作る)
この時、前回のデータがあれば削除する。(話を単純にするため、実際に作る時はログ的な意味で一定期間残す予定です。)
アクセストークンを取得しながらバッチ処理を行う部分
この時、アクセストークン更新日時、リフレッシュトークン取得日時を保存
↓
アクセストークンを使って処理を行う(バッチ処理のメイン部分)
↓
アクセストークン更新日時から1時間経過していたら、
リフレッシュトークンでアクセストークンを更新する。
この時、アクセストークン更新日時を更新
↓
アクセストークンを更新し続けながら、処理を継続
↓
リフレッシュトークンの期限が近づいたら、AuthorizationエンドポイントにアクセスするためのURLをメールで送信
↓
最初の処理に戻る。
以上のようにすれば、月に1回届くメール内のリンクをクリックして、ヤフーのパスワードを入力するだけで、アクセストークンを更新し続けることができるはずです。
実際には、もう少し複雑な処理を作り込む必要があります。
アクセストークンの期限を正確に確認することができません。
そのため、処理中にアクセストークンの期限が切れてしまった場合は、リフレッシュトークン を使って再取得しする。
さらに、リフレッシュトークンも期限切れのエラーがでてしまったら、処理を中断して、認可コードを取得するためのメールを送信する。
といった例外処理を作っておく必要があります。