VRChat의 로그인 감시 체제 구축 ①

5535 단어 VRPythonVRChat

개요


나는 친구를 감시하는 기능을 세우고 싶다
(VRChat의 공식은 다양한 API 기능을 공개하고 그것을 활용한 무언가를 만져보았다)
보다 크면 같음

본 보도에 관하여


이 기능은 현재 개발 중이지만 우선 원래의 온라인, 오프라인의 출처를 검출할 수 있다.
또 이곳은 다른 용도로 사용할 수 있을 것 같아 보도를 시도했다.
알림 기능 후,,,,,

주의사항


API를 사용할 때 서버에 부담을 주지 않도록 주의하십시오.
API 부정 사용 등으로 계정이 정지되면 본인의 책임임을 양해 부탁드립니다.

VRChat의 API 연결 방법


아래에 게재하다.
정보를 얻으려면 apiKeyauthTokenapikey 위에 붙인다.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
・curentAvatarThumbnailImageUrl
・fallbackAvatar
・userIcon
・profilePicOverride
·last_platform
・tags
・developerType
・status
・statusDescription
・friendKey
·last_login
・isFriend
・location
많다
하지만 이번에 사용한 값은 이름displayName이다.

모니터링 사용자 관리


변경 가능성이 있다
이번에는 아래와 같이 페이지에서 간단하게 추가, 제외할 수 있습니다.

진전이 있군!!

알림 기능


공지된 부분은 개발 후 "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))

끝날 때


스토커 하지 마세요.

인용하다

좋은 웹페이지 즐겨찾기