VRChat APIを使ってフレンドのステータス一覧をNode.jsで取得する
はじめに
VRChatのAPIは、有志により非公式に仕様が公開されています。
VRChatのAPIを利用することで様々な操作を行うことができます。
ドキュメントがありますが、ネットに公開されている情報だと、つまづくポイントが多数だったため、この記事を備忘録とします。
なお、あくまで非公式に公開されているAPIのため、この記事の実行は完全に自己責任で行ってください。
検証環境
- Node.js v18.14.2
- M1 MacBook Air(2020)
やり方
作業用ディレクトリーの作成
作業用のディレクトリーを作成し、移動します。
mkdir vrchat_api
cd vrchat_api
Node.jsの環境整備
npm init
で必要な情報を入力します。
※ 試したいだけなら全部Enterでいいです。
そしてnpm install
でnpmパッケージをインストールしてください。
npm init
npm install axios@0.26.1 axios-cookiejar-support@4.0.6 dotenv vrchat
なお、axios
関連のパッケージのインストールで脆弱性の表示が出ますがvrchat
のnpmパッケージとの相性問題の都合上、古いaxios
をインストールする必要があるためです。
そのため、本コードの実行は実験用に留め、外部に公開する等は避ける必要があります。
.envファイルの設置
基本的に、VRChatのAPIの利用にはIDとパスワードが必要です。
ソースコード内に書くのは望ましくないので、.env
ファイルをディレクトリー内に設置します。
username
とpassword
はご自身のものに置き換えてください。
VRCHAT_USERNAME=username
VRCHAT_PASSWORD=password
JavaScriptファイルの設置
以下のファイルを設置しましょう。
なおapplication/1.00 user@example.com
はテスト用に書かれたUser-Agentです。
ここに正しい情報を入力するのはVRChatのAPIを利用する際のルールのようなものなので、アプリケーション名やメールアドレスを正しいものに置き換えてください。
const axios = require("axios");
const vrchat = require("vrchat");
const readline = require("readline/promises");
const tough = require("tough-cookie");
require("dotenv").config();
async function main() {
// VRChatのAPIを叩くために必要なヘッダーを設定する
const axiosConfiguration = axios.create({
headers: {
"User-Agent": "application/1.00 user@example.com",
},
});
// クッキーを有効にする
axios.defaults.withCredentials = true;
const SystemApi = new vrchat.SystemApi(
undefined,
undefined,
axiosConfiguration
);
// APIキーを取得してクッキーに保存する
const config = await SystemApi.getConfig();
axios.defaults.jar.setCookie(
new tough.Cookie({ key: "apiKey", value: config.data.apiKey }),
"https://api.vrchat.cloud",
{},
function () {}
);
const configuration = new vrchat.Configuration({
username: process.env.VRCHAT_USERNAME,
password: process.env.VRCHAT_PASSWORD,
apiKey: config.data.apiKey,
});
const AuthenticationApi = new vrchat.AuthenticationApi(
configuration,
undefined,
axiosConfiguration
);
const user = await AuthenticationApi.getCurrentUser();
// 2FAが有効な場合は2FAコードを入力する
if (!user.id) {
// 2FAコードをコンソールから入力する
const readInterface = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const code = await readInterface.question(
"2段階認証アプリから6桁のコードを入力してください: "
);
readInterface.close();
// 2FAコードを入力してログインする
await AuthenticationApi.verify2FA({ code: code }, axiosConfiguration);
}
// VRChatのフレンドリストを取得する
const FriendsApi = new vrchat.FriendsApi(
configuration,
undefined,
axiosConfiguration
);
const friends = await FriendsApi.getFriends(
0,
undefined,
true,
axiosConfiguration
);
console.log(friends);
}
main();
Node.jsの実行
先程のJavaScriptファイルを実行します。
2段階認証を設定している場合は、2段階認証の認証コードを入力してください。
❯ node index.js
2段階認証アプリから6桁のコードを入力してください:
フレンドの状態がコンソールに一覧で表示されます!!
あとはデータを加工して、自分の好きなように調整してください。
お疲れ様でした!!!
Discussion