【问题标题】:How do I pull tweets from a user for specific dates on python? [duplicate]如何在 python 上从用户那里获取特定日期的推文? [复制]
【发布时间】:2021-05-23 21:27:19
【问题描述】:

我正在尝试从路透社 (@reuters) 推特帐户下载 2019 年 11 月的推文。

我在 python 上使用 tweepy,这是我的代码:

pip install tweepy
import tweepy as tw

#Keys
consumer_key = "..."
consumer_secret = "..."
access_token = "..."
access_token_secret = "..."

# Login
auth = tw.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tw.API(auth, wait_on_rate_limit=True)

#Get user's tweets
tweets = tw.Cursor(api.user_timeline,
                   id="reuters",
                   lang="en",
                   since="2019-11-01",
                   until="2019-11-30").items()

all_tweets = [tweet.text for tweet in tweets]

all_tweets[:100]

“直到”参数似乎不起作用,因为我的代码提取的推文包括最新的推文。

【问题讨论】:

    标签: python twitter tweepy


    【解决方案1】:

    tweepy 库目前仅支持 Twitter 较旧的standard search API,标准搜索仅涵盖 7 天的历史。为了早在 2019 年 11 月进行搜索,您需要使用高级完整存档搜索 API 或企业完整存档搜索。这些 API 都是商业的,但高级 API 有一个名为“沙盒”的免费层,它也可以工作。在 Python 中,您可以使用 search-tweets library

    另一个答案中提到的时间线方法也是一种选择,但它取决于 11 月的推文是否在时间线 API 的范围内,从今天开始最多支持 3200 条推文。

    【讨论】:

      【解决方案2】:

      以下是我们可以提取特定持续时间和特定用户的推文的两种简单方法。 解决方案 1:使用 TwitterAPI。 正如 andy_piper 所说,您需要高级或沙盒访问权限,高级帐户太贵了。除非您没有从 twitter 中提取大量语料库,否则拥有免费的沙盒帐户就绰绰有余了。您可以使用 https://developer.twitter.com/en/pricing/aaa-all 简单地启用沙盒帐户,这将使您能够以有限的请求访问存档。

      创建链接到您的推特帐户的开发环境标签:转到您的推特帐户中的开发环境并为沙盒创建相应的标签。 一旦你配置了标签。下面的代码将提取相应的推文。(相应地更改maxResults)

      from TwitterAPI import TwitterAPI
      Product = 'fullarchive'
      label = 'Dev'
      api = TwitterAPI(consumer_key, consumer_secret, access_token, access_token_secret)
      tweets = api.request('tweets/search/%s/:%s' % (Product, label),
      {'query' : 'from:reuters', 'maxResults': '10', 'fromDate':'201911010000', 'toDate':'201911300000'}) 
      
      for tweet in tweets:
        print(tweet['id'])
      

      解决方案 2:使用 GetOldTweet3 api,我不喜欢这种方式,因为不确定许可证,但它甚至没有 twitter 开发人员帐户,但对 twitter 的隐私政策有点怀疑,这是代码。

      import GetOldTweets3 as got
      username = 'reuters'
      count = 100
      tweetCriteria = got.manager.TweetCriteria().setUsername(username)\
                                          .setMaxTweets(count).setSince("2019-11-01")\
                                             .setUntil("2019-11-30")\
      tweets = got.manager.TweetManager.getTweets(tweetCriteria)
      for tweet in tweets:
        print(tweet.id,tweet.author_id,tweet.date)
      

      参考: https://pypi.org/project/GetOldTweets3/ https://github.com/geduldig/TwitterAPI/blob/master/examples/premium_search.py

      【讨论】:

      • 后者违反了推特的服务条款,最好使用官方API,否则你的IP地址可能会被屏蔽。
      • 谢谢,这成功了!可悲的是,它每月只允许提取 5K 条推文,但总比没有好......
      【解决方案3】:

      我有答案。如果不付费,您将无法做到这一点。

      【讨论】:

        【解决方案4】:
        import tweepy
        import csv
        import pandas as pd
        ####input your credentials here
        consumer_key = ''
        consumer_secret = ''
        access_token = ''
        access_token_secret = ''
        
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_token, access_token_secret)
        api = tweepy.API(auth,wait_on_rate_limit=True)
        
        # Open/Create a file to append data
        csvFile = open('tweets.csv', 'a')
        #Use csv Writer
        csvWriter = csv.writer(csvFile)
        
        # tracklist = ["Womens Day", "internationalwomensday", "internationalwomensday2021", "internationalwomensday21","women's day", "international women's day", "IWD", "womensday", "WomensDay", "HappyInternationalWomensDay","Happy Women's Day", "HappyWomensDay", "happywomensday", "happyinternationalwomensday", "Women", "women"]
        # tracklist = ''.join(str(e) for e in tracklist)
        # import pdb; pdb.set_trace()
        count = 0
        
        # for tweet in tweepy.Cursor(api.search,q="Womens Day OR internationalwomensday OR internationalwomensday2021 OR internationalwomensday21 OR women's day OR international women's day OR IWD or womensday OR WomensDay OR HappyInternationalWomensDay OR Happy Women's Day OR HappyWomensDay OR happywomensday OR happyinternationalwomensday OR Women OR women",count=10000,
        #                            lang="en",
        #                            since="2021-03-06", 
        #                            include_rts=False).items():
        #     print (tweet.created_at, tweet.text)
        #     csvWriter.writerow([tweet.created_at, tweet.text.encode('utf-8')])
        
        
        for tweet in tweepy.Cursor(api.search,q="Womens Day OR internationalwomensday OR internationalwomensday2021 OR internationalwomensday21 OR women's day OR international women's day OR IWD OR HappyInternationalWomensDay OR Happy Women's Day OR HappyWomensDay OR happywomensday OR happyinternationalwomensday",
                                   count=100000,
                                   include_rts=False,
                                   country_code=True,
                                   coordinates=True,
                                   lang="en",
                                   since="2021-03-06",
                                   until="2021-03-10"
                                   ).items():
            print (tweet.created_at, tweet.text)
            csvWriter.writerow([tweet.created_at, tweet.text.encode('utf-8')])
        

        【讨论】:

          猜你喜欢
          • 2015-07-07
          • 1970-01-01
          • 2011-12-24
          • 1970-01-01
          • 2014-02-19
          • 1970-01-01
          • 1970-01-01
          • 2021-09-15
          • 1970-01-01
          相关资源
          最近更新 更多