使用 Twitter 流 API,是不是可以只显示来自特定用户的推文?

Posted

技术标签:

【中文标题】使用 Twitter 流 API,是不是可以只显示来自特定用户的推文?【英文标题】:Using the Twitter streaming API, is it possible to only display tweets from a specific user?使用 Twitter 流 API,是否可以只显示来自特定用户的推文? 【发布时间】:2014-01-18 19:19:57 【问题描述】:

我目前正在使用 Twitter API 来检索某些用户发布的推文。为了这个问题,我们以@justinbieber 为例。

当使用 https://stream.twitter.com/1.1/statuses/filter.json 资源时,将关注设置为所需的用户 ID (@justinbieber = 27260086),并允许它运行,虽然我只期望 @justinbieber 的推文,但我最终得到了发给他的推文他的数百万粉丝。显然,这意味着我获得的信息比我想要的要多得多,而且根据我的发现,我有时最终会错过用户自己的推文!

我已尝试更改https://dev.twitter.com/docs/streaming-apis/parameters 上的每个参数,但无济于事。

以下参数说明:

For each user specified, the stream will contain:

   Tweets created by the user.
   Tweets which are retweeted by the user.
   Replies to any Tweet created by the user.
   Retweets of any Tweet created by the user.
   Manual replies, created without pressing a reply button (e.g. “@twitterapi I agree”).

因为它在文档中,我假设没有办法只获得该用户的推文而不必自己过滤结果(如前所述,这意味着我最终可能会错过用户自己的推文!) ,但我很想知道是否有人知道解决方法。

在有人建议使用诸如 statuses/user_timeline 之类的东西之前,我知道它能够做我想做的事,但是它有两个缺点让我一直使用流式 API:

每个请求都意味着我丢失了一个请求,而且由于 Twitter 是速率限制的,我想避免这种情况。 每个请求都有 HTTP 协议的昂贵开销。谈判花费了太多时间。

我想做的事可能吗? @justinbieber 只是高开销 Twitter 帐户的一个示例。我想使用此代码来检索许多高开销帐户的推文,因此速度和查看每个用户的每条推文的能力都是要求。

【问题讨论】:

【参考方案1】:

使用json_decode后,可以使用以下IF语句判断是什么类型的tweet:

    // if it is a retweet        
    if (isset($data['retweeted_status']))
    
         //TODO
    

    // if it is a reply
    else if (isset($data['in_reply_to_status_id_str']))
    
         //TODO
    

    // if it is a mention
    else if (isset($data['in_reply_to_user_id_str']))
    
         //TODO
    

    // if it is an original tweet
    else
    
         //TODO
    

【讨论】:

【参考方案2】:

我遇到了类似的问题,并用我从 arstechnica 提取的一小段代码解决了

如果您使用 python pycurl 将完成这项工作。它提供了一种对接收到的每一小块数据执行函数的方法。

import pycurl, json

STREAM_URL = "http://chirpstream.twitter.com/2b/user.json"

USER = "YOUR_USERNAME"
PASS = "XXXXXXXXX"


def on_receive(self, data):
    self.buffer += data
    if data.endswith("rn") and self.buffer.strip():
        content = json.loads(self.buffer)
        self.buffer = ""

        if "text" in content and content['user'] == 'justinbieber':
            print u"0[user][name]: 0[text]".format(content)

conn = pycurl.Curl()
conn.setopt(pycurl.USERPWD, "%s:%s" % (USER, PASS))
conn.setopt(pycurl.URL, STREAM_URL)
conn.setopt(pycurl.WRITEFUNCTION, on_receive)
conn.perform()

您可以在这里找到更多信息Real time twitter stream api

【讨论】:

【参考方案3】:

如果我理解正确,您应该可以使用User Streams。

【讨论】:

除非我使用不正确,否则用户流也不适合我。例如,如果您在twitter.com/Walmart/with_replies 上查看沃尔玛的 Twitter 提要(由于支持查询而相当稳定),您会发现他们发给其他用户的推文不会显示在流中。我得到的唯一推文是@walmart 发布的不引用任何其他用户的推文。

以上是关于使用 Twitter 流 API,是不是可以只显示来自特定用户的推文?的主要内容,如果未能解决你的问题,请参考以下文章

Twitter API 流

使用 Python 从 Twitter 流 API 中提取特定的 JSON 字段

如何只接收时间戳、推文文本和帐户名称,而不是我在使用 twitter api 时收到的输出?

使用 Python Tweepy 的 Twitter 流 API

Twitter流API返回401

通过 API 刷新页面