NovelAIをコンソールから操作するための第一歩
NovelAIのUIが気に食わなければ自作すれば良いじゃない。
…と思ったわけではないけど、NovelAIのAPIを操作してみたいなと思ったので、そのためにやったことをメモしてみた。
APIの仕組み
一般的な話として、APIにアクセスする際にはユーザー認可の仕組みとしてトークンを利用することが多い。JWTと呼ばれるトークンを取得して、APIのリクエストヘッダに設定して送信することで、API側(サーバ側)で「このリクエストは、どのユーザーが送ってきたものなのか?」「このリクエストは偽装されたものではないか?」といった内容を検証する。
NovelAIの場合は、"/user/login"というエンドポイントを用意しており、このAPIに適切なリクエストを送信すると、"accessToken"というものを取得できる。トークンを取得できれば、例えば画像生成用のAPIにアクセスし、生成した画像を取得することができる。
アクセスキー…?
早速NovelAIのページを開き、ログイン時にコールされているAPIをChromeのDevToolで調べてみる。…すると、早速つまずく。
確かに"/user/login"というエンドポイントにアクセスしているのだが、リクエストボディに設定された"key"なるものが、何なのか分からない。
{"key":"VU0HpXSCypP9epHk2y38VjNkzJZBpK1FoGuy50WyLg40QwjMqIgoO_xpMBQPyzrY"}
ユーザーIDとパスワードから生成した文字列であることは間違いないだろうが、正体が分からない(なお、上記文字列は適当に入力したIDとパスワードから生成されたものなので、解読しても私のアカウント情報は引っこ抜けません)。
早々に挫折しそうになったところで、何やらGithubで"NovelAI API"なるものを公開している方を発見。
本当は自力で全部やりたかったが、ここはぐっと堪えてライブラリを活用させていただく。
インストール
$ pip install novelai-api
使い方
たったこれだけ。
from novelai_api.utils import get_access_key
def get_access_key(username, password):
access_key = get_access_key(username, password)
取得したアクセスキーを使ってcurlしてみる。
$ curl https://api.novelai.net/user/login -X POST -H 'Content-Type:application/json' -d '{"key":"{取得したキー}"}'
{
"accessToken": "{アクセストークン}"
}
取得できた。
これでやっとNovelAIのAPIにアクセスできる。
なお、先程紹介したNovelAI APIライブラリを使えば、画像生成なども実行できそう。…だが、自力でNovelAI APIの動きを見ながら色々試すつもりなので、今のところキー取得以外では活用する予定は無い。
備考
アクセスキーの生成方法も、ライブラリのソースを見ればたぶん分かるのだろうが、あまりやる気が起きないので先送りする。
この記事が気に入ったらサポートをしてみませんか?