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の動きを見ながら色々試すつもりなので、今のところキー取得以外では活用する予定は無い。

備考

アクセスキーの生成方法も、ライブラリのソースを見ればたぶん分かるのだろうが、あまりやる気が起きないので先送りする。

この記事が気に入ったらサポートをしてみませんか?