Twitter連携でWEBアプリにユーザー認証機能を実装していきます。
こちらの記事の続きです。
Flask×Twitterでログイン機能実装②|OAuth認証でTwitterと連携
前回はOAuthセッションを用いて、ユーザー認証画面のURLを取得するところまで実装しました。
もくじ
前回までのコード
まずはざっくり前回のコードを見ていきます。
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アプリ化!