我目前正在使用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:
我想做的是什么? @justinbieber只是一个高开销的Twitter账户的一个例子。我想使用此代码来检索许多高开销帐户的推文,从而提高速度,并且能够查看每个用户的每条推文都是需求。
答案 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()
找到更多信息
答案 2 :(得分:-1)
如果我理解正确,您应该可以使用User Streams。