Tweepy V2 直近のツイート抽出

qiita.com

import pandas as pd
import tweepy

bearer_token = ""

client = tweepy.Client(bearer_token)

# サーチ件数(日別、時別、分別指定)
# granularity=minute, hour, day
res = client.get_recent_tweets_count("雪だるま -is:retweet", granularity="hour")

df_count = pd.DataFrame(res.data)

# 日時変換
df_count["start"] = pd.to_datetime(df_count["start"])
df_count["end"] = pd.to_datetime(df_count["end"])

# 型確認
df_count.dtypes

# 棒グラフ表示
df_count.plot.bar(x="start", y="tweet_count", figsize=(20, 5))

# 末尾20件
df_count.tail(20)

# 日時指定

se = df_count.loc[160]

start_time = se["start"].isoformat()
end_time = se["end"].isoformat()

# 日時指定サーチ

dfs = []
next_token = None
total = 0

# 最大件数
max_count = 1000

while True:

    tweets = client.search_recent_tweets(
        "雪だるま -is:retweet",
        start_time=start_time,
        end_time=end_time,
        expansions=["author_id", "referenced_tweets.id"],
        tweet_fields=["created_at", "referenced_tweets"],
        user_fields=["verified"],
        max_results=100,
        next_token=next_token,
    )

    # ツイート抽出
    df_data = pd.DataFrame(tweets.data)

    # ツイート発信者名抽出
    df_user = pd.DataFrame(tweets.includes["users"]).rename(columns={"id": "author_id"})

    # ツイートと発信者名を結合
    dfs.append(pd.merge(df_data, df_user, on="author_id"))

    n = tweets.meta.get("result_count", 0)
    next_token = tweets.meta.get("next_token")

    total += n

    # next_tokenがないか、件数が最大件数をオーバーすると終了
    if not next_token:
        break
    elif total >= max_count:
        break

# 結合
df0 = pd.concat(dfs)

# 行列確認
df0.shape

# 日本時間に変換
df0["created_at"] = df0["created_at"].dt.tz_convert("Asia/Tokyo")

# URL生成
df0["url"] = df0.apply(lambda d: f'https://twitter.com/{d["username"]}/status/{d["id"]}', axis=1)

df0.dtypes

# 最大件数に調整
df1 = df0.head(max_count).copy()

# 日付の昇順
df1.sort_values(by="created_at", inplace=True)

# indexリセット
df1.reset_index(drop=True, inplace=True)

df1