Skip to content

Instantly share code, notes, and snippets.

@scmanjarrez
Last active December 2, 2023 02:01
Show Gist options
  • Save scmanjarrez/78632ca7ab0802ca2df47353b3002627 to your computer and use it in GitHub Desktop.
Save scmanjarrez/78632ca7ab0802ca2df47353b3002627 to your computer and use it in GitHub Desktop.
genshin resin api
import hashlib
import time
import random
import string
import requests as req
salt = "6cqshh5dhw73bzxn20oexa9k516chk7s" # borrowed from https://github.com/thesadru/genshinstats
uid = 12345678 # int
ltoken = "verylargestringtokenxxxxxxxxxxxxxxxxxxx" # str
ltuid = "87654321" # str
def calculate_ds(): # borrowed from https://github.com/thesadru/genshinstats
t = int(time.time())
r = "".join(random.choices(string.ascii_letters, k=6))
h = hashlib.md5(f"salt={salt}&t={t}&r={r}".encode()).hexdigest()
return f"{t},{r},{h}"
USER_AGENT = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
headers = {
# required headers
"x-rpc-app_version": "1.5.0",
"x-rpc-client_type": "4",
"x-rpc-language": "en-us",
# authentications headers
"ds": calculate_ds(),
# recommended headers
"user-agent": USER_AGENT
}
resp = req.get(
'https://bbs-api-os.hoyoverse.com/game_record/genshin/api/dailyNote',
params=dict(server='os_euro', role_id=uid, schedule_type=1),
headers=headers,
cookies={'ltuid': ltuid, 'ltoken': ltoken})
print(resp.text)
@Victorsitou
Copy link

¿Cuál sería el equivalente de os_euro para América?

@scmanjarrez
Copy link
Author

¿Cuál sería el equivalente de os_euro para América?

He sacado los ID de https://github.com/thesadru/genshinstats/blob/master/genshinstats/utils.py. Para el caso de América, sería os_usa

@Victorsitou
Copy link

¿Cuál sería el equivalente de os_euro para América?

He sacado los ID de https://github.com/thesadru/genshinstats/blob/master/genshinstats/utils.py. Para el caso de América, sería os_usa

Muchas gracias. Creo que Mihoyo bloqueó la api o yo hice algo mal.

Me aparece este error:
{"data":null,"message":"Data is not public for the user","retcode":10102}

@scmanjarrez
Copy link
Author

scmanjarrez commented Oct 22, 2021

Debes activar el switch desde la app de hoyolab, no estoy seguro de si en la web deja hacerlo, en privacidad. Aparece algo así como: Activar datos en tiempo real en la crónica de batalla (Enable Real-Time Notes in battle chronicles)
image

@Victorsitou
Copy link

Al parecer es este switch el que hay que activar, pero me está dando un error.

image

@scmanjarrez
Copy link
Author

Sí, desde la web también me estuvo error ayer. Prueba desde la app de hoyolab, desde ahí si deja.

@Victorsitou
Copy link

¿Dónde puedo encontrar ese switch en la aplicación? (Disculpa es mi primera vez usandola)

@scmanjarrez
Copy link
Author

scmanjarrez commented Oct 22, 2021

Tienes que darle, en la parte de abajo, al último icono, ahí te llevará a una nueva sección donde aparecen tus logros, dale ahí y te lleva a otra sección donde aparece toda la información del genshin, en la parte de abajo salen las notas en tiempo real, si no te salen, al pulsar, te avisa si quieres activarlas, actívalas y ya debería estar.

@Victorsitou
Copy link

Ahí me funcionó, muchas gracias por tu código y tu ayuda al repo, me ayudará bastante esto.

@scmanjarrez
Copy link
Author

👍

@lInightshadowIl
Copy link

hola, ya no funciona la api?
imagen_2023-11-26_121248787

@scmanjarrez
Copy link
Author

Este código es bastante antiguo, usa https://github.com/thesadru/genshin.py

@lInightshadowIl
Copy link

Este código es bastante antiguo, usa https://github.com/thesadru/genshin.py

solo quería la api para hacer las consultas por que estoy usando javascript, de todas formas gracias

@scmanjarrez
Copy link
Author

Hola, he revisado el código y me funciona perfectamente, estás calculando bien el ds? Y los parámetros? el uid es un entero, el ltoken es un string muy largo, y el ltuid es otro entero pero pasado como un string.

@scmanjarrez
Copy link
Author

He actualizado el código eliminando librerías externas para que puedas implementarlo en js, sólo necesitas una librería que calcule md5.

@lInightshadowIl
Copy link

ahora si me funciona, me faltaba solamente calcular lo del md5, muchas gracias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment