ご注文はMastodonBotですか? メディア投稿編


本日誕生日を迎えた記念としてPythonの「Mastodon.py」を使用したAPIで動くBotを作りましょうシリーズを気まぐれに掲載開始です。

簡易的な導入についてはありふれてますので小難しい話題からになってしまいます。

メディア投稿をしてみましょう☕

ということでメディアの投稿形式Botさんを作ってみましょう。

from mastodon import *
import io, sys

#プロンプト起動向けの処理です。
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,
                              encoding=sys.stdout.encoding,
                              errors='backslashreplace',
                              line_buffering=sys.stdout.line_buffering)

# instanceのアドレス入力をお願いします 例:https://knzk.me
url_ins = open("instance.txt").read()

# クライアントID、アクセストークン取得については
# グーグル先生に聞けば分かりますので割愛します。頑張ってください。
mastodon = Mastodon(
    client_id='client.secret',
    access_token='user.secret',
    api_base_url=url_ins)

"""ここまでがログイン処理のテンプレートです"""

def main():
    # メディア投稿の処理
    # media_post(self, media_file, mime_type=None, description=None)
    media = []  #media_idsはリスト指定になります。
    media.append(mastodon.media_post('test.png'))  # 要素追加の形でmedia_postします。
    print(media)  # png投稿の一例です。
    txl = " ".join(x['text_url'] for x in media)  #生成した短縮URLを繋ぎます。
    post = "メディアテストです" + txl  # くっつけます。
    # status_post(self, status, in_reply_to_id=None, media_ids=None,
    #             sensitive=False, visibility='', spoiler_text=None):
    """status=toot文章 in_reply_to_id=返信宛 media_ids=メディアデータ(ここにメディア情報のリストを入れます)
       sensitive=画像を隠すかどうかです, visibility=公開範囲, spoiler_text=CWで畳むかどうかです"""
    return mastodon.status_post(post, media_ids=media, visibility='unlisted')  # ポストします☕

if __name__ == '__main__':
    main()  # 上記に書いた命令を関数にして実行です!

このようなコードになるかと思います。

メディア投稿の解説☕

メディアは4つまでアップロードすることが出来ますので、リストを生成してappend形式で追加するのが望ましいかと思われます。
media_postでメディアをアップロードした後に、データ情報がdict型で生成されます。'text_url'キーに短縮URLがありますので、POST内容が空にならない対策に便利ですね。

以上となります。 いかがでしたでしょうか?

内容が短いですが、画像を投げるBotシステムが欲しかった人の参考になれたらと思います。これをきっかけに、面白く愛嬌のあるBotさんが生まれることを願っております。
qiitaを始めたきっかけとなりました、神崎おにいさん率いるMastodonのアドベントカレンダーに参加しております(担当の仕事はもう終わりました)。日々進化する世紀末な最先端に興味がある方は、ぜひともknzk.meに来てみてください。
それではMastodonライフをお楽しみください。またのお越しをお待ちしております☕