Ich hab den ganzen Ablauf mal in Python gebastelt. Der funtkioniert auch soweit. Bis es darum geht, die Userliste zu bekommen.
import requests
import json
# Auth-Secret-Stuff. (In diesem Forum zensiert, aber trotzdem erkennbar)
secrets = {
"client_id": "g12************************so0",
"client_secret": "cpr************************8up",
"moderator_oauth": "oauth:hco************************3h2",
"moderator_id": 698000000, # Letzten 6 ziffern genullt ;D
}
# moderator_id ist der user, dem auch client_id und client_secret in der dev-console gehört.
# oauth-token ist gültig und korrekt
def convert_get_data_to_string(get_data):
params = []
for key, value in get_data.items():
if isinstance(value, list):
for item in value:
params.append(f"{key}[]={item}")
else:
params.append(f"{key}={value}")
return '?' + '&'.join(params)
def get_user_data(target_broadcaster):
# Get Data for getting a access token
get_data_1 = {
"client_id": secrets["client_id"],
"client_secret": secrets["client_secret"],
"grant_type": "client_credentials",
"scope": ["moderator:read:chatters",]
}
# Post-Data for getting a access token
post_data_1 = {
"oauth": "bearer " + secrets["moderator_oauth"]
}
# Target Url build up with get data for oauth2/token
target_url = "https://id.twitch.tv/oauth2/token" + convert_get_data_to_string(get_data_1)
# Call the api
auth_credentials = requests.post(target_url, data=post_data_1)
auth_credentials = auth_credentials.json()
# For Debug purposes
print(auth_credentials["access_token"])
# Header for User-List-Request
headers = {
"Client-Id": get_data_1["client_id"],
"Authorization": "Bearer " + auth_credentials["access_token"]
}
# Get Data for User-List-Request
get_data_2 = {
"broadcaster_id": target_broadcaster,
"moderator_id": secrets["moderator_id"],
"first": "1000"
}
# Target Url build upo with get data for chat/chatters
target_url = "https://api.twitch.tv/helix/chat/chatters" + convert_get_data_to_string(get_data_2)
# Call the API
response = requests.get(target_url, headers=headers)
# Return the result
return response.json()
# Call get_user_data for specific channel (it works with capital letters)
response_data = get_user_data("Mindconstructor")
# Output the result
print("Server-Response:", response_data)
Führe ich das (mit korrekten secret-daten natürlich) aus, erhalte ich
Server-Response: {'error': 'Unauthorized', 'status': 401, 'message': 'Missing User OAUTH Token'}
WO soll da der oauth-token hin? Ich habs im GET und im Header probiert. Versuch ich mit POST den request für die User-Liste zu machen, erhalte ich
Server-Response: {'error': 'Not Found', 'status': 404, 'message': ''}
Bitte, wo liegt mein Fehler? (Ja. Ich schreib das grad in Python, weils so einfacher war, mal fix Requests zu testen. Mein NodeJS-Script werde ich dann auf Basis dieser Infos anpassen. Und ja, ich weiß, dass ich auch oauth2/validate nutzen müsste und so … soweit ich das in den docs verstanden hab)
Es muss doch möglich sein, diese user-liste zu bekommen. die GANZE ZEIT hats funktioniert. Ohne zu zucken … Und plötzlich, von heute auf morgen, gehts nicht mehr … <_<