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

时间:2013-12-31 23:56:30

标签: api twitter twitter-oauth twitter-streaming-api

我目前正在使用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”).

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

在任何人建议使用诸如status / user_timeline之类的东西之前,我知道它能够做我想要的,但是它有两个缺点让我继续使用流API:

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

我想做的是什么? @justinbieber只是一个高开销的Twitter账户的一个例子。我想使用此代码来检索许多高开销帐户的推文,从而提高速度,并且能够查看每个用户的每条推文都是需求。

3 个答案:

答案 0 :(得分:5)

使用json_decode后,您可以使用以下IF语句来确定它是什么类型的推文:

    // 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
    }

答案 1 :(得分:0)

我遇到了类似的问题,并使用我从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

找到更多信息

答案 2 :(得分:-1)

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