Flask×Twitterでログイン機能実装③|アクセストークンを取得

2019-07-12

Twitter連携でWEBアプリにユーザー認証機能を実装していきます。

こちらの記事の続きです。

Flask×Twitterでログイン機能実装②|OAuth認証でTwitterと連携

前回はOAuthセッションを用いて、ユーザー認証画面のURLを取得するところまで実装しました。

もくじ

  1. 前回までのコード
  2. 認証成功後の流れ
  3. URLから認証情報を取得
  4. Tweepyで自動ふぁぼを実装する
  5. 参考

前回までのコード

まずはざっくり前回のコードを見ていきます。

from requests_oauthlib import OAuth1Session
from urllib.parse import parse_qsl
ck = "取得したキー"
cs = "取得したキー"
#今回はローカルのWEBサーバーで動かすため、127.0.0.1/callbackに設定
callbackUrl = "127.0.0.1/callback"
#TwitterAPI連携のための各種URL
request_token_url = 'https://api.twitter.com/oauth/request_token'
authorization_url = 'https://api.twitter.com/oauth/authorize'
access_token_url = 'https://api.twitter.com/oauth/access_token'
#OAuth認証のためのオブジェクト
twitter = OAuth1Session(ck, cs)
#認証用URLの取得
twitter.fetch_request_token(request_token_url)
authUrl = twitter.authorization_url(authorization_url)
print(authUrl)

上記のコードを実行すると、認証画面のURLが表示されます。
今回は、ここからの流れを解説します。

認証成功後の流れ

Twitter認証画面における認証が成功すると、自分で設定したCallbackURLにトークン情報の含まれたリダイレクトが発生します。
トークン情報は、以下のような形で、URLに含まれています。
(URLの○と△の部分に、必要な情報が入っています)

http://127.0.0.1:5000/callback?oauth_token=〇〇&oauth_verifier=△△

この中からoauth_tokenとoauth_verifierを取得すると、ユーザーのアカウントにAPIからアクセスできるようになります。

URLから認証情報を取得

さて、認証成功後のCallbackから必要な情報を取り出して、アクセストークンを取得していきましょう。

実装は若干手間取りました。
まずさきにFlaskのコードを見ていきましょう。

@app.route('/callback')
def callback():
    try:
        access_token_url = 'https://api.twitter.com/oauth/access_token'
        ck = "取得したAPIキー"
        cs = "取得したAPIキー"
        #OAuth認証でアクセストークンを取得
        redirect_response = request.url
        twitter = OAuth1Session(ck,cs)
        twitter.parse_authorization_response(redirect_response)
        res = twitter.fetch_access_token(access_token_url)
        #アクセストークンを取り出す
        AT = res.get('oauth_token')
        AS = res.get('oauth_token_secret')
        #TwitterBOTのテスト
        #Pythonという文字列を含むツイートをふぁぼる
        twitterCode.twitter_fav("Python", AT, AS)
        return render_template("index.html")
    except:
        flash('認証に失敗しました。もう一度やり直してください。')
        return render_template("index.html")

認証が終わると、指定したコールバックURLにリダイレクトされ、パラメーターに必要な情報が格納されています。
これまで同様、OAuth1Sessionモジュールを使っていきます。

fetch_access_tokenメソッドによって認証が成立したオブジェクトには、次の4つの情報が含まれていました。

・oauth_token
・oauth_token_secret
・user_id
・screen_name

TwitterAPIでアカウントを操作するのに必要なのは、oauth_tokenとoauth_token_secretです。
これと最初に取得した2つのAPIキーを合わせた合計4つの鍵があれば、TwitterAPIを使ってアカウントを操作することができます。

Tweepyで自動ふぁぼを実装する

ここまでくれば、アカウント操作自体は楽勝です。
今回は自動ふぁぼ機能を実装してみようと思います。

Tweepyを使って自動投稿を実装します。
コードだけ貼っておきますね。

import tweepy
import time 
def twitter_fav(text, AT, AS):
    CK = 'APIキー'
    CS = 'APIキー'
    AT = AT
    AS = AS
    auth = tweepy.OAuthHandler(CK, CS)
    auth.set_access_token(AT, AS)
    api = tweepy.API(auth)
    tweets = api.search(q=text, count=30)
    for tweet in tweets:
        tweet_id = tweet.id
        try:
            api.create_favorite(tweet_id)
        except:
            next
        time.sleep(1)
    return "ok"

これでBOTに必要なキーは手に入りましたが、使うたびに毎回連携認証を求めるのは面倒です。
次回は、取得した認証情報をCookieに保存して、Cookieの情報で認証を行えるようにしていきたいと思います。

参考

Flaskのrequest.argsでパラメータの処理について

Twitterで自動ふぁぼ!PythonでTwitterBOTをつくる。

Twitterで自動ふぁぼ、認証機能を実装してWEBアプリ化!

前の記事
Flask×Twitterでログイン機能実装②|OAuth認証でTwitterと連携

次の記事
Flask×Twitterでログイン機能実装④|PythonでCookieを読み書き