はじめに
iOS Osushi というものを何人かで運営しており、iOS 関連のことをまとめて記事にしています。
この記事は毎週作成されており、X でもポストするようにしているのですが、これを 自動化したい! というので、取り組んでみました。
案外面倒だったのと、別でも使いたいと思ったので、ある程度テンプレート化したいと思い記事にしました。
前提
X(Twitter) API が有料化して、v1.1 が廃止になりました。
以前のものは curl コマンドでサクッと試す、みたいなことができたのですが、認証周りが少し厳しくなりました。OAuth 1.0 は使えなくなり、OAuth 1.0a または OAuth 2.0 を使う必要があります。
この辺をまるっと考えたくないので、Python のライブラリを使って実装していきます。
セットアップ
1. X Developer Portal への登録とキーの取得
API を使うには開発者登録の申請が必要です。
申請といっても、申し込んだらすぐ使えるので審査とかはないです。
登録方法は、こちらの記事によくまとまっているので、こちらを参照してください。
記事にある通り、7つのキーを取得できますが、今回は5つを使用します。
- Consumer API Key
- Consumer API Secret
- Bearer Token
- Access Token
- Access Token Secret
これらをメモしておいてください。
1点注意点として、Access Token Secret
の権限に write
があることを確認してください。
これがないと権限不足で Xにポストされません 。
設定されていない場合は以下のように修正しましょう。
修正後は必ずトークンを再発行してください。
2. GitHub に環境変数を設定する
取得したキーを使うために、Actions を実行するリポジトリの設定画面で設定しましょう。
以下は登録例です。Name は GitHub Actions の yml から使用できるものなので、わかりやすいものを自分で設定しましょう。
リポジトリが非公開なのであれば、不正利用されたとしてもすぐにキーを再発行できるので、キーを直打ちでも大丈夫ですが、そんなに手間でもないのやっておくことをオススメします。
3. GitHub Actions の yml を設定する
とりあえず、最低限の動くものを置いておきます。
name: Create X Post
on:
workflow_dispatch:
permissions:
contents: read
jobs:
tweet:
runs-on: ubuntu-latest
environment: X_Automation
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install dependencies
run: |
pip install tweepy
- name: Post article
env:
X_API_KEY: ${{ secrets.X_API_KEY }}
X_API_KEY_SECRET: ${{ secrets.X_API_KEY_SECRET }}
X_BEARER_TOKEN: ${{ secrets.X_BEARER_TOKEN }}
X_ACCESS_TOKEN: ${{ secrets.X_ACCESS_TOKEN }}
X_ACCESS_TOKEN_SECRET: ${{ secrets.X_ACCESS_TOKEN_SECRET }}
X_POST_MESSAGE: "ポストする内容"
run: python tweet.py
以下、いくつか解説しておきます。
- workflow_dispatch でのトリガーを設定
これにすることで手動でのテストができます。
実際は main に merge されたら、などをトリガーにすると思いますが、開発の段階ではこれが便利です。
- 環境変数からキーを取得して Python で参照する
- name: Post article
env:
X_API_KEY: ${{ secrets.X_API_KEY }}
X_API_KEY_SECRET: ${{ secrets.X_API_KEY_SECRET }}
X_BEARER_TOKEN: ${{ secrets.X_BEARER_TOKEN }}
X_ACCESS_TOKEN: ${{ secrets.X_ACCESS_TOKEN }}
X_ACCESS_TOKEN_SECRET: ${{ secrets.X_ACCESS_TOKEN_SECRET }}
X_POST_MESSAGE: "ポストする内容"
run: python tweet.py
実際にポストをする Python 側でキーが必要になるので、参照できるようにする必要があります。最後に run で Python を実行しています。
- 注意点
環境に関して
environment: X_Automation
に関して
これは自身が GitHub 上で設定した環境名にすることを忘れないでください。
メッセージに関して
X_POST_MESSAGE
に関して
GitHub Actions で取得した値を使いたいので、X_POST_MESSAGE
というものを作って渡すようにしていますが、メッセージが固定なのであれば、これは特に必要ないです。
4. X へポストする Python コードの作成する
ネット上には、いろんな複雑なコードが載っていますが、最小限なものを記載しておきます。
import tweepy
import os
ck = os.environ['X_API_KEY']
cs = os.environ['X_API_KEY_SECRET']
bt = os.environ['X_BEARER_TOKEN']
at = os.environ['X_ACCESS_TOKEN']
ats = os.environ['X_ACCESS_TOKEN_SECRET']
content = os.getenv('X_POST_MESSAGE')
client = tweepy.Client(
bearer_token=bt,
consumer_key=ck,
consumer_secret=cs,
access_token=at,
access_token_secret=ats
)
client.create_tweet(text=content)
やっていることはこれだけです。
① GitHub Actions からキーを取得してセットする
② X にポストする
tweepy が便利すぎてありがたい...Python がわからなくても簡単に理解できると思います。
ファイルはディレクトリのルートにおいてください。その他の場所に設置する場合は、実行時のパスを変えてください。
ちなみに Python じゃなくてもこれは使えますので、探してみてください。
終わりに
権限周りと認証で上手く実行できず、最初は苦労しましたが、完成してみると簡単すぎて感動しました!
自分のメモ程度に書いていますが、この情報が誰かの助けになれば幸いですmm
その他
オススメの記事を置いておきます