Flask + Tweepy でTwitterOAuth周りを触った
きっかけ
- Twitterでバズるのって本当にTweetの中身が伴っているからバズってるのか、そのユーザの持つ特性とかがあって初めてバズってるのかよく分からないなあと思って完全に匿名のTwitterクライアントwebアプリを作ってみようと思い立ったのがきっかけ。
コード
from flask import Flask, render_template, request, redirect, session import tweepy import logging import os CONSUMER_KEY = 'YOUR CONSUMER_KEY' CONSUMER_SECRET = 'YOUR CONSUMER_SECRET' CALLBACK_URL = 'http://localhost:8000/' app = Flask(__name__) app.secret_key = 'なんでもいい' @app.route('/') def index(): tweets = get_tweets() return render_template('index.html',tweets=tweets) @app.route('/login',methods=['GET']) def login(): auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET, CALLBACK_URL) try: redirect_url = auth.get_authorization_url() session['request_token'] = auth.request_token except tweepy.TweepError as e: logging.error(str(e)) return redirect(redirect_url) def get_tweets(): token = session.pop('request_token', None) verifier = request.args.get('oauth_verifier') if token is None or verifier is None: return False auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET,CALLBACK_URL) auth.request_token = token try: auth.get_access_token(verifier) except tweepy.TweepError as e: logging.error(str(e)) api = tweepy.API(auth) return api.home_timeline(count=100) if __name__ == '__main__': app.run(debug=True,port=8000)
ハマったポイント
①そもそもTwitterOAuth認証の仕組みが分からん
コードはこちらを参考にしました
やってることは
2.twitter.comにリダイレクトしてユーザーにアプリケーションを承認してもらう
3.コールバックを使用している場合、twitterはユーザーをアプリケーションにリダイレクトします。それ以外の場合、ユーザーは手動で検証コードを入力する必要があります。
②TwitterのDeveloper向けAppの仕様が若干変わっていた
OAuthがなかなかうまくいかず、KEYもSECRETも正しいはずなのに... ずっと出ていたエラーがこちら。
Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings.
なんだと?Callback URLをTwitterAppを作ったものと同じものにちゃんと設定しないといけないらしい。前触った時はCALLBACKURLとかテキトーに設定した記憶しかない。 http://localhost:8000
に設定すれば無事動きました。
認証周りだけでかなり躓いてしまって萎えました。