LoginSignup
6
3

More than 1 year has passed since last update.

VRChatのログイン監視体制を作る①

Last updated at Posted at 2021-05-22

概要

友達を監視する機能を作りたかった
(VRChatの公式にて様々なAPI機能が公開されており、それを活用した何かを触ってみた)

以上

本記事について

本機能は現在開発中だが、とりあえず元となるオンライン、オフラインを検知するソースができたので。
また、こちらは別用途にて利用できると感じたため、記事にしてみた。

通知機能は後日、、、、、、、

注意点

API使用の際にはサーバーに負担を掛けないよう心掛けること
APIの不正使用などでアカウントが停止された場合自己責任となりますのでご了承ください

VRChatのAPI接続方法

以下に載っています。

情報を取得する場合はapiKeyauthTokenが必要で
apikeyは上記にべた張りされてます。

authTokenの取得は以下コードのようにVRChatのID/PWによる基本認証が必要です。
・・・・・多要素認証を行っている場合は分からないです。

AuthTokenGet.py
username = "VRCのID"
password = "VRCのpassword"
apiKey   = 'JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26'# 21/05/22 時点で公開されているキー
data     = {'apiKey':apiKey}
headers  = {'User-Agent': 'SunaFH/1.0.5'}

response = requests.get('https://api.vrchat.cloud/api/1/auth/user', data=data, headers=headers, auth=username,password)
authToken= response.cookies["auth"]

フレンドリストの取得

現在オンラインになっているフレンドリストを取得する場合は、
https://api.vrchat.cloud/api/1/auth/user/friendsGETすれば情報が取得できます。
例)

response = requests.get('https://api.vrchat.cloud/api/1/auth/user/friends', data=data, headers=headers, params={"authToken": authToken})

以下が取得できる情報一覧です

・id
・username
・displayName
・currentAvatarImageUrl
・currentAvatarThumbnailImageUrl
・fallbackAvatar
・userIcon
・profilePicOverride
・last_platform
・tags
・developerType
・status
・statusDescription
・friendKey
・last_login
・isFriend
・location

多い

ただ、今回利用する値は名前なのでdisplayNameを使いました。

監視ユーザーの管理

変更する可能性はありますが、
今回は以下のようにページ上で簡単に追加、除外できるようにしました。

2132312312.PNG

捗るね!!

通知機能

通知の部分は開発次第「VRCにてログイン監視体制を作る②」にて公開予定です

今回のコードについて

通知部分まで作成次第全量githubに上げますが、
オンラインになっているフレンドに特定のフレンドが含まれているかの確認部分だけ記載します

import requests
import json
from urllib.parse import quote
from sys import exit
from datetime import datetime

# 監視するユーザーリストを取得
user_file = open("online_player_list.txt", mode='r',encoding='utf-8')
user_data = user_file.read()
user_file.close()
low_user_data = eval(user_data)

# 既にオンラインで通知を送っているユーザーリスト
on_user_file = open("tmp_players.txt", mode='r',encoding='utf-8')
on_user_data = on_user_file.read()
on_user_file.close()
if on_user_data == "":
    on_low_user_data = []
else:
    on_low_user_data = on_user_data.split(",")
write_tmp = 0

username = "VRCのID"
password = "VRCのpassword"
apiKey = 'JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26'# 21/05/22 時点で公開されているキー
data = {'apiKey':apiKey}
headers = {'User-Agent': 'SunaFH/1.0.5'}

# APIにてフレンドリストを取得

response = requests.get('https://api.vrchat.cloud/api/1/auth/user', data=data, headers=headers, auth="username","password")
token = response.cookies["auth"]

response = requests.get('https://api.vrchat.cloud/api/1/auth/user/friends', data=data, headers=headers, params={"authToken": token})
moderations = response.json()

write_online = []
write_offline = []
moderations_filtered = []

for i in (list(moderations)):
    moderations_filtered.append(i['displayName'])
for a in moderations_filtered:
    if a in low_user_data:
        if a not in on_user_data:
            write_online.append(a)
            write_tmp = 1

# 繰り返して既に報告したリストへ入力する
on_low_user_data.extend(write_online)
remove_list = []

for i in on_low_user_data:
    if i in moderations_filtered:
        pass
    else:
        #print(i)
        remove_list.append(i)

# 既にログアウトしている人をオンラインリストから除外
print(type(remove_list))
if len(remove_list) >= 1:
    for i in range(len(remove_list)):
        on_low_user_data.remove(remove_list[i])

with open("tmp_players.txt", "w",encoding='utf-8') as opfile:
    opfile.write(",".join(on_low_user_data))

終わりに

ストーカー行為はやめようね

参照

6
3
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
6
3