1

ストリーミング API を使用して特定のユーザーを追跡し、すべてのツイートとリツイートを取得しています。ただし、私が知る限り、ストリーミング API には表示されないため、リツイートのリツイートをキャプチャする方法はありません。たとえば、私はユーザー A を追跡しています。ユーザー B は A のつぶやきをリツイートします。ストリーミング API はそれをキャプチャできます。ただし、ユーザー C が B のタイムラインから興味深いものを見つけてリツイートをクリックした場合、ストリーミングではそれをキャプチャできません。

statuses/retweetsAさんのツイートからBさんがリツイートしたツイートのIDでAPIを使ってみたところ、空になってしまいました。それで、とにかくリツイートのリツイートを取得できるかどうか疑問に思っています。

私が今抱えている問題は. A のツイートは 5,000 のリツイートを取得しますが、ユーザーが A のツイートから直接リツイートするため、ストリーミング API は 1,000 しかキャプチャしないとします。ただし、残りの 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 つの方法でそれを行うことができます。

(2) の場合、C が B のつぶやきをリツイートするのは、あたかも A のリツイートであるかのようになります。A のリツイート数が更新され、ストリーミング API で取得されます。

ただし、(1) の場合、ツイートを見て C が B をフォローしている場合、C は 2 つの方法でリツイートできます: (1.1) C が B からのツイートをリツイートするだけの場合、A のツイート数は更新されず、ストリーミング API は(1.2) C が A のメッセージをクリックしてそれをリツイートすると、(2) の場合と同じになります。

したがって、問題が A ツイートのリツイート数と一致することだけである場合、問題はリツイートのリツイートではなく、ストリーミング API の制限になります。ただし、ケース (1.1) のようにリツイートを取得したい場合は、その答えがありません。

それが役に立てば幸い。

于 2015-09-03T09:49:09.563 に答える