VRChat websocket-API ではじめるフレンド監視
いやいや、良くないですよ。
ブラウザで「VRChat API」と検索するとHTTP APIに関する記事がいくつかヒットしますが、WebSocketAPIに関する記事は少ないです。
イベントまでの時間で簡単に紹介したいと思います。
何ができるのか
一言で言うと「フレンドのログインやワールドの移動をリアルタイムで監視」ができます。
本当にそれ以外の使い道がわかりません。
一応、自分自身の情報も取得できるため、VRChat上での軌跡を振り返ることができます。
監視の準備
実行環境は、Python 3.12です。
必要なライブラリはwebsocket-clientのみです。
(必要に応じてdotenv等もインストールして下さい。)
pip install websocket-client
準備で最も重要なのがVRChatの認証トークンです。
VRChatのウェブブラウザの開発者ツールなどを使用してauth_tokenを取得して下さい。
読み込み方法は任せますが、ここでは.envに記載しています。
AUTH_TOKEN="あなたの_vrchat_auth_token_をここに"
WebSocketAPIにつなぐPythonスクリプトはこれだけ。
from websocket import create_connection
from datetime import datetime
import json
import os
import dotenv
dotenv.load_dotenv()
auth_token = os.getenv('AUTH_TOKEN')
ws = None
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'
}
ws = create_connection(
f"wss://pipeline.vrchat.cloud/?authToken={auth_token}",
header=list(f"{k}: {v}" for k, v in headers.items())
)
print("WebSocket connection established.")
#受信したメッセージを表示
while True:
recv = ws.recv()
try:
# JSONとしてパースを試みる
data = json.loads(recv)
data['content'] = json.loads(data['content']) if isinstance(data.get('content'), str) else data.get('content', {})
print(f"Received at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}: {json.dumps(data, indent=2, ensure_ascii=False)}")
except json.JSONDecodeError:
print(f"Received non-JSON message: {recv}")
except Exception as e:
print(f"Error occurred: {e}")
finally:
if ws is not None:
ws.close()
print("connection close")
やってみよう
準備ができたら実行
python websocket-api.py
接続に成功したら「WebSocket connection established」と表示が出ます。
あとはVRChat内でフレンドがログインやワールドの移動をするたびにデータを受信します。
どんなメッセージが来るのか
VRChatからのメッセージはJSON形式で届きます。
これはフレンドがとあるワールドから移動した際に受信するメッセージの例です。
対象のユーザー名やワールドの名称を取得することができます。
Received at 2033-03-03 23:00:39: {
"type": "friend-location",
"content": {
"userId": "usr_hogehogehogehoge",
"platform": "standalonewindows",
"location": "traveling",
"travelingToLocation": "wrld_hogehogehoge",
"worldId": "wrld_hogehogehoge",
"canRequestInvite": false,
"user": {
"id": "usr_hogehoge",
"displayName": "カリフォル大好き子",
"userIcon": "",
"bio": "無言勢",
...
注意
VRChat WebSocket APIに関する詳細は、コミュニティ作成の非公式ドキュメントであるVRChat WebSocket API Community Hubをご覧ください。
また、API周りのガイドラインとしてCreator Guidelinesを必ず確認してください。