【问题标题】:Possible to tweet using appkey/secret key from a different account via twython?可以通过 twython 使用来自不同帐户的 appkey/secret 密钥来发推文吗?
【发布时间】:2013-12-25 08:55:13
【问题描述】:

我有一个 twitter 帐户,其中包含一个应用程序,目前已设置为让学生可以从我们的网站发推文,因此他们的推文在他们的推文底部显示“通过 SchoolAppNameHere”。

是否可以使用 Twython 来使用 Appkey 和密钥,然后从完全不同的地方获取身份验证令牌,所以当我运行下面的代码时,它会从一个没有创建应用程序的帐户发送推文。 ..

from twython import Twython

APP_KEY = ''
APP_SECRET = ''
OAUTH_TOKEN = ''
OAUTH_TOKEN_SECRET = ''

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
twitter.update_status(status="test")

任何想法将不胜感激:)

编辑,更新示例/说明如下:

假设以下图片来自帐户“stackoverflowapp”和名为“Stackoverflow Test App”的应用程序:

使用以下代码将通过名为“Stackoverflow Test App”的应用程序从帐户“stackoverflowapp”和推文“test”发送推文

from twython import Twython

APP_KEY = 'coN_kEY_123456789'
APP_SECRET = 'cOn_sEcr3t_123456789'
OAUTH_TOKEN = 'Acc3ss_tok3N_123456789'
OAUTH_TOKEN_SECRET = 'aCCeSS_tOkEn_sEcrET_123456789'

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
twitter.update_status(status="test")

假设以下图片来自帐户“useraccount1”,应用名为“testing123”:

既然我有访问令牌来登录帐户“useraccount1”,我如何通过用户创建的名为“Stackoverflow 测试应用程序”的应用程序发送推文:我尝试过的“stackoverflowapp”示例如下:

from twython import Twython

APP_KEY = 'coN_kEY_123456789'
APP_SECRET = 'cOn_sEcr3t_123456789'
OAUTH_TOKEN = 'Acc3ss_123456789'
OAUTH_TOKEN_SECRET = 'aCCeSS_sEcrET_123456789'

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
twitter.update_status(status="test update")

不幸的是,我得到了错误:

TwythonAuthError: Twitter API returned a 401 (Unauthorized), Could not authenticate you

【问题讨论】:

  • 只要 OAUTH_TOKENOAUTH_TOKEN_SECRET 已被您的 APP_KEYAPP_SECRET 对授权,那么您就可以代表该用户发推文。所以你不能做的是使用针对完全不同的应用程序授权的令牌,即令牌在应用程序之间是不可互换的。这有意义吗?还是我错过了什么?
  • @soulseekah 我已经更新了我的原始帖子以更详细地显示问题,请参阅我的编辑。
  • 这不是 OAuth2 的工作方式。您的“useraccount1”令牌仅对“testing123”有效,不能与“Stackoverflow 测试应用程序”一起使用。您必须明确请求“useraccount1”的令牌。请参阅:tools.ietf.org/html/draft-ietf-oauth-v2-31#section-1.4“访问令牌是用于访问受保护资源的凭据。访问令牌是一个字符串,表示颁发给客户端的授权。”
  • 因此,每个令牌都是唯一的,并且表示授权特定消费者(在本例中为您的应用程序)访问特定资源(在本例中为具体用户的 twitter 提要)的协议。你到底想解决什么?听起来像XY problem
  • @soulseekah 是的,我通过反复试验收集到useraccount1 的令牌仅对testing123 应用程序密钥有效。这不是 XY 问题的情况,因为如果有人能够帮助处理 snippits 和/或为我指明更好的方向,我不会“坚持一种方法”。

标签: twitter twython


【解决方案1】:

这当然是可能的。当您在 Twitter 中创建应用程序时,它们会为您提供您自己的身份验证令牌供您立即使用,以方便使用。

使用访问令牌字符串作为您的“oauth_token”,使用访问令牌密码作为您的“oauth_token_secret”,以使用您自己的 Twitter 帐户签署请求。不要与任何人分享您的 oauth_token_secret。

要为同一应用程序获取其他帐户的密钥,您需要为每个帐户请求更多密钥。这里有详细描述:https://dev.twitter.com/docs/auth/obtaining-access-tokens

由于听起来您将自己进行授权,因此应该使用更简单的PIN-based 方法。

您正在使用twython,可以使用库来获取这些:https://twython.readthedocs.org/en/latest/usage/starting_out.html#authentication

get_authentication_tokensget_authorized_tokens 是您正在寻找的方法。

from twython import Twython
import sys

APP_KEY = 'coN_kEY_123456789'
APP_SECRET = 'cOn_sEcr3t_123456789'

twitter = Twython( APP_KEY, APP_SECRET )
auth = twitter.get_authentication_tokens()

print( 'Visit %s and enter your PIN: ' % auth.get( 'auth_url' ) ),
pin = sys.stdin.readline().strip()

twitter = Twython( APP_KEY, APP_SECRET, auth.get( 'oauth_token' ), auth.get( 'oauth_token_secret' ) )
tokens = twitter.get_authorized_tokens( pin )

print( 'OAUTH_TOKEN: %s' % tokens.get( 'oauth_token' ) )
print( 'OAUTH_TOKEN_SECRET: %s' % tokens.get( 'oauth_token_secret' ) )

OAUTH_TOKENOAUTH_TOKEN_SECRET 存储在安全的地方并随意重复使用。此外,请确保在访问 URL 并获取 PIN 时授权正确的帐户。

您的所有 API 调用都将在通过令牌授权访问的帐户的一半上进行,您的 via 行将是您的原始应用程序。为您要发推文的每个帐户使用适当的令牌,不能混合搭配。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多