質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1325閲覧

FlaskでGETパラメータが取得できない

sqatoo

総合スコア4

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/14 04:34

前提・実現したいこと

FlaskとTweepyを利用してユーザー認証したユーザーのツイートを削除するwebアプリを作成しています。
(黒歴史クリーナーみたいなもの)

発生している問題・エラーメッセージ

Twitterログインの後上手く動くこともあるのですが、頻繁にエラーがでます。エラーの内容をみてみると、tweepyの401エラーのようでした。
Oauth認証がうまくいってないのだろうと考え調査した結果、Twitterログインを行った後、コールバックURLの後ろに付加されるGETパラメータをうまく取得できずNoneになっているのが原因のようでした。ただ、うまく動く場合と動かない場合の違いがわかりません。一応コールバックのURLはちゃんと返ってきているので、request.args.get()のところで問題が発生していると思います。

該当のソースコード

python

1from flask import * 2from requests_oauthlib import OAuth1Session 3from urllib.parse import parse_qsl 4import tweepy 5import os 6# from dotenv import load_dotenv 7 8 9 10CONSUMER_KEY = os.environ.get('CONSUMER_KEY') 11CONSUMER_SECRET = os.environ.get('CONSUMER_SECRET') 12 13 14app = Flask(__name__) 15app.secret_key = os.urandom(24) 16 17##中略 18 19@app.route('/callback', methods=['GET', 'POST']) # ログイン後、アクセストークンなどがパラメータとしてくっついてきます 20def call_back(): 21 if request.method == 'GET': 22 oauth_token = request.args.get('oauth_token') # ここの二つの変数がNoneになってしまうことがあります。 23 oauth_verifier = request.args.get('oauth_verifier') 24 25 session['oauth_token'] = oauth_token #セッションに保存 26 session['oauth_verifier'] = oauth_verifier 27 28 auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 29 token = session.get('oauth_token') 30 verifier = session.get('oauth_verifier') 31 32 session.pop('oauth_token', None) #セッションのクリア 33 session.pop('oauth_verifier', None) 34 35 auth.request_token = { 36 'oauth_token': token, 37 'oauth_token_secret': verifier 38 } 39 40 try: 41 auth.get_access_token(verifier) 42 except tweepy.TweepError: 43 return redirect('/') 44 45 46 key = auth.access_token 47 secret = auth.access_token_secret 48 49 session['access_token'] = key 50 session['access_token_secret'] = secret 51 52 return redirect('/execute') 53 else: 54 return redirect('/') 55 56 57@app.route('/execute', methods=['GET', 'POST']) # ツイ消しの実行処理 58def execute(): 59 if request.method == 'POST': 60 61 auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) #oauthハンドラ生成 62 key = session.get('access_token') # アクセストークンとシークレットキーをセッションから読み込み 63 secret = session.get('access_token_secret') 64 session.pop('access_token', None) 65 session.pop('access_token_secret', None) 66 67 auth.set_access_token(key, secret) 68 cnt = 0 # カウント用 69 try: 70 api = tweepy.API(auth) # APIのインスタンス生成 71 for status in tweepy.Cursor(api.user_timeline).items(): 72 api.destroy_status(status.id) 73 cnt += 1 74 except tweepy.TweepError as e: 75 return jsonify({'isSuccess': False, 'errormessage': e.reason}) #ここが401エラーをだします 76 77 return jsonify({'isSuccess': True, 'destroyed': cnt}) 78 elif request.method == 'GET': 79 return render_template('menu.html') 80 81@app.route('/finish') # 完了画面 82def finish(): 83 return redirect('/') 84 85 86if __name__ == '__main__': 87 app.run(host='0.0.0.0', threaded=True) 88

試したこと

補足情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FiroProchainezo

2020/04/14 04:57

これソースコードは、このソースコードだけで、「Twitterログインの後上手く動くこともあるのですが、頻繁にエラーがでます。エラーの内容をみてみると、tweepyの401エラーのようでした。」が確認できる状態ですか?
sqatoo

2020/04/14 05:21

いえ、このソースコードだけでは確認できません。Herokuへデプロイしたあと、実際に動かしたときにTweepError.reasonをみると401が出力されていました。
FiroProchainezo

2020/04/14 07:15

> いえ、このソースコードだけでは確認できません。 承知しました。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問