marimomo
@marimomo (momo chloe)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Twitter APIのclient.get_all_tweets_countのtimezone設定について

解決したいこと

python,tweepyを使用してTwitterAPIの学術利用をしています。
指定期間に指定した検索ワードで1日何件のツイートがあるのか、client.get_all_tweets_countを利用して取得しましたが、すべてUTC時間でカウントされています。日本時間で1日ごとのツイートカウント数を取得する場合は、以下のコードをどのように変更すれば良いでしょうか。

tweepy.version'4.10.0'
python'3.8.9

発生している問題・エラー

コードは機能しますが、UTCで返されます。

該当するソースコード

import pandas as pd
import tweepy

tweet_counts = []
client = tweepy.Client("my token key",wait_on_rate_limit=True )
for response in tweepy.Paginator(client.get_all_tweets_count,
                                 query= ['検索ワード   -is:retweet lang:ja'],
                                 granularity = 'day',
                                 start_time = '2021-09-28T00:00:00Z',
                                 end_time = '2022-05-02T00:00:00Z'):
    print(response)
    tweet_counts.append(response)

自分で試したこと

start_time,endtimeのZを+9:00など日本時間に変更しましたが、開始時間と変更時間を日本時間にするのではなく、tweet countを日本の1日ごとにカウントしたいため、どうすれば良いか困っています。
tweepy, twitter developerサイトを確認しましたが、client.get_all_tweets_countにtimezoneを設定する方法の記載がありません。
初心者のため、このような質問で恐縮です。よろしくお願いいたします。

0

1Answer

granularity = 'hour' にして、レスポンスを日本時間の日付ごとに集計すればいいと思います。

import pandas as pd
import tweepy
from datetime import datetime, timezone, timedelta

tweet_counts = {}

for response in tweepy.Paginator(client.get_all_tweets_count,
                                 query= ['検索ワード   -is:retweet lang:ja'],
                                 granularity = 'hour',
                                 start_time = '2021-09-28T00:00:00Z',
                                 end_time = '2022-05-02T00:00:00Z'):
    for item in response.data:
        # item['start'] に文字列が入っている想定でパースしていますが、試していません
        # datetime オブジェクトが入っていたらそのまま使ってください
        start_utc = datetime.strptime(item['start'], '%Y-%m-%dT%H:%M:%S.000%z')

        start_jst = start_utc.astimezone(timezone(timedelta(hours=9)))
        date = start_jst.date()
        tweet_counts[date] = tweet_counts.get(date, 0) + item['tweet_count']

ちなみに

start_time,endtimeのZを+9:00など日本時間に変更しましたが

についてですが、

によればZで終わる形式しか受け付けないようです。

0Like

Comments

  1. @marimomo

    Questioner

    教えていただきありがとうございます。昨晩実行しますと、日本日時で取得することが出来ました。大変助かりました。また、developer siteについてもありがとうございます。理解できていなかったみたいです。重ねてありがとうございます。

Your answer might help someone💌