使用Tweepy在Python中回复Twitter的推文

32

我似乎无法使用tweepy回复特定的推文:

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)

api = tweepy.API(auth)

### at this point I've grabbed the tweet and loaded it to JSON...

tweetId = tweet['results'][0]['id']

api.update_status('My status update',tweetId)
api说它可以接受可选参数,其中in_reply_to_status_id是第一个参数,但似乎完全忽略了它。这个脚本将发布更新的状态,但它没有将其链接为要传递的tweetId的回复。
API参考:http://code.google.com/p/tweepy/wiki/APIReference#update_status 有人有什么想法吗?我感觉我在这里漏掉了什么简单的东西...
提前感谢。

好吧,这其实很简单。我需要使用@符号来指定推文的接收对象。api.update_status('我的状态更新 @回复谁', tweetId) - mcriecken
7个回答

38

我只是发布解决方案,以免其他人像我一样遭受困扰。 Twitter更新了API,并添加了一个名为auto_populate_reply_metadata的选项。

你所需要做的就是将其设置为true,然后将其余部分保持不变。以下是一个示例:

api.update_status(status = 'your reply', in_reply_to_status_id = tweetid , auto_populate_reply_metadata=True)

另外,status_id 就是推特链接末尾的一长串数字。祝好运!


2
这可能应该是新答案。谢谢。 - blitzblade
这个解决方案在推文中留下评论吗?这个函数能做“引用转推”吗? - han shih

24

我也遇到了同样的问题,但幸运的是,我找到了解决方法。你只需要在推文中包含用户的 screen_name 即可:

api.update_status('@<username> My status update', tweetId)

花了好几个小时来解决这个问题,最终找到了这个解决方案!谢谢! - thameera
这里也遇到同样的问题...这是唯一对我有效的答案。谢谢伙计! - CoderOfTheNight
谢谢你,伙计! - Talk is Cheap Show me Code

18

你也可以这样做

api.update_status("my update", in_reply_to_status_id = tweetid)

这应该是最佳选择。 - user3378649
2
这对我没有起作用。您需要在推文中添加用户的句柄才能进行回复。否则,它将被视为您的新推文,而不是对现有推文的回复。 - Diego Mora Cespedes
@DiegoMoraCespedes 这是错误的(至少现在是这样)。您必须同时添加 auto_populate_reply_metadata=Truein_reply_to_status_id。这意味着您不需要在推文中添加用户的句柄才能使其正常工作。 - pigeonburger

15
那么,问题很简单。我需要使用@符号来指定推文的接收者。
api.update_status('My status update @whoIReplyTo',tweetId) 

1
第一次就成功了。我漏掉了推特ID号码。非常好的问题和答案 - 谢谢! - Adjam

2

我发现在回复推文时需要包含推文的ID字符串(而不是实际的ID号码)。

api.update_status('@whoIReplyTo my reply tweet',tweetIdString) 

1
这似乎是Tweepy中的一个bug - 即使您使用正确的参数调用api.update_status
api.update_status(status=your_status, in_reply_to_status=tweet_to_reply_to.id)

这条推文不会是回复。如果想要回复,你需要提及你想要回复的用户并且指定正确的in_reply_to_status id。

reply_status = "@%s %s" % (username_to_reply_to, your_status)
api.update_status(status=reply_status, in_reply_to_status=tweet_to_reply_to.id)

请记住,Tweepy和Twitter服务器仍然强制限制最大字符数为140个字符,因此请确保您检查。
len(reply_status) <= 140

我认为这是一个bug,因为在Twitter应用程序中,你可以回复而不需要嵌入被回复人的用户名。


1
reply_status = "@%s %s" % (tweet.user.screen_name, "type your reply here")
api.update_status(status=reply_status, in_reply_to_status_id=tweet.id)

这是最后一个正确的表单,我几分钟前刚测试过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接