導入
個人開発でX APIを使ってみたので実装方法を共有します。
自分の使い方としては、cronなどのスケジューラーと合わせて新コンテンツの紹介を夜8時とかに自動投稿されるようにしています。
手動で最初はやっていたが面倒で続けられなかったので、X APIを利用するようにしてみました。
※本記事はX APIの使い方のみで。スケジューラーの紹介はしていないです
プラン
投稿メインなら無料プランでも十分使える。有料プランは高額
- 無料プラン
- 100読取/月
- 500投稿/月
https://docs.x.com/x-api/introduction
x developer potalで登録
実際に利用する手順を説明していく。
以下URLにアクセス。basicとproの有料プランが大きく表示されるが、よく見ると下に「Sign up for Free Account」があるのでこちらから無料プランの登録ができる
https://developer.x.com/en/portal/petition/essential/basic-info
「XのデータとAPIのすべてのユースケースを説明してください」というフォームを入力する
こちらは250文字以上で入力が必要。X APIの利用ケースを教えてchatGPTに英語で作成してもらうのがオススメ
送信したら登録完了。最初は審査があるのかと思ってたが、すぐにAPI利用できた。
簡単な動作確認 ~ユーザー情報の取得
Bearer Tokenの作成
Projects & Apps > サイドバー一番下のappを選択 > Keys and tokens > Bearer Token
任意のAPIクライアントツールでBearer Tokenを設定する
postmanの例ではAuthorizationタブで以下のようにBearer Tokenを設定する
クエリ
以下のクエリでパスに任意のユーザーidを指定することで、そのユーザー情報を取得できる
https://api.x.com/2/users/by/username/:user
投稿方法
投稿権限の付与
Projects & Apps > サイドバー一番下のappを選択 > Settings > User authentication settings
投稿ができるようにApp permissionsをRead and writeに変更して保存
キー作成
Access Token and SecretとOAuth 2.0 Client ID and Client Secretの4つ必要
Projects & Apps > サイドバー一番下のappを選択 > Settings > Keys and tokens
環境変数の場合.envファイルに以下のように用意しておく
TWITTER_API_KEY=
TWITTER_API_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=
コード記述
今回はTypeScriptでライブラリはnode-twitter-api-v2を使用
https://www.npmjs.com/package/twitter-api-v2
他言語のライブラリなどは以下参照
https://docs.x.com/x-api/tools-and-libraries/overview#javascript-node-js-/-typescript
以下の処理をスケジューラーと組み合わせることで定期的な自動投稿などが可能になります。
単純な投稿
import { TwitterApi } from 'twitter-api-v2'
// Twitter APIクライアントを作成
const client = new TwitterApi(
{
accessSecret: env.TWITTER_ACCESS_TOKEN_SECRET,
accessToken: env.TWITTER_ACCESS_TOKEN,
appKey: env.TWITTER_API_KEY,
appSecret: env.TWITTER_API_SECRET,
}
).readWrite
await client.v2.tweet({
text: 'ツイート内容',
})
メディア添付
// 画像をアップロード
const mediaId = await client.v1.uploadMedia('./image.png')
// 画像を指定してツイートを投稿
const tweet = await client.v2.tweet({
media: {
media_ids: [mediaId]
},
text: 'ツイート内容',
})
リプライツイート
const tweet = await client.v2.tweet({
text: 'ツイート内容',
})
await client.v2.tweet({
reply: {
in_reply_to_tweet_id: tweet.data.id,
},
text: 'リプライツイート内容',
})
その他ドキュメント参照
他にも色々できるのでドキュメント参照ください
v1:https://github.com/plhery/node-twitter-api-v2/blob/master/doc/v1.md
v2:https://github.com/plhery/node-twitter-api-v2/blob/master/doc/v2.md







