Python を使って、画像を添付したステータス「Hello, Mastodon!」を Mastodon へ投稿する方法を紹介する。
Mastodon.py のインストール
Python で Mastodon にメッセージを投稿するには Mastodon.py
というパッケージを使用する。Python から Mastodon API に簡単にアクセスするためのツールである。
このパッケージは pip を使ってインストールできる。
pip install Mastodon.py
Mastodon.py を使って画像を添付したステータスを Mastodon へ投稿する
以前、さくさんは Pawoo
を使用していたが、運営会社の移管や2023年2月のTwitterでの大規模なアカウント凍結事案により、サーバーが過負荷になり、タイムラインがまともに読めなくなってしまった。そのため現在では Fedibird
を主要なサーバーとして使用している。
この例では api_base_url
に https://fedibird.com
を指定しているが、皆さんが利用しているサーバーのAPIベースURLに変更して欲しい。
import os import sys from mastodon import Mastodon access_token = 'アクセストークン' client_id = 'クライアントID' client_secret = 'クライアントシークレット' api_base_url = 'https://fedibird.com' mastodon = Mastodon( access_token=access_token, client_id=client_id, client_secret=client_secret, api_base_url=api_base_url ) # 引数から画像を含むディレクトリのパスを取得する image_dir_path = sys.argv[1] # 画像をアップロードする media_ids = [] for filename in sorted(os.listdir(image_dir_path)): if filename.endswith('.png') or filename.endswith('.jpg'): file_path = os.path.join(image_dir_path, filename) media = mastodon.media_post(file_path) media_id = media['id'] print(f"アップロードしたファイル: {file_path}, メディアID: {media['id']}") media_ids.append(media_id) # 画像のアップロード後、すぐにステータスを投稿しようとするとステータスコード 422 が返ってくるので10秒待機 time.sleep(10) status = 'Hello, Mastodon!' mastodon.status_post(status=status, media_ids=media_ids, visibility='public')
ターミナルで、アップロードしたい画像ファイルが入っているディレクトリパスを指定して実行しよう。
python post_media_mastodon.py /Users/ch3cooh/Desktop/images/20230412