酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Mastodon .py を使って画像を添付したステータスを Mastodon へ投稿する

Python を使って、画像を添付したステータス「Hello, Mastodon!」を Mastodon へ投稿する方法を紹介する。

Mastodon.py のインストール

Python で Mastodon にメッセージを投稿するには Mastodon.py というパッケージを使用する。Python から Mastodon API に簡単にアクセスするためのツールである。

github.com

このパッケージは pip を使ってインストールできる。

pip install Mastodon.py

Mastodon.py を使って画像を添付したステータスを Mastodon へ投稿する

以前、さくさんは Pawoo を使用していたが、運営会社の移管や2023年2月のTwitterでの大規模なアカウント凍結事案により、サーバーが過負荷になり、タイムラインがまともに読めなくなってしまった。そのため現在では Fedibird を主要なサーバーとして使用している。

この例では api_base_urlhttps://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

関連記事