【问题标题】:Python3 Flask Twitter OAuthPython3 Flask Twitter OAuth
【发布时间】:2014-05-25 11:48:59
【问题描述】:

我一直在尝试将 twitter 与 Flask OAuth 一起使用,并且我正在运行 Python 3。我遵循了本教程:http://pythonhosted.org/Flask-OAuth/ 并尝试了一些解决方法,但它不起作用。

这是我目前得到的:

from flask import *
from flask_oauthlib.client import OAuth
from User import User

oauth = OAuth()
twitter = oauth.remote_app(
    base_url='https://api.twitter.com/1.1/',
    request_token_url='https://api.twitter.com/oauth/request_token',
    access_token_url='https://api.twitter.com/oauth/access_token',
    authorize_url='https://api.twitter.com/oauth/authorize',
    consumer_key='My Consumer Code',
    consumer_secret='My Secret Code',
    name='twitter'
)


app = Flask(__name__)
current_user = User()
@app.route('/')
def home_show():
    return render_template('home.html')

@app.route('/about')
def about_show():
    return render_template('about.html')

@app.route('/app')
def app_show(): 
    if not current_user.is_authenticated():
        return redirect('/')
    else:
        return twitter.authorize(callback=url_for('oauth_authorized',
      next=request.args.get('next') or request.referrer or None))

@twitter.tokengetter
def get_twitter_token(token = None):
    if current_user.is_authenticated():
        return session.get('twitter_token')
    else:
        return None

@app.route('/oauth-authorized', methods=['GET'])
@twitter.authorized_handler
def oauth_authorized(resp):
    next_url = request.args.get('next') or url_for('index')
    if resp is None:
        flash(u'You denied the request to sign in.')
        return redirect(next_url)

    session['twitter_token'] = (
        resp['oauth_token'],
        resp['oauth_token_secret']
    )
    session['twitter_user'] = resp['screen_name']

    flash('You were signed in as %s' % resp['screen_name'])
    return redirect(next_url)

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

它崩溃了

   return twitter.authorize(callback=url_for('oauth_authorized',next=request.args.get('next') or request.referrer or None))

这就是痕迹:

    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1836, in __call__
        return self.wsgi_app(environ, start_response)
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app
        response = self.make_response(self.handle_exception(e))
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1403, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1817, in wsgi_app
        response = self.full_dispatch_request()
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1477, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1381, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1475, in full_dispatch_request
        rv = self.dispatch_request()
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1461, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/Users/Karl/Python/tweettosleep/hello.py", line 40, in app_show
        return twitter.authorize(callback=url_for('oauth_authorized',next=request.args.get('next') or request.referrer or None))
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask_oauthlib/client.py", line 455, in authorize
        token = self.generate_request_token(callback)[0]
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask_oauthlib/client.py", line 527, in generate_request_token
        type='token_generation_failed'
    flask_oauthlib.client.OAuthException: Failed to generate request token

【问题讨论】:

  • 怎么不起作用?请提供更多细节。目前很难说出你在问什么。
  • 这个想法是从方法 app_show 中获取一个令牌,但这不起作用。问题是我无法生成请求令牌。让我编辑它并添加跟踪。
  • flask-oauthflask-oauthlib 是不同的库。您提到了flask-oauth,但实际上是从flask-oauthlib 导入的。你可以看到flask-oauthlibhere的示例代码。

标签: python python-3.x twitter oauth flask


【解决方案1】:

我已经找到答案了,代码其实没什么问题。对不起,如果它有点混乱。问题是我的 twitter 的 consumer_key 无效。我不知道为什么。还在摸索中。

所以重点是,如果您获得相同的 Traceback,则您的 twitter consumer_key 可能不正确!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2011-12-19
    • 2011-07-14
    • 2010-11-03
    • 2011-08-19
    • 2011-07-19
    相关资源
    最近更新 更多