当前位置: 首页 > 知识库问答 >
问题:

使用Twython发送tweet,twitter api错误

武骁
2023-03-14

我试图让 python 使用 Twython 为我发送一条推文,但由于某种原因,我尝试的所有内容都不起作用。

我遵循了Twython自述,但仍然无法实现我想要的。

下面是我最近尝试的代码:

from twython import Twython, TwythonError

APP_KEY = "KEYHERE"
APP_SECRET = "SECRETHERE"

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

OAUTH_TOKEN = auth['oauth_token']
OAUTH_TOKEN_SECRET = auth['oauth_token_secret']

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

try:
    twitter.update_status(status='See how easy this was?')
except TwythonError as e:
    print e

运行上述代码时,我得到以下回溯错误:

Twitter API returned a 401 (Unauthorized), Invalid or expired token

有人知道我做错了什么吗?更重要的是,我该如何解决这个问题?

我没有足够的积分获得赏金,但我真的很感谢你的帮助!

预先感谢

编辑

Traceback (most recent call last):
  File "C:\testtweet.py", line 20, in <module>
    final_step = twitter.get_authorized_tokens(oauth_verifier)
  File "C:\Python27\lib\site-packages\twython\api.py", line 313, in get_authorized_tokens
    raise TwythonError('Unable to decode authorized tokens.')
TwythonError: Unable to decode authorized tokens.

以上是从@justhalf提供的代码中得到的回溯

最后谢谢你

共有3个答案

江文斌
2023-03-14

代码返回 Twitter API 返回 401(未经授权)、无效或过期令牌的原因是它在调用 get_authentication_tokens() 后需要oauth_verifier 尝试成功调用 Twitter 的步骤

from twython import Twython, TwythonError

twitter = Twython(APP_KEY, APP_SECRET)

auth = twitter.get_authorization_tokens(callback_url='http://google.com')
oauth_token = auth['oauth_token']
oauth_token_secret = auth['oauth_token_secret']
print auth
print auth['auth_url']

auth['auth_url']将打印如下响应:

https://api.twitter.com/oauth/authenticate?oauth_token=xxxxxxxxx

浏览到此URL以授权您的应用

应用程序获得授权后,它会将客户端发送到callback_url

callback_url将附加oauth_verifier

类似 http://google.com/?oauth_verifier=xxxxxx

根据您使用的web框架,您需要获取oauth_verifier的响应现在创建一个新的Twython实例

twitter = Twython(APP_KEY, APP_SECRET, oauth_token, oauth_token_secret)
final_tokens = twitter.get_authorized_tokens(oauth_verifier)

print final_tokens

# these are the keys you will use to make calls on the users behalf from here on forward
f_oauth_token = final_tokens['oauth_token']
f_oauth_token_secret = final_tokens['oauth_token_secret']

更新推特状态:

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN=f_oauth_token, OAUTH_TOKEN_SECRET=f_oauth_token_secret)

try:
    twitter.update_status(status='See how easy this was?')
except TwythonError as e:
    print e

并更新@Games Brainiac提到的twitter的应用程序设置

洪飞白
2023-03-14

让我们一起努力找出问题所在。

我在文档中注意到了这一点:

现在,oauth_verifier已存储到变量中,您将需要创建一个新的 Twython 实例并获取最终用户令牌

以及它下面的代码:

twitter = Twython(APP_KEY, APP_SECRET,
              OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

final_step = twitter.get_authorized_tokens(oauth_verifier)

所以看来你错过了final_step

然后之后(来自文档):

获得最终用户令牌后,将其存储在数据库中以备将来使用!:

OAUTH_TOKEN = final_step['oauth_token']
OAUTH_TOKEN_SECERT = final_step['oauth_token_secret']

之后,我猜您将需要使用最终的OAUTH_TOKENOAUTH_TOKEN_SECRET创建另一个新的Twython实例。所以我认为完整的代码是这样的:

from twython import Twython, TwythonError
import requests

APP_KEY = "KEYHERE"
APP_SECRET = "SECRETHERE"

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

OAUTH_TOKEN = auth['oauth_token']
OAUTH_TOKEN_SECRET = auth['oauth_token_secret']

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

### This is the part you're missing ###
oauth_verifier_url = auth['auth_url']
oauth_verifier = requests.get(oauth_verifier_url)

# Getting the FINAL authentication tokens
final_step = twitter.get_authorized_tokens(oauth_verifier)

OAUTH_TOKEN = final_step['oauth_token']
OAUTH_TOKEN_SECRET = auth['oauth_token_secret']

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
### Up until this line ###

try:
    twitter.update_status(status='See how easy this was?')
except TwythonError as e:
    print e

我没有Twitter app key,所以我不能尝试。

但我想这应该足以解决你的问题。我希望这能有所帮助。=)

请注意,我使用了Python中的请求包。

田权
2023-03-14

与< code>Twython实际向您展示的方式相比,有一种更简单的方式来更新您的帖子。不过,这将在您的API控制台空间上花费更多的工作,所以让我开始吧。

现在你已经到了你应该在的地方,点击设置选项卡,就在详细信息选项卡旁边,如上所示。

单击如上所示的选项。现在,在你选择了这个选项后,向下滚动直到你看到一个蓝色的按钮,上面写着更新这个twitter的应用程序设置。

好的,现在转到您的代码编辑器,并编写以下样板代码(这些键不起作用,我刚刚摆脱了应用程序,所以这里没有黑客攻击,:P我给出它们只是为了指示您应该期望的键的长度):

from twython import Twython

APP_KEY = ''  # Customer Key here
APP_SECRET = ''  # Customer secret here
OAUTH_TOKEN = '1936951807-z5bBNING8P1TU2onWvJh5dh8hoYlYAmNOaAx2OX'  # Access Token here
OAUTH_TOKEN_SECRET = 'QWJEZ7ridSeZGdxJELSBk7mupCpMA9q9sLCou5ywg'  # Access Token Secret here

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

twitter.update_status(status="Hello from Python! :D")

之后,查看您的twitter,您应该会看到一条新推文,上面写着“来自Python的Hello!: D”。

 类似资料:
  • 我试图使用Twitter API从给定的推文导入视频。但是,当我使用终结点时,它不会像返回图像那样返回视频的任何扩展实体,而是返回一个链接到嵌入有视频播放器的视频容器的url实体,该视频容器包含一个指向视频的模糊链接。 以下是一个例子: 我正试图在 使用推特应用编程接口的endpoint和推特id,我得到这样的响应: 遵循URL后,视频标签的来源为

  • 我正在使用以下代码来收集与某个主题相关的推文,但在我提取的所有推文中,“places”属性为“无”。我做错了什么吗?此外,该代码旨在提取现有的推文,我不需要流式处理API解决方案,也不寻找流式处理API的这种解决方案:https://www.quora.com/How-can-I-get-a-stream-of-tweets-from-a-particular-country-using-Twit

  • 我正在尝试使用最新版本的Twython和Python 2.7.3设置流。我正在尝试在依赖于OAuth1文档的流媒体文档中重现示例。使用以下代码会产生401个错误,直到我终止执行: “OAUTH_TOKEN”和“OAUTH_TOKEN_SECRET”的值最终设置为 unicode 字符串。我已经设置了“APP_KEY”和“APP_SECRET”如上所述,或者设置为具有相同结果的unicode字符串。

  • 我正在尝试嵌入来自用户公共流的最新推文。我这样做是因为 这已经不起作用了。我以为这是因为推特都很旧了,但是在把名字换成活动账户后,它也不起作用了。 我不想手动嵌入推文。我最好不要使用twitter小部件。 我已经尝试了tweet.seaofclouds.com的Twitter插件,但它也没有找到旧的推文(演示) 所以我需要的是一种显示最新推文的方法,无论该用户的年龄如何:@nietopmeisje

  • put twitter on your website with tweet!, an unobtrusive javascript plugin for jquery.

  • 我可以用简单的代码发布一条推文: 问题是,这条推文将发布在我的个人资料上。我的问题是,我可以在其他帐户上发布推文,但使用我的密钥和令牌吗?像这样: