1

我正在使用 Streaming API 来跟踪特定用户以获取所有推文和转推。但是,据我所知,没有办法捕获转推的转推,因为它不会出现在流 API 上。例如,我正在跟踪用户 A。用户 B 转发了 A 的任何推文,流式 API 将能够捕捉到它。但是,如果用户 C 从 B 的时间线中看到任何有趣的内容并单击转推,则流媒体无法捕获该内容。

我尝试使用statuses/retweetsAPI 与 B 从 A 的推文转发的推文的 id 并显示为空。所以,我想知道是否无论如何我都可以获得转发的转发。

我现在遇到的问题是。假设 A 的推文获得 5k 转发,但流 API 仅捕获 1K,因为用户直接从 A 的推文转发。但是,其余 4K 转推来自 A 的追随者,流媒体无法捕捉到这一点。

这是我的流式 API 代码。

#!/usr/bin/env python
#Import the necessary methods from tweepy library
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import json
from pymongo import MongoClient

from sweepy.get_config import get_config

config = get_config()

MONGO_URL = config.get('MONGO_URL')
MONGO_PORT = config.get('MONGO_PORT')
MONGO_USERNAME = config.get('MONGO_USERNAME')
MONGO_PASSWORD = config.get('MONGO_PASSWORD')

connection = MongoClient(MONGO_URL, int(MONGO_PORT))
db = connection['tweets']

  # MongoLab has authentication
db.authenticate(MONGO_USERNAME, MONGO_PASSWORD)

#Variables that contains the user credentials to access Twitter API
consumer_key = config.get('STREAM_TWITTER_CONSUMER_KEY')
consumer_secret = config.get('STREAM_TWITTER_CONSUMER_SECRET')
access_token = config.get('STREAM_TWITTER_ACCESS_TOKEN')
access_token_secret = config.get('STREAM_TWITTER_ACCESS_TOKEN_SECRET')

#This is a basic listener that just prints received tweets to stdout.
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'])
4

1 回答 1

0

这不是一个答案,但评论太长了......

您的问题中有一些我不理解的东西,也许不太好:我要说明的是,如果来自 A 的推文获得 5k 次转发,则流式 API 可能会全部获得(但实际上你会得到一个样本,这也取决于你的端点、认证状态等)。

让我们看看:如果 B 转发 A,可以通过两种方式(1)发布新文本和(2)不发布任何内容,只是转发。

在情况 (2) 中,任何 C 转推 B 的推文就好像它是 A 的转推一样:A 的转推计数已更新,您将在流 api 中得到它。

然而,在情况(1)中,如果 C 正在关注 B 看到推文,C 可以通过 2 种方式转发:(1.1)如果 C 只是转发来自 B 的推文,则 A 的推文计数不会更新,流媒体 API 也不会明白了,但是 (1.2) 如果 C 点击 A 消息并转发该消息,那么它就像案例 (2)。

因此,如果您的问题只是与一条推文的转发数量一致,那么问题将不是转发的转发,而是流媒体 API 的限制。但是,如果您想像(1.1)一样获得转发,我对此没有答案。

希望能帮助到你。

于 2015-09-03T09:49:09.563 回答