¡Consulte la documentación completa (léase: un poco mejor) aquí!
RiotWatcher es un envoltorio fino que se suma a la API de Riot Games para League of Legends. Todos los métodos públicos a partir del 9/4/2024 son totalmente compatibles.
RiotWatcher por defecto admite un limitador de velocidad ingenuo. Este limitador de velocidad intentará evitar que usted realice demasiadas solicitudes, y en un entorno de prueba de un solo subproceso lo hace bastante bien. En un entorno multiproceso, es posible que aún reciba algunos errores 429. Actualmente NO se reintentan los errores 429.
Para instalar RiotWatcher:
instalar pip riotwatcher
O para desarrollo/pruebas, clonar y ejecutar:
instalación de pip -e .[desarrollo] instalación previa a la confirmación
También necesitas tener una clave API de Riot. Consíguelo desde aquí.
Todos los métodos devuelven diccionarios que representan los objetos json descritos por la API oficial de Riot. Cualquier error HTTP que devuelva la API se genera como excepciones HTTPError de la biblioteca de Solicitudes.
from riotwatcher import LolWatcher , RiotWatcher , ApiError
lol_watcher = LolWatcher ( '<your-api-key>' )
riot_watcher = RiotWatcher ( '<your-api-key>' )
my_region = 'na1'
my_account = riot_watcher . account . by_riot_id ( 'AMERICAS' , 'pseudonym' , 'sudo' )
me = lol_watcher . summoner . by_puuid ( my_region , my_account [ 'puuid' ])
print ( me )
# all objects are returned (by default) as a dict
# lets see if i got diamond yet (i probably didnt)
my_ranked_stats = lol_watcher . league . by_summoner ( my_region , me [ 'id' ])
print ( my_ranked_stats )
# First we get the latest version of the game from data dragon
versions = lol_watcher . data_dragon . versions_for_region ( my_region )
champions_version = versions [ 'n' ][ 'champion' ]
# Lets get some champions
current_champ_list = lol_watcher . data_dragon . champions ( champions_version )
print ( current_champ_list )
# For Riot's API, the 404 status code indicates that the requested data wasn't found and
# should be expected to occur in normal operation, as in the case of a an
# invalid summoner name, match ID, etc.
#
# The 429 status code indicates that the user has sent too many requests
# in a given amount of time ("rate limiting").
try :
response = lol_watcher . summoner . by_name ( my_region , 'this_is_probably_not_anyones_summoner_name' )
except ApiError as err :
if err . response . status_code == 429 :
print ( 'We should retry in {} seconds.' . format ( err . response . headers [ 'Retry-After' ]))
print ( 'this retry-after is handled by default by the RiotWatcher library' )
print ( 'future requests wait until the retry-after time passes' )
elif err . response . status_code == 404 :
print ( 'Summoner with that ridiculous name not found.' )
else :
raise
Tenga en cuenta que cuando utilice las API de Data Dragon con LolWatcher, las regiones NO son las mismas que las otras regiones API. Específicamente, se cambia el nombre de las siguientes regiones (al momento de escribir este artículo):
API | dragón |
eun1 | eune |
oc1 | oficina |
A partir del 14/10/2021 (y por lo que parece, indefinidamente), Riot admite las versiones v3 y v4 de la API LolStatus. Como tal, RiotWatcher proporciona un método para utilizar ambos. De forma predeterminada, se utilizará la API v3 para compatibilidad con versiones anteriores.
Para usar la API v4 de forma predeterminada, use lo siguiente para inicializar su instancia de LolWatcher:
from riotwatcher import LolWatcher
lol_watcher = LolWatcher ( '<your-api-key>' , default_status_v4 = True )
# example call
matchlist = lol_watcher . lol_status . platform_data ( 'na1' )
Para utilizar explícitamente v4 o v5 durante el período de desuso, puede utilizar las siguientes propiedades:
from riotwatcher import LolWatcher
lol_watcher = LolWatcher ( '<your-api-key>' )
# use v4 explicitly
matchlist = lol_watcher . lol_status_v4 . platform_data ( 'na1' )
# use v3 explicitly
old_matchlist = lol_watcher . lol_status_v3 . shard_data ( 'na1' )
Nota: ¡esto no será compatible después de que la v3 esté completamente obsoleta! Se eliminarán las propiedades lol_status_v3 y lol_status_v4 y el cambio se producirá con un aumento menor de la versión. Si desea compatibilidad perfecta con versiones anteriores, no utilice estas propiedades.
RiotWatcher puede integrarse con el kernel del servidor de almacenamiento en caché/proxy API. Esto se puede hacer proporcionando el parámetro kernel_url
al constructor LolWatcher
.
from riotwatcher import LolWatcher , ApiError
lol_watcher = LolWatcher ( kernel_url = "https://your-kernel-instance" ) # should not contain trailing slash
# use watcher as normal
Las pruebas unitarias se pueden ejecutar con el siguiente comando desde la carpeta RiotWatcher:
toxicidad
El limitador de velocidad tiene algunas condiciones de carrera cuando se usa simultáneamente.
Puntos finales de dominio de campeones de LoL actualizados para usar puuid
Espectador de LoL v4 reemplazado por v5
Eliminar soporte para python3.7; agregar compatible con python3.12
Agregar parámetro start
a la API de coincidencia TFT
Reasignación correcta para la región SEA
Agregue compatibilidad con Python 3.11 a CI/CD
Se agregó soporte para la API de desafíos de LoL.
Se agregó soporte para reasignar 'na1' -> 'americas' para los puntos finales de LoL Matchv5 y TFT Match.
Se eliminó la API de código de terceros de LoL, tal como lo eliminó riot.
Se actualizó alguna documentación.
Se agregó el método ddragon para todas las versiones.
Agregue soporte para Python 3.10, elimine soporte para Python 3.6
Se eliminaron las propiedades match_v4 y match_v5 de LolWatcher. Utilice la propiedad de coincidencia ahora: utilizará la API v5.
Utilice una sesión http persistente para conectarse a la API.
Se agregaron parámetros startTime y endTime para la API Match v5.
Rareza ddragon documentada
Solucione posibles problemas de seguridad con algunos patrones de uso comunes
Agregue la API LolStatus-V4. No me di cuenta de que esto existía hasta ahora.
Agregue los parámetros de consulta "cola" y "tipo" para la API Match v5
Añadir soporte para LoL MatchAPI v5
Agregue soporte para la API de coincidencias recientes de Valorant.
Agregue soporte para LoR MatchAPI.
Agregar soporte para API de Clash
Agregue soporte para API genéricas de Riot a través de la clase riotwatcher.RiotWatcher (nota: la antigua clase obsoleta se ha reutilizado; se le ha advertido)
Agregar soporte para API valorantes
Documentación limpia. Bastante.
API de LoR agregadas a través de la clase riotwatcher.LorWatcher.
API TFT agregadas a través de la clase riotwatcher.TftWatcher.
Se agregó soporte para las API de LoR a través de la clase riotwatcher.LorWatcher.
No más soporte para Python 2. Finalmente. Si necesita soporte para Python 2, utilice v2.7.1. Además, Python 3.5 ya no es compatible. Utilice 3.6 o más reciente.
La clase riotwatcher.RiotWatcher ha quedado obsoleta; se le ha cambiado el nombre a LolWatcher. La clase riotwatcher.RiotWatcher se ha mantenido por compatibilidad con versiones anteriores, pero no existirá para siempre.
El parámetro custom_handler_chain para LolWatcher (anteriormente RiotWatcher) ya no existe. Se ha reemplazado con los parámetros rate_limiter, deserializer y error_handler. Esto es parte del objetivo de desacoplar las API externas de riotwatcher de las solicitudes.
Se eliminaron clases obsoletas durante mucho tiempo.
Se solucionó el problema con el uso del kernel en regiones distintas a NA.
Agregue soporte para conectarse al kernel.
limpieza general
Se eliminaron los puntos finales v3 obsoletos.
Agregue soporte para puntos finales de entrada/por invocador y de entrada/cola/nivel/división de la liga v4
Se agregó un registro de advertencia cuando se utiliza un punto final obsoleto
Se agregó soporte para el parámetro de tiempo de espera. Ejemplo:
from riotwatcher import RiotWatcher , TimeoutError
watcher = RiotWatcher ( '<your-api-key>' , timeout = 2.5 ) # timeout is in seconds
try :
watcher . summoner . by_name ( 'na1' , 'pseudonym117' )
except TimeoutError :
print ( 'timed out getting summoner' )
Se agregó compatibilidad con API v4
Se cambiaron las excepciones a la excepción personalizada (ApiError) de la excepción de solicitudes. El cambio es compatible con versiones anteriores hasta al menos la versión v2.6. Después de eso, ya no se admitirá la captura de HTTPError.
ROTURA:
RequestHandler.preview_static_request y RequestHandler.after_static_request ya no reciben la versión y la configuración regional directamente como parámetros. En su lugar, debería utilizar URL. Esta API no está documentada, pero técnicamente está rota debido a algunos cambios relacionados con ddragon.
Se cambiaron las pruebas para usar pytest + tox de unittest y se recordó ejecutar cada versión de Python compatible.
Se agregaron medidas de cobertura al ejecutar pruebas.
Se movió la fuente a la carpeta src.
Se agregaron pruebas de integración.
Se movió la escritura de URL en módulos separados.
API StaticData eliminada (RIP)
Se eliminaron campeones.all y campeones.by_id (RIP)
Se agregó soporte para la API de DDragon.
Se agregó soporte para la API de rotación de campeones.
Problema solucionado n.º 88 (punto final de la lista de coincidencias reciente obsoleto)
Se eliminó el espacio de nombres y la API riotewatcher.legacy. (Finalmente) actualice a la API v3.
Se solucionó el problema #84 donde el punto final antiguo estaba en los ejemplos.
Se agregó el punto final league.by_id
Se corrigieron algunos problemas de documentación.
Se solucionó el problema #83 donde los límites inferiores distintos de 1 enviados por riot causaban una excepción en lugar de manejarse correctamente.
También se agregaron pruebas unitarias a la clase de límite. Porque las pruebas son buenas.
API de runas y maestrías completamente eliminadas
API ThirdPartyCode agregada
Se corrigieron algunos errores tipográficos en la documentación.
Aprendí qué es PyLint y lo usé.
La interfaz heredada se eliminará con la próxima versión sin corrección de errores. ¡Es hora de adaptarse al uso adecuado de las interfaces v3!
¡Ahora se respetan los límites de las tarifas de servicio!
Un montón de correcciones de documentos aleatorias... otras cosas no interesantes. etc.
Muchas correcciones a la documentación y ejecutores de pruebas automáticos (sin versión pypi)
Se corrigió el defecto #80 (los valores booleanos no se convierten a minúsculas en las solicitudes)
Soporte para Python 2
Se corrigieron un montón de violaciones de PEP y se corrigió el formato de comentarios.
Se corrigió un desagradable error de empaquetado que dejaba todo inutilizable. Ups.
Soporte de API v3.
Gran refactorización de código, muchas llamadas antiguas rotas.
La limitación de velocidad agregada de forma predeterminada se puede eliminar o reemplazar.
Se solucionó el problema con caracteres especiales en los nombres en el método get_summoners (problema n.° 28)
Se corrigió un error en la API de la lista de coincidencias que causaba que fallaran las solicitudes de temporadas pasadas, se agregaron constantes para cada temporada posible. (número 44)
Se corrigió el error introducido en la solicitud de extracción n.° 35 (el método para verificar qué excepción se genera cambió de lo que se documentó): el método anterior debería funcionar ahora. (número 43)
Se eliminaron las funciones del historial de partidos, ya que estaban obsoletas.
Se solucionó el problema con las pruebas de punto final de la lista de coincidencias fusionadas. Se solucionó el problema #24 en el archivo Léame. Se agregaron constantes de peleadores del mercado negro.
Se solucionó el problema con __init__.py que no importaba los paquetes correctos.
Se agregaron las API de juego actual v1.0 y juegos destacados v1.0.
Se corrigió un error/función no documentada al obtener un solo invocador con espacio en el nombre. También se agregó el método estático RiotWatcher.sanitize_name(name)
para eliminar caracteres especiales de los nombres de los invocadores.
Pequeños cambios, la firma de la función de get_summoner cambió, para obtener ID la palabra clave ahora es _id
, no id
, las pruebas se actualizaron para reflejar esto
Algunas constantes del juego se actualizaron, si alguien realmente las ha estado usando.
Agregue API de estado jajaja. No es gran cosa, pero tuve tiempo de hacerlo.
¡Se agregaron API Match y MatchHistory! También están algo probados, pero los parámetros de consulta no se prueban.
Se agregaron algunas constantes nuevas. Probablemente no sea útil, pero quién sabe. Quizás alguien los quiera.
Algún código cambió para verse un poco mejor también.
API actualizadas compatibles. API actualizadas:
No te preocupes, la compatibilidad con los datos de los partidos está por llegar. Solo quería realizar estos cambios primero, ya que ya tenían pruebas.
Se solucionó el problema número 4 (olvidé cambiar un número, ¡ups!) e hizo que fuera mucho menos probable que lo volviera a hacer (moví la parte de la versión API de la URL a un método diferente solo para asegurarme de no estropearlo).
¡¡Además ahora hay PRUEBAS!! ¡CORTEJAR! Todos se regocijan. Sin embargo, no son pruebas muy buenas, así que no te emociones demasiado. PERO si deberían detectar si hay un problema claro en el contenedor de API.
Ah, y se ha realizado un mejor formato (espacios, no tabulaciones, sangría más consistente, etc.). No debería haber ninguna diferencia funcional.
Se agregó soporte para representantes regionales, porque EUW rompió sin él.
Porque, ¿qué significan realmente los números de versión?
De hecho, agregue puntos finales a la API de la liga que olvidé agregar. El cambio NO es compatible con versiones anteriores, será necesario cambiar cualquier uso de las llamadas a la API de la antigua liga, además de los cambios de Riot.
API recientemente compatibles: - league-v2.4 - team-v2.3
Se solucionó el problema con las llamadas estáticas, es decir, que antes no hacían nada bien. Ahora funcionan.
Actualizadas a las últimas versiones de API, las API ahora compatibles son:
Los cambios NO son compatibles con versiones anteriores; deberá actualizar cualquier código que utilice una versión antigua de API. Consulte la documentación de Riots para obtener más información sobre los cambios que se realizaron.
Se agregaron nuevos métodos de Riots para obtener equipos por identificación. En los métodos 'get_teams(team_ids, región)' y 'get_team(team_id, región)'.
Solo alfa, se agregó limitación de velocidad experimental
Lanzamiento inicial
RiotWatcher no cuenta con el respaldo de Riot Games y no refleja los puntos de vista ni las opiniones de Riot Games ni de nadie oficialmente involucrado en la producción o administración de League of Legends . League of Legends y Riot Games son marcas comerciales o marcas comerciales registradas de Riot Games, Inc. League of Legends (c) Riot Games, Inc.