Flask 和 Tweepy oAuth 错误 - 无法获取请求令牌

1 投票
3 回答
1187 浏览
提问于 2025-04-18 12:48

我在用Flask框架做一个练习项目,尝试使用tweepy进行身份验证。但是,当我试图用Tweepy和Flask进行OAuth认证时,出现了302的返回,提示无法获取访问令牌。请帮帮我。下面是我的代码和错误信息。

from flask import Flask, redirect, url_for, session, request, render_template, flash
import tweepy
import flask

app = Flask(__name__)
app.config.from_object('config')
oauth = OAuth()
consumer_key = app.config["CONSUMER_ID"]
consumer_secret = app.config["CONSUMER_SECRET"]
access_token_key = app.config["ACCESS_KEY"]
access_token_secret = app.config["ACCESS_SECRET"]

callback_url = 'http://localhost:5000/verify'
session = dict()
db = dict()



@app.route('/')
def send_token():
    redirect_url = ""
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret, callback_url)

    try: 
        #get the request tokens
        redirect_url= auth.get_authorization_url()
        session['request_token']= (auth.request_token.key,
            auth.request_token.secret)
    except tweepy.TweepError:
        print 'Error! Failed to get request token'

    #this is twitter's url for authentication
    return flask.redirect(redirect_url)


@app.route("/verify")
def get_verification():

    #get the verifier key from the request url
    verifier= request.args['oauth_verifier']

    auth = tweepy.OAuthHandler(CONSUMER_TOKEN, CONSUMER_SECRET)
    token = session['request_token']
    del session['request_token']

    auth.set_request_token(token[0], token[1])

    try:
            auth.get_access_token(verifier)
    except tweepy.TweepError:
            print 'Error! Failed to get access token.'

    #now you have access!
    api = tweepy.API(auth)

    #store in a db
    db['api']=api
    db['access_token_key']=auth.access_token.key
    db['access_token_secret']=auth.access_token.secret
    return flask.redirect(flask.url_for('index'))

@app.route("/index")
def index():
    #auth done, app logic can begin
    api = db['api']

    #example, print your latest status posts
    return flask.render_template('tweets.html', tweets=api.user_timeline())


if __name__ == '__main__':
    app.run()

错误信息...

 * Running on http://127.0.0.1:5000/
 * Restarting with reloader
Error! Failed to get request token
127.0.0.1 - - [10/Jul/2014 20:16:14] "GET / HTTP/1.1" 302 -
Error! Failed to get request token
127.0.0.1 - - [10/Jul/2014 20:16:16] "GET / HTTP/1.1" 302 -
Error! Failed to get request token
127.0.0.1 - - [10/Jul/2014 20:16:18] "GET / HTTP/1.1" 302 -
Error! Failed to get request token
127.0.0.1 - - [10/Jul/2014 20:16:20] "GET / HTTP/1.1" 302 -
Error! Failed to get request token
127.0.0.1 - - [10/Jul/2014 20:16:21] "GET / HTTP/1.1" 302 -
Error! Failed to get request token

3 个回答

0

我注意到tweepy这个库需要更新一下。看起来OauthHandler这个东西在Python的文件结构中没有正确加载。我还在学习导入结构是怎么回事。

如果我去tweepy库安装的路径,把auth.py这个文件复制到我本地的工作目录,并把它重命名为auth_temp.py。那么我就可以顺利访问里面的OAuthHandler类了。

0

你的配置文件里的 consumer_key 和 consumer_secret 没有被正确读取。你可以试试把这两个密钥直接写在代码的开头来测试一下。其他的部分看起来都没问题,对我来说都能正常工作!

1

原来问题出在tweepy这个包没有在Pypi上更新到最新版本。我是从他们的GitHub仓库安装的,结果就正常工作了...

撰写回答