MisskeyでアプリからAPIトークンを取得して投稿するまで

##はじめに
他にMisskeyでアプリのAPIを使って投稿する記事が見つからなかったので、備忘録として上げておきます。

##環境
Ubuntu 19.10
Missleyのインスタンス めいすきー[(https://misskey.m54.net/)](https://misskey.m544.net/)

##注意
筆者はめいすきー[(https://misskey.m54.net/)](https://misskey.m544.net/)で投稿していますが、自分でAPIトークンを取得する場合はこのURLを自分のmisskeyのインスタンスのURLに適宜置き換えて下さい。
(以降はめいすきーのURLを用いて説明します。)
##1, アプリを登録する

[https://misskey.m544.net/dev/apps](https://misskey.m544.net/dev/apps)
上記のリンクにアクセスし、「アプリ作成」をクリック
![Screenshot from 2020-04-19 18-17-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330578/e5ccb3b8-03b2-ed2b-fc6d-afcd37f69055.png)


アプリケーション名、アプリの概要を入力し、「投稿を作成・削除する」にチェックを入れて「アプリケーションの作成」ボタンをクリックしてください。
![Screenshot from 2020-04-19 19-22-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330578/e25d4594-2a0d-d481-11f1-23a67f809335.png)

![Screenshot from 2020-04-19 19-22-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330578/74a868d4-78b4-0237-1273-402596bb8006.png)


アプリを作成すると、先程作成したアプリが表示されているはずなのでアプリの名前をクリックします。
![Screenshot from 2020-04-19 19-23-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330578/190656cc-1365-3205-7f7f-a0c49d09dfab.png)

クリックするとアプリのシークレットキーが取得できます。このシークレットキーは後で使用するのでメモしておくとよいです。
![Screenshot from 2020-04-19 19-26-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330578/5303792f-153f-bcf4-579c-0a75c27e8e16.png)

##2, アプリを認証する
アプリを認証するためには、[https://misskey.m544.net/api/auth/session/generate](https://misskey.m544.net/api/auth/session/generate)に先程取得したシークレットキーを使ってリクエストを送信します。
筆者はcurlを使用しました。JSON形式でPOSTが出来たらなんでもいいと思います。

```
curl -X POST -H 'Content-Type:application/json' -d '{"appSecret":"<シークレットキー>"}' https://misskey.m544.net/api/auth/session/generate
```
リクエストを送ると、認証用のトークンとURLが取得出来るので、認証用のURLにアクセスします。
認証用のトークンはこの後に使用します。
![Screenshot from 2020-04-19 19-17-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330578/5ba61cf3-056f-e6d9-47c9-868733d02f4c.png)
アクセスを許可を選択します。


##3, APIトークンを取得する
[https://misskey.kurume-nct.com/api/auth/session/userkey](https://misskey.kurume-nct.com/api/auth/session/userkey)に先程使用したシークレットキーと、先程取得した認証用のトークンを使用して、リクエストを送ります。

```
curl -X POST -H 'Content-Type:application/json' -d '{"appSecret":"<シークレットキー>, "token":"<認証用のトークン>"}' https://misskey.m544.net/api/auth/session/userkey
```

リクエストに成功すると、レスポンスの中に、"accessToken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"とアクセストークンが返ってきているはずです。
このアクセストークンを先程のシークレットキーを連結し、sha256と呼ばれるハッシュ関数でハッシュ化することで、ようやくAPIトークンが取得できます。
(以下のコマンドで取得できます)

```
$ export accesstoken="<アクセストークン>"
$ export secretkey="<シークレットキー>" 
$ echo -n $accesstoken$secretkey | shasum -a 256
```


##4, 投稿する
いよいよAPIトークンを用いて投稿を行います。方法は非常にシンプルです。
[https://misskey.m544.net/api/notes/create](https://misskey.m544.net/api/notes/create)
上記のURLにAPIトークンを投稿したい文章を載せてリクエストを送ります。

```
curl -X POST https://misskey.m544.net/api/notes/create -d '{"i":"<APIトークン>","text":"hogehoge"}'
```

成功すると、以下のように文章が投稿出来ているのが確認できるはずです。
![Screenshot from 2020-04-19 19-53-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330578/6c9a2ad5-7c84-519c-211d-27742505ecfb.png)

以上で投稿完了です。お疲れ様でした。

##参考にした記事
https://misskey.kurume-nct.com/api-doc
https://blog.jnsk.info/post/174592458087/misskey%E3%81%AEapi%E3%82%92%E5%8F%A9%E3%81%84%E3%81%A6%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B