mo4jiから始めるMisskey時報Botの作り方 上編
この記事はぼすきーアドベントカレンダー12/18の記事です。
はじめに
「もう4時か......」
なぜか特定の時間に一斉にもう4時かと投稿するユーザーたち。
ノリで作ったらいつのまにか根づいてしまったもう4時か。今回はこれを例にMisskeyにおけるbotの作り方を説明していきます。
本記事はぼすきーアドベントカレンダーの記事です。また初心者を想定して書いているので冗長な部分があります。ご了承ください。
用意するもの
- Postman(などhttpリクエストを送信するためのソフト)
- 何かしらのプログラミング言語の知識
- AWSアカウント
1 Botを作ろう
1.1 WebAPIとは何か?
「Botを作るって何を.....何をすれば良いんだ?」
まず、Misskeyの通信を見てみましょう。通信はブラウザの開発者ツールなどで見ることができます。
この画面はFirefoxですが大体どのブラウザでも同じ感じだと思います
この200とか204とかの行一つ一つが送信したリクエストです。
MisskeyのAPIはWebAPIと呼ばれるAPIの一種で、HTTPリクエストを要求すると結果がjsonで応答されるというシステムです。
HTTPリクエストとは何か......を語ると記事一本では終わらなくなるので、なんか1つの通信で何かの結果が一つ返ってくる、みたいな認識で大丈夫です。
MisskeyはAPIフレンドリーで、大抵のことはAPIから操作できます。非公式クライアントはこのAPIを呼ぶようにできていますし、公式(Misskeyサーバーから配信されるWebページ)も同じAPIを呼びます。
そしてこの一覧がmisskey-hubにまとめられています。
これらはそれぞれ「操作したいこと」のためのURLの後半部分です。このURLの後半部分をエンドポイントと呼びます。
例えばnotes/createは、ノートの作成のエンドポイントです。
そして、通信を監視しながらノートを投稿すると、こんな感じの通信が発生します。
https://voskey.icalo.net/api/notes/create
を呼び出している図
前半部分がサーバーのアドレス、apiを挟んで後半にエンドポイントを持ってきます。
つまりBotを作るには、このAPIのエンドポイントにHTTPリクエストを要求すればよいのです。
1.2 実践
「オーケーわかった......じゃあそのHTTPリクエストとやらはどうやって?」
はじめは
を要求してみましょう。HTTPリクエストを要求するソフトは色々ありますが(頑張ればブラウザでもできます)、私はPOSTMANをお薦めしています。
開くとこんな感じになります。newを押して......
HTTPを押して......
こんな感じの画面になります。
misskeyでは[アドレス]/api/[要求するAPIエンドポイント]
の形式で呼ぶので、例えばhttps://misskey.io/api/ping
のようなアドレスにします。
次にHTTPリクエストの種類(メソッド)です。GET
、POST
、PUT
、DELETE
など色々ありますが、misskeyAPIを呼ぶ場合はPOST
にします。
ちなみにブラウザで開く場合はGET
の要求がされています。
次に、パラメータを書きます。
pingのパラメータはないので、
Bodyを選択→rawを選択→textをjsonに変更して
{}
を入れます。
こんな感じで結果が返って来れば成功です。
1.2.1 自分探し
次にiを呼んでみます。
さっきと同じ方法でできる......と思いきや。
クレデンシャル必須
このAPIにはクレデンシャルと呼ばれる認証情報が必要です。
設定からAPIトークンを発行します。
このトークンは絶対に公開しないでください。
さて、Misskeyのクレデンシャルは、jsonにi
の項目に含めます。[1]
{
"i":"XXXXXXXXXXXXXXXXXX"
}
1.3 Botを作る
まず作りたいBotがどういう動作をするか考えます。
ここではノートを投稿するBotにします。
ノート投稿するエンドポイントを探して......
必要なパラメータは鍵と本文、権限。これをJSONフォーマットに入れて送信します。権限はホーム以下にした方がよいでしょう。
これをPOSTMANなどでHTTPリクエストをテストして......
投稿ができたらこれをプログラムにします。
一般的に使用されるプログラミング言語であればHTTPリクエストの送受信ができると思うので作ります。
私はpythonで書きました。
TOKEN = "XXXXXXXXXXXXXXXX"
data = {'visibility': 'home', 'text': "もう4時か", 'i': TOKEN}
response = requests.post(
'https://voskey.icalo.net/api/notes/create',
headers={'Content-Type': 'application/json'},
data=json.dumps(data))
なお、ループを挟んでHTTPリクエストを呼ぶ場合必ず1秒以上のsleepやwaitを入れましょう。
最悪の場合、BANや警察のお世話になる可能性があります。
さて、プログラムが完成したら実行して......
完成!
次章!定期実行する方法!たぶん明日(12/19)上がります!!
-
この仕様はここに記述されています。
https://misskey-hub.net/docs/api/ ↩︎
Discussion