X(twitter) APIで遊んでみる2025年版

# はじめに
こちらの記事は」X API(twitter API)で遊んでみたという記事になります
遊んでみたといっても、かなり昔に利用していたこともあるので最近はどのような更新がされているか、どんなAPIが存在しているかなどを中心に調べてみた内容をまとめようと思います

# まとめた内容
## X API v2というものが出来上がっていた
こちらはタイトルの通り、以前使用できていたv1は廃止されてv2への移行が促されていました
(廃止されたといっても一部の基本的な機能はまだ使用できそうな雰囲気もありました)
これは以前作成していたアプリ、プロジェクトが全く動かなくなっていそうですね

後半でマイグレーションを行ってみようと思います

## v1と同じようなAPI機能を使用したい場合、お金がかかる
これも結構な痛手です
v1の時は特に料金などはかからなかったはずですが、、

プランとしては「Pro」「Basic」「Free」の3つありました
最低でも月額$175払わなければこれまで使用していた機能を完全に利用するということはできなさそうです

実際に何のAPIは使えるかをあとで確認してみます

![スクリーンショット 2025-03-15 16.08.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701238/7be7cf59-d93b-4e15-962f-4ad38ae7214e.png)

# ということで
軽く調べた限りでも以下の2点を先に調べなければならない状況なので、ここからはそちらを調べていきます

1. v1からv2への移行
1. FreeプランではどのようなAPIが利用可能なのか

## 1. v1からv2への移行
当初はアクセスキーやアプリの新規作成などが必要かと思っていましたが、認証方式がBearer Token方式になっておりました

Bearer Tokenの発行についてはアプリ・プロジェクト管理画面から確認することができました
下記画像の「Bearer Token」というところですね
忘れずメモしておきましょう(再作成や無効化できますが忘れると大変なので)


![スクリーンショット 2025-03-15 16.25.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701238/b79d6aca-693c-4d8a-aad5-c7846c84401d.png)

次にメモしたトークンを使用して認証を試みてみます
認証については以下のAPIのようです

```sh
curl 'https://api.x.com/2/usage/tweets' --header 'Authorization: Bearer XXXXX'
```

実行してみると以下の結果に
なにやらリクエストが通っていないような感じですね、403です

```sh
{
  "client_id": "xxxxxxx",
  "detail": "When authenticating requests to the Twitter API v2 endpoints, you must use keys and tokens from a Twitter developer App that is attached to a Project. You can create a project via the developer portal.",
  "registration_url": "https://developer.twitter.com/en/docs/projects/overview",
  "title": "Client Forbidden",
  "required_enrollment": "Appropriate Level of API Access",
  "reason": "client-not-enrolled",
  "type": "https://api.twitter.com/2/problems/client-forbidden"
}
```

そこでよくよく調べてみるとプロジェクトの設定が消えている or 新規で作成しないといけない模様でした
参考にさせていただいた内容は[こちら](https://ntwmachine.com/twitter-api-v2)

プロジェクトの設定を一通り完了させた後に再度curlでAPIを実行すると
今度はリファレンスにある通りのレスポンスが確認できるようになりました！！

```sh
{
  "data": {
    "cap_reset_day": 19,
    "project_cap": "xxx",
    "project_id": "1234567890",
    "project_usage": "0"
  }
}
```

ここまで確認できれば、次に書こうとしているAPIを試してみるフェーズに進めると思います

## 2. FreeプランではどのようなAPIが利用可能なのか
ということでここからは実際にAPIを実行してみたいと思います

postのidから特定のpostの内容を取得するエンドポイントを実行してみます

```sh
curl "https://api.twitter.com/2/tweets?ids={取得したいpostのid}" -H "Authorization: Bearer XXXXX"
```

例えばで取得した内容はこちらになります

```sh
{
  "data": [
    {
      "text": "breakfast snack wraps when? https://t.co/sfxQNidl1H",
      "edit_history_tweet_ids": [
        "1895134475698262296"
      ],
      "id": "1895134475698262296"
    }
  ]
}
```

取れないと思っていましたが取れましたね、、
よくよく確認してみると先ほど貼ったプランの画像の下のほうにリクエストできるものとレートリミット書いてありました

![スクリーンショット 2025-03-15 17.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701238/e4f7c3dd-41d2-44b2-ad6a-d47122495f05.png)

先ほど実行したエンドポイントなどはFreeプランだとレートリミットが1リクエスト/15分という何ともシビアな設定になっていました

昔は3,000件ぐらい取れていた気もします

APIを調べるのは以下のリンクで生成してくれるのでおすすめかと思います
https://developer.x.com/apitools/api

「GET /2/tweets/search/all」や「GET /2/tweets/search/stream」に❌がついていたのでこういうものは使えなくなりましたということですね

# おわりに
ということで、X APIについて調べてみたという記事になります
v1がいつの間にか廃止されていたり、利用プランが課金になっていたり、レートリミットが厳しくなっていたりと段々と肩身が狭くなっているのを感じました

また、普段から敏感になっておかないとAPIの進化についていけなくなることも実感しましたので、これからはその辺りの情報もキャッチできるように工夫が必要だなと思いました