访问 Twitter 数据:API/Cursor(Twitter 用户)与流媒体(hash_tag_list)

Accessing Twitter Data: API/Cursor (twitter user) vs Streaming (hash_tag_list)

我正在研究访问 Twitter 数据的代码。该代码是由展示如何访问 youtube 中的 Twitter 数据的人编写的。

请看下面的代码(部分被截断):

from tweepy import API 
from tweepy import Cursor
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
 
import twitter_credentials
import numpy as np
import pandas as pd

class TwitterClient():
    def __init__(self, twitter_user=None):
        self.auth = TwitterAuthenticator().authenticate_twitter_app()
        self.twitter_client = API(self.auth)
        self.twitter_user = twitter_user
    def get_user_timeline_tweets(self, num_tweets):
        tweets = []
        for tweet in Cursor(self.twitter_client.user_timeline, id=self.twitter_user).items(num_tweets):
            tweets.append(tweet)
        return tweets        

class TwitterAuthenticator():
    def authenticate_twitter_app(self):
        auth = xxxx
        return auth

class TwitterStreamer():
    """
    Class for streaming and processing live tweets.
    """
    def __init__(self):
        self.twitter_autenticator = TwitterAuthenticator()    
    def stream_tweets(self, fetched_tweets_filename, hash_tag_list):
        # This handles Twitter authetification and the connection to Twitter Streaming API
        listener = TwitterListener(fetched_tweets_filename)
        auth = self.twitter_autenticator.authenticate_twitter_app() 
        stream = Stream(auth, listener)

        # This line filter Twitter Streams to capture data by the keywords: 
        stream.filter(track=hash_tag_list)


class TwitterListener(StreamListener):
     xxxxxxx

if __name__ == '__main__':

    hash_tag_list = ["donal trump", "hillary clinton", "barack obama", "bernie sanders"]
   
    twitter_client = TwitterClient('COVID19')
    print(twitter_client.get_user_timeline_tweets(1))
    twitter_streamer=TwitterStreamer()    
    twitter_streamer.stream_tweets(      
    fetched_tweets_filename, hash_tag_list)

从代码中,我想知道为什么要创建两个classes TwitterClient() 和TwitterStreamer()TwitterStreamer() 适用于 hashtag 列表,而 TwitterClient()user specific。这是否意味着 TwitterStreamer() 更像是大规模搜索,而 TwitterClient() 更针对特定用户。为什么要把他们一分为二?为什么只对 hashtags 使用 TwitterStreamer() class?

有人可以对这段代码发表评论吗,因为我是 Twitter 数据探索的新手。

非常感谢

这里的简短回答是,这两个不同的 classes 正在访问不同的端点 - 也就是说,它们正在提取不同的数据。

TwitterClient() 的魔力发生在 get_user_timeline 部分。这是数据收集发生的地方。此方法访问 user_timeline 端点,该端点迭代地提取最多 3,200 条推文(从该用户的最新推文开始,及时向后推)。

TwitterStreamer() class 具有 stream_tweets 方法,该方法使用行 stream.filter(track=hash_tag_list) 访问 Twitter 的过滤器端点。这只会提取包含您传递给它的主题标签(或许多其他过滤器 - 例如单词、短语、用户)的推文,并且它是实时进行的。也就是说,您会在发送推文时收到推文,而不是及时返回以获取已发布的内容。