【问题标题】:User authentication for Twitter API using Python application使用 Python 应用程序对 Twitter API 进行用户身份验证
【发布时间】:2020-11-24 20:22:38
【问题描述】:

我正在为一个用 Python 编写的应用程序开发一个模块(它是开源的)。我希望该模块允许用户登录 Twitter 并更新状态(发布推文)。我有使用 twitter 导入编写的 Python 脚本,该脚本需要开发人员(我)输入消费者/身份验证令牌/秘密。我不想将令牌预编程到模块中,而是让用户登录以更新他们的状态(显然)。

我需要一个大致的方向来追求。我设想用户点击分享!菜单选项,浏览器弹出 Twitter 登录页面,用户登录和应用程序存储凭据,然后从那里更新状态。我的模块正在工作,但就像我之前所说的,我需要从我的应用程序的 apps.twitter.com 页面输入令牌信息。我希望用户能够登录。

这是使用 twython 库的代码片段:

from twython import Twython

#APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET
OAUTH_TOKEN = '...'
OAUTH_TOKEN_SECRET = '...'
APP_KEY = '...'
APP_SECRET = '...'

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
if (twitter.update_status(status='The status is updated from Python!')):
    print("Working!")
else:
    print("Not working!")

上面的代码有效并更新了我的 Twitter 状态,但我不希望该模块的其他用户更新我的状态,而是让他们登录并更新他们的状态。

提前致谢。

编辑 我现在拥有的:

import urllib.parse
import oauth2 as oauth

consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
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 = oauth.Consumer(consumer_key, consumer_secret)
client = oauth.Client(consumer)
resp, content = client.request(request_token_url, "GET")

if resp['status'] != '200':
    raise Exception("Invalid response %s." % resp['status'])

request_token = dict(urllib.parse.parse_qsl(content))
print("Request Token:")
print("    - oauth_token        = %s" % request_token[b'oauth_token'].decode())
print("    - oauth_token_secret = %s" % request_token[b'oauth_token_secret'].decode())

print("Go to the following link in your browser:")
print("%s?oauth_token=%s" % (authorize_url, request_token[b'oauth_token'].decode()))

accepted = 'n'
while accepted.lower() == 'n':
    accepted = input('Have you authorized me? (y/n) ')

oauth_verifier = input('What is the PIN? ')
token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])

token.set_verifier(oauth_verifier)
client = oauth.Client(consumer, token)

resp, content = client.request(access_token_url, "POST")
access_token = dict(urllib.parse.parse_qsl(content))

print(access_token.keys())
print(access_token.values())
print("You may now access protected resources using the access tokens above.")

import twitter
api = twitter.Api(consumer_key=' ', consumer_secret=' ',
                  access_token_key=' ', access_token_secret=' ')
tweet = api.PostUpdate("First tweet from an authenticated user.")

我通过登录授权我的应用程序,网页重定向到 callback_url,就像它应该的那样,但我没有输入 PIN。那是从哪里来的?

【问题讨论】:

  • OAuth 工作流需要一个可以处理回调的 Web 应用程序,如 Twython 文档中所述:twython.readthedocs.io/en/latest/usage/… - 或者,您的应用程序可以托管您在回调中指定其地址的服务器。由于您没有显示任何尝试这样做的代码,因此您的问题过于宽泛,可能会导致关闭,除非您更新代码以展示您尝试过的内容。
  • 该应用程序是基于桌面的,因此不涉及网页。托管服务器的应用程序会在 apps.twitter.com 中配置吗?坦率地说,我在用户身份验证方面没有做太多尝试,但是当我发现更多信息时会尝试你的建议和更新。 @JoeMayo

标签: python twitter twitter-oauth twython


【解决方案1】:

我知道晚了,但它可以帮助别人

您可以在您的应用验证后找到验证令牌,它将显示在标题中。

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2020-12-11
    • 1970-01-01
    • 2011-06-16
    • 2011-09-21
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多