2015-09-02 11 views
0

Я использую Streaming API для отслеживания конкретного пользователя, чтобы получить все твиты и ретвиты. Однако, насколько я знаю, нет способа захватить ретвиты ретвитов, поскольку он не появляется в потоковом API. Например, я отслеживаю пользователя A. Пользовательский ретранслятор любого из твитов A, потоковый API сможет его захватить. Однако, если пользователь C видит что-то интересное с временной шкалы B и щелкает ретвит, потоковая передача не может его захватить.Как захватить ретвиты ретвитов?

Я пробовал использовать API statuses/retweets с идентификатором чириканья, который был изменен из твита А, и он появляется как пустой. Итак, мне интересно, есть ли в любом случае, я могу получить ретвиты ретвитов.

Проблема, с которой я столкнулся сейчас. Предположим, что чириканье 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']) 

ответ

0

Это не ответ, но это слишком долго для комментария ...

Существует что-то я не понял ваш вопрос, может быть, это не совсем нормально: точка I «Я хочу сделать, что если твит из A получит 5k ретвитов, потоковая api может потенциально получить их все (но на практике вы получаете образец, в зависимости также от вашей конечной точки, статуса сертификации и т. д.).

Давайте посмотрим: если B retweets A, можно сделать это двумя способами (1) опубликовать новый текст и (2) ничего не публиковать, просто переадресовать.

В случае (2) любой твитт C retweeting B будет таким же, как если бы он был ретвитом A: счетчик retweet обновлен, и вы получите его в потоковой api.

Однако в случае (1), если C следит за B, как видит твит, C может отредактировать двумя способами: (1.1), если C просто перепродает твит из B, то количество твитов A не будет обновляться, а streaming api не получит его, но (1.2) если C нажимает на сообщение и ретвиты, то это точно так же, как и случай (2).

Итак, если ваша проблема заключается в том, чтобы быть сопоставимой с количеством ретвитов из твита, проблема не будет ретвитами retweet, а ограничениями потокового api. Однако, если вы хотите получить ретвиты, как в случае (1.1), у меня нет ответа на это.

Надеюсь, это поможет.