0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VRChat WebSocketAPI ではじめるフレンド監視

Posted at

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を必ず確認してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?