X(Twitter)の内容から、特定のワードが投稿された回数を調べるプログラムを作りました。

目的は、推し(真野あゆみさん)が「すわほー」と言っている回数を調べたかったからです。

ちなみに「すわほー」は、ヤクルトスワローズが勝ったときに叫ぶ言葉です。

 

プログラムはChatGPTに色々と相談しながら作りました。

やっぱ優秀ですよ、こいつは。

その手順とプログラムの内容を残しておきます。

 

Xが無料アカウントの場合は、直近100件分までしか取得できないのでご注意ください。

また、時間当たりのアクセス数もかなり制限されており、気軽に何度も動作確認できないのが非常に面倒でした。

 

まずはXの開発者アカウントを作り、APIキーを取得する必要があります。

そのAPIキーを用いて、Pythonでプログラムを作成します。

 

準備する情報は3つ

  • XのAPIキー
  • 調べたいXのアカウント名(@は不要)
  • 調べたいワード

 

APIキー取得の具体的な方法は、
  • X Developer Portal にアクセス

  • Sign in」から自分の Xアカウントでログイン

  • 初めての場合、「Apply for a developer account(開発者アカウントを申請)」が表示されます

  • 指示に従って以下を入力します:

    • 用途(Hobby or Academic)

    • どんなアプリケーションを作りたいか(英語で簡単に「I want to fetch tweets from a specific user and count keyword appearances.」などと書けばOK)

  • 承認後、「Projects & Apps」→「Overview」 に移動
  • + Create App」または「Create Project」ボタンを押す
  • 以下を入力:
    • アプリ名(例: SuwahoCounter

    • 用途説明(簡単に「Keyword counter for specific tweets」など)

  • 作成が完了すると、「App Settings」画面が開きます
  • アプリ詳細ページにて「Keys and tokens(鍵とトークン)」タブをクリック

  • Bearer Token」という項目が表示されるので「生成 / Regenerate」をクリック

  • 表示された文字列が BEARER_TOKEN に入れるトークンです

APIキーは一度しか表示されないので、必ずどこか安全な場所にコピペして保存してください。

 

APIキーが取得出来たら、下記のプログラムに書き込んでください。

環境によっては、requestsのインストールをする必要があるかもしれませんので、必要に応じて

pip install requests

を実行してください。

 

import requests

import time

 

# ご自身の Bearer Token をここに貼り付けてください

BEARER_TOKEN = "(ここにAPIキーをコピペ)"

USERNAME = "(Xのアカウント名)"

KEYWORD = "(調べたいワード)"

 

def get_user_id(username):

    url = f"https://api.twitter.com/2/users/by/username/{username}"

    headers = {"Authorization": f"Bearer {BEARER_TOKEN}"}

    response = requests.get(url, headers=headers)

    response.raise_for_status()

    return response.json()["data"]["id"]

 

def count_keyword_in_tweets(user_id, keyword):

    url = f"https://api.twitter.com/2/users/{user_id}/tweets"

    headers = {"Authorization": f"Bearer {BEARER_TOKEN}"}

    params = {

        "max_results": 100,

        "tweet.fields": "text",

        "exclude": "replies,retweets"   #リプライ、リツイートはカウントしない

    }

 

    response = requests.get(url, headers=headers, params=params)

   

    if response.status_code == 429:

        print("レート制限に達しました。しばらく待ってください。")

        return -1  # エラーとして返すなどの処理

 

    response.raise_for_status()

    data = response.json()

 

    count = 0

    for tweet in data.get("data", []):

        if keyword in tweet["text"]:

            count += 1

 

    return count

 

if __name__ == "__main__":

    try:

        user_id = get_user_id(USERNAME)

        keyword_count = count_keyword_in_tweets(user_id, KEYWORD)

        print(f"アカウント @{USERNAME} が「{KEYWORD}」と投稿した回数: {keyword_count}回")

    except Exception as e:

        print("エラーが発生しました:", e)

 

このプログラムは、リプライ、リツイートを除いた直近100件分を調べる内容になっています。

これ以上調べたい場合は有料アカウントに登録する必要があります。

 

429というエラーコードがよく出ると思うのですが、それは「リクエストが多すぎる」というエラーです。

少し待ってから実行してみましょう。

無料アカウントの場合はすぐに月間の上限に達してしまうので、そちらにひっかかっている場合は翌月まで待つか、キーを再発行すればいけるかもしれません。

 

うまく動いた結果がこちら。

 

結果をcsvに保存したり、定期的に実行したりもできます。

うまくいったら、また記事にしたいと思います。