Mastodon.pyを使ってPythonからトゥートする
Twitter API有料化に伴い、個人で動かしているTwitter Botの運用継続が難しくなりそうなので、Mastodon APIのPythonラッパーであるMastodon.pyを使ってMastodonへのPythonによるToot実装を試してみました。
環境構築
Python環境の構築
Pythonの開発環境が構築できていない場合、以下の記事を参考に環境構築を行なって下さい。
Mastodon.pyをインストール
pipからMastodon.pyをインストールします。
pip install Mastodon.py
Mastodonアカウントの取得
Botとして運用するためのMastodonアカウントを用意します。
ここで一点注意点があるのですが、Mastodonインスタンスによって利用規約が異なり、Botの運用を制限されていたり運用ルールが定められている場合があります。
インスタンスの利用規約を熟読した上でBot用アカウントを作成すると良いでしょう。
例えば、日本最大のインスタンスであるmstdn.jpでは2023年2月4日現在、Bot運用ルールが以下のように定められています。
・Publicな投稿をしないこと(Unlisted, Private, Directを使ってください)
・能動的に他のアカウントをフォローしに行かないこと
・フォローしていない人のトゥートを自動でお気に入り登録したり、リプライを飛ばしたりしないこと
理由などについても利用規約に記載されていますので、是非一度ご一読ください。
利用規約を読んで用途や運用方法的に問題がなさそうであれば、アカウントを作成しましょう。
Mastodonアカウントの公開範囲の設定
アカウントが作成できたら、Mastodonアカウントの設定を変更します。
ユーザー設定/その他
の設定項目を開き、投稿の公開範囲
を変更します。
初期設定では公開(public)
になっているので、利用規約に基づいた設定に変更します。
例えばmstdn.jpの場合、Unlisted, Private, Directを使ってください
という規約になっているため、未収蔵(unlisted)
以下の公開レベルに設定します。
Mastodonアカウントで新規アプリの登録
MastodonのAPIからアカウントを操作するために、アプリの登録を行います。
設定画面の左メニューから、開発
の項目を選択します。
すると新規アプリ
ボタンが表示されるので、ここを押してアプリの名前や権限の種類などを設定します。
設定が完了すると、
・クライアントキー
・クライアントシークレット
・アクセストークン
が表示されるので、これらの文字列をどこかに保存しておきましょう。
実装前に必要な事前準備は以上になります。
実装
それでは、実装を進めていきます。Mastodon.py公式のドキュメントはこちら。Usage
の項目に従って実装していきましょう…と言いたいところですが、公式ドキュメント通りにcreate_app
メソッドを実行するとインスタンスによってはRequest Errorが発生することがあります。
これは、インスタンスによってUserAgent次第でRequestを弾いているのが原因のようです。
一応、Mastodon.py側でもこちらの問題は認識されていて現在対応プルリクが出ているようです。
とはいえ、create_app
メソッドを実行することは実はMastodonの自動トゥートを行うにあたり必須ではないので、公式ドキュメントのUsage
は一旦ガン無視して実装を進めることとします。
初期化からトゥートまで
それでは、初期化からトゥートまでのコードを書いてみます。
Web側でアプリを作成済みであれば、create_app
を使用する必要はありません。
create_app
を使用しなければ、前述のUserAgentにおける諸問題は回避することができます。
環境構築の際に用意した
・クライアントキー
・クライアントシークレット
・アクセストークン
をクラスインスタンス生成時に引数で指定して、あとはtoot
メソッドを呼ぶだけで任意のテキストをトゥートすることができます。
from mastodon import Mastodon
# 初期化
api = Mastodon(
api_base_url = 'マストドンインスタンスのURL(例:https://mstdn.jp)',
client_id = 'Webでアプリ登録時に発行されたクライアントキー',
client_secret = 'Webでアプリ登録時に発行されたクライアントシークレット',
access_token = 'Webでアプリ登録時に発行されたアクセストークン'
)
# トゥート
api.toot('Hello World')
以上です。
Mastodon.pyを使用するにあたってのつまづきポイントは主にcreate_app
に集約されると思いますので、それを回避して初期化さえ正常に出来てしまえば、大体のメソッドは実行可能と思います。
あとは、公式ドキュメントに記載のAPI METHODSを参考に色々と試してみてください。
Discussion