みなさま、今日も楽しいMastodonライフをお過ごしでしょうか☕
本日は水瀬いのりさんが22歳のお誕生日です。
好きでしょうがない訓練された声優ヲタの皆さまは是非とも、オフィシャルファンクラブ「いのりまち」に入会申し込みしましょう☕(本日から受付開始のようです)
https://www.inorimachi.com/
ということでknzk.me Advent Calendar 2017サボりたかったのですが本題に入ります。
誰もが知ってると思われますが、9月に設立された限界インスタンス、通称「神崎丼」と呼ばれているインスタンス( https://knzk.me )では、Bot制限に関しては特に縛られていない自由な荒れ地にどんどん高層ビルを建てていく最先端で素敵な場所となっております。
なんとなくサブ垢は取ってみたものの使いみちがなく……そんな持て余した面白いIDを抑えた実にうらやましいみなさまに、**楽しい場所でBotを試運転してみよう!**という記事内容となっております。
今回使用するのは神崎丼出身から一筋のアイドル「こおり」さんの中身として知られる「Python」を使ってみましょう。バージョンは3を使用します。最新の3.6.3で問題ないので早速ダウンロードしてみましょう☕
https://www.python.org/downloads/
細かい導入の仕方などはググってみれば結構あるので分からなかったら頑張ってください。
無事に導入できた選ばれし人類の方は、次にモジュール「Mastodon.py」を導入しましょう。動かすためのAPIモジュールです。
https://github.com/halcy/Mastodon.py
上記に書いてる通り、プロンプトやターミナルなどを開いて
pip3 install Mastodon.py
これだけです。簡単ですね。(失敗したらpip3をpipにするなり頑張ってください)
では準備ができましたので、実際にBotを運用してみましょう。
もちろん、サブ垢用で登録したメールアドレス、パスワードは必須ですよ?
pyファイルを適当な名前で新規作成して、IDLEでエディタを開いてみましょう。Windowsでしたら右クリックからEdit with IDLE
を選択で起動できるかとおもいます。他の環境は知りません(丸投げ&後日記述)
これからAPIに繋げるためのトークンを取得するためにオーサライズします。
といっても、先ほどの上記のGithubリンクを見れば簡単にできちゃいますね。
英語が無理な人に向けて安易的に整頓すると、
from mastodon import Mastodon
# Register app - 一回だけで問題ないです。
url = 'https://knzk.me' #インスタンス先
Mastodon.create_app(
u'ラビットハウス', #クライアント名
api_base_url = url,
to_file = 'client.secret' #appを保存するファイル名になります
)
# Log in - ログイン処理をします。
mastodon = Mastodon(
client_id = 'client.secret',
api_base_url = url
)
mastodon.log_in(
'my_login_email@knzk.me', #メールアドレス
'password', #パスワード
to_file = 'user.secret' #ログイン用トークンを保存するファイル名になります
)
とまあ、こんな感じになります。IDLEでコードを書きましたら、ctrl+sで保存し、F5でシェル起動でプログラムが走るかと思います。
成功するとclient.secretとuser.secretのファイルができてるはずです。ここのファイル名はなんでもOKです。拡張子はtxt等でも余裕です。
ログイン認証ができましたらあとはAPI稼働のpyファイルですね。setup.pyと同じ場所でファイルを作成します。
そしてまた上記のGithub参考にすると簡易的なのは出来ます。tootするだけのプログラムにするには、
from mastodon import Mastodon
mastodon = Mastodon(
client_id = 'client.secret', #app情報
access_token = 'user.secret', #ログイントークン
api_base_url = 'https://knzk.me' #インスタンス名
)
mastodon.toot('こおりちゃんかわいい')
となります。するとLTL上に無事tootが成功するはずです。
もしWindowsのプロンプトから稼働する場合、コードに日本語が含まれますと文字コードエラーが起こることがありますので気をつけてください。(例えばprintで日本語を表示させるなどです)
慣れるまではIDLEで簡単に動かしましょう。
APIを通してtootするだけなら出来ますが、まだこれでは自動的にtootしてくれませんね。
そんなときこそ「StreamingAPI」を駆使してtootしてもらいましょう。
魔法の簡単なコードを作成しちゃいますと、
from mastodon import *
import time, re, traceback
url_ins = 'https://knzk.me'
mastodon = Mastodon(
client_id='client.secret',
access_token='user.secret',
api_base_url=url_ins)
class res_toot(StreamListener):
def on_update(self, status):
content = status["content"]
if re.compile("コーヒーひとつ").search(content):
post = 'どうぞ☕'
time.sleep(3)
mastodon.status_post(status=post, visibility="public", in_reply_to_id=None, spoiler_text=None)
class bot():
def _init_(self):
pass
def t_local():
try:
listener = res_toot()
mastodon.local_stream(listener)
except:
print("例外情報\n" + traceback.format_exc())
pass
if __name__ == '__main__':
ltl = threading.Thread(target=bot.t_local)
ltl.start()
となります。
これでローカルタイムラインに流れるtootの内容に「コーヒーひとつ」の文字列があると3秒後に「どうぞ☕」を空リプしてくれる簡易Botさんの完成です。
うまく行けたらBot使いの第一歩となります。
今回は簡単なBotの動作についてですが、Mastodon.pyの仕組み、もしくはMastodonのAPIの仕組みを理解できましたらもっと複雑なことも可能となります。
応用の仕方、及びStreamingクラスなどの解説などはまた後日改めて説明するとしましょう。
今日はみなさまお疲れ様でした。ちなみに行き詰まりましても責任や質疑応答、レスポンスなどの助言は面倒なのであまり期待しないでください。それでは楽しいひととき、Mastodonライフをお楽しみください。またのお越しをお待ちしてます☕