追記(2019/1/25)
VRChat APIを使うためのPythonパッケージ vrchat-api-python を公開しました。
内部的に以下で書かれている処理を行っています。
注意
この記事で使用しているVRChat APIの仕様は非公式なドキュメント (https://vrchatapi.github.io/) に基づくものです。
私が調べた限りではVRChat公式
- https://vrchat.net
- https://vrchat.com
- https://docs.vrchat.com/docs
- https://medium.com/@vrchat
- https://vrchat.groovehq.com/help_center
では存在自体が言及されておらず、一般ユーザがVRChatクライアントやVRCSDK以外の手段でアクセスすることが容認されているかどうかは不明です。
一応、APIの仕様について中の人が言及していることもあるので完全にブラックというわけではないようですが、下記のコードを実行する際はアカウントの停止措置等のリスクを承知の上でサーバに無理をかけない範囲で行ってください。
背景
VRChatでオンラインなフレンドを確認する場合は
- VRChatクライアント内でフレンド画面を開く
- 公式ページ にログインする
方法がありますが、この記事ではスクリプト的に確認する方法としてPythonでVRChatのAPI (以下VRChat API) を叩いてみます。
VRChat APIでは以下の手順を踏んでフレンドやインスタンス等の情報にアクセスします。
-
https://api.vrchat.cloud/api/1/config
をGETしてapiKey
を取得 (以下すべてのアクセスにapiKey
パラメータを使用) -
https://api.vrchat.cloud/api/1/auth/user
をGETしてauthToken
を取得 (VRChatのユーザ名・パスワードでBasic認証を行う) -
apiKey
,authToken
をパラメータとして目的のAPIにアクセス
201/7/8追記:
2.について、ドキュメントではauthToken
がレスポンスとして返ってくると書いてありますが、返り値に含まれなくなったようです。代わりに同じものをCookieから取り出すことができます(以下を参照)。
以下はこれらの実行例です。
apiKey
の取得
import json
import requests
API_BASE = "https://api.vrchat.cloud/api/1"
url = "{}/config".format(API_BASE)
response = requests.get(url)
apiKey = json.loads(response.text)["clientApiKey"] # 2018/6/16時点で "JlE5..." みたいなのが返ってくる
authToken
の取得
from requests.auth import HTTPBasicAuth
USER = "your-user-name"
PASSWORD = "your-password"
url = "{}/auth/user".format(API_BASE)
response = requests.get(url,
params={"apiKey": apiKey},
auth=HTTPBasicAuth(USER, PASSWORD))
# token = json.loads(response.text)["authToken"] # "authcookie_[UUID]" みたいなのが返ってくる
token = response.cookies["auth"] # (API変更のためCookieからauthTokenを取得、2018/7/8追記)
フレンド一覧の取得
url = "{}/auth/user/friends".format(API_BASE)
response = requests.get(url,
params={"apiKey": apiKey, "authToken": token})
friends = json.loads(response.text)
for f in friends:
print(f["displayName"]) # オンラインなフレンド一覧を表示
この他にもワールドやワールドインスタンスの情報も取得できるため、「多くのフレンドが集まっているワールドを一覧表示」といったことも可能です。