如何查询从Twitter流API获取所有转发?

时间:2015-08-28 15:08:18

标签: mongodb twitter

我创建了一个流API来捕获帐户中的所有转推。我将所有结果保存在Mongodb中。

这是代码

class StdOutListener(StreamListener):

    def on_data(self, data):
        mydata = json.loads(data)
        db.raw_tweets.insert_one(mydata)
        return True

    def on_error(self, status):
        mydata = json.loads(status)
        db.error_tweets.insert_one(mydata)


if __name__ == '__main__':

    #This handles Twitter authetification and the connection to Twitter Streaming API
    l = StdOutListener()
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    stream = Stream(auth, l)

    #This line filter Twitter Streams to capture data by the keywords: 'python', 'javascript', 'ruby'
    stream.filter(follow=['121817564'])

我相信我几乎抓住了所有东西。 Twitter上有一条推文5000k转推的推文,但当我在MongoDb上查询时,我只收到1,300条记录。我不确定我是否遗漏了什么?我不希望获得完全相同的数字,但至少它应该足够接近。

这是我在MongoDB中使用的查询。

db.getCollection('raw_tweets').find({'retweeted_status.id_str':'636345902915911680'}).count()

也许我的查询不正确以获得所有转推?

1 个答案:

答案 0 :(得分:1)

您的mongoDB查询对我来说没问题。 现在丢失转推的原因可能有很多:

  • twitter streaming api 保证您将获得过滤器中指定的每条推文,您应该检查Twitter返回的限制消息,以检查您是否遗漏了一些推文。
  • 您在代码中提供的过滤器用于关注用户而不是“跟踪”关键字过滤器。
  • 很可能您缺少在开始跟踪之前创建的转推。 (流式传输api不会发送超过您所说的时间创建的推文)。