Die vollständige (sprich: etwas bessere) Dokumentation finden Sie hier!
RiotWatcher ist ein dünner Wrapper auf der Riot Games API für League of Legends. Alle öffentlichen Methoden ab dem 09.04.2024 werden vollständig unterstützt.
RiotWatcher unterstützt standardmäßig einen naiven Ratenbegrenzer. Dieser Ratenbegrenzer wird versuchen, Sie davon abzuhalten, zu viele Anfragen zu stellen, und in einer Single-Threaded-Testumgebung gelingt dies ziemlich gut. In einer Multithread-Umgebung erhalten Sie möglicherweise immer noch 429-Fehler. 429-Fehler werden derzeit NICHT für Sie wiederholt.
So installieren Sie RiotWatcher:
pip riotwatcher installieren
ODER für Entwicklung/Tests, Klonen und Ausführen:
pip install -e .[dev] Pre-Commit-Installation
Sie benötigen außerdem einen API-Schlüssel von Riot. Holen Sie sich das hier.
Alle Methoden geben Wörterbücher zurück, die die von der offiziellen Riot-API beschriebenen JSON-Objekte darstellen. Alle von der API zurückgegebenen HTTP-Fehler werden als HTTPError-Ausnahmen aus der Requests-Bibliothek ausgelöst.
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
Beachten Sie bei der Verwendung von Data Dragon-APIs mit LolWatcher, dass die Regionen NICHT mit den anderen API-Regionen identisch sind. Konkret werden die folgenden Regionen umbenannt (zum Zeitpunkt des Schreibens):
API | Drachen |
eun1 | eune |
oc1 | oce |
Seit dem 14.10.2021 (und wie es aussieht auf unbestimmte Zeit) werden sowohl die Version 3 als auch die Version 4 der LolStatus-API von Riot unterstützt. Daher bietet RiotWatcher eine Methode, um beides zu verwenden. Aus Gründen der Abwärtskompatibilität wird standardmäßig die v3-API verwendet.
Um die v4-API standardmäßig zu verwenden, initialisieren Sie Ihre LolWatcher-Instanz wie folgt:
from riotwatcher import LolWatcher
lol_watcher = LolWatcher ( '<your-api-key>' , default_status_v4 = True )
# example call
matchlist = lol_watcher . lol_status . platform_data ( 'na1' )
Um v4 oder v5 während des veralteten Zeitraums explizit zu verwenden, können Sie die folgenden Eigenschaften verwenden:
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' )
Hinweis: Dies wird nicht mehr unterstützt, nachdem v3 vollständig veraltet ist! Sowohl die Eigenschaften lol_status_v3 als auch lol_status_v4 werden entfernt, und die Änderung erfolgt mit einer geringfügigen Versionserhöhung. Wenn Sie eine nahtlose Abwärtskompatibilität wünschen, verwenden Sie diese Eigenschaften nicht.
RiotWatcher kann in den API-Proxy-/Caching-Server-Kernel integriert werden. Dies kann durch Bereitstellung des Parameters kernel_url
für den LolWatcher
-Konstruktor erfolgen.
from riotwatcher import LolWatcher , ApiError
lol_watcher = LolWatcher ( kernel_url = "https://your-kernel-instance" ) # should not contain trailing slash
# use watcher as normal
Unit-Tests können mit dem folgenden Befehl aus dem RiotWatcher-Ordner ausgeführt werden:
tox
Bei gleichzeitiger Verwendung des Ratenbegrenzers treten einige Rennbedingungen auf.
LoL Champion Mastery-Endpunkte wurden aktualisiert, um Puuid zu verwenden
LoL Spectator v4 wurde durch v5 ersetzt
Unterstützung für Python3.7 entfernen; Hinzufügen wird für Python3.12 unterstützt
start
zur TFT-Match-API hinzufügen
Korrekte Neuzuordnung für die SEA-Region
Fügen Sie Python 3.11-Unterstützung zu CI/CD hinzu
Unterstützung für die LoL Challenges API hinzugefügt
Unterstützung für die Neuzuordnung von „na1“ -> „americas“ für LoL Matchv5- und TFT Match-Endpunkte hinzugefügt
Die LoL-3rd-Party-Code-API wurde entfernt, da sie von Riot entfernt wurde
Einige Dokumentationen wurden aktualisiert
Methode „ddragon alle Versionen“ hinzugefügt.
Unterstützung für Python 3.10 hinzufügen, Unterstützung für Python 3.6 entfernen
Die Eigenschaften match_v4 und match_v5 wurden aus LolWatcher entfernt. Match-Eigenschaft jetzt verwenden – es wird die v5-API verwendet.
Verwenden Sie eine dauerhafte HTTP-Sitzung, um eine Verbindung zur API herzustellen.
StartTime- und EndTime-Parameter für Match v5-API hinzugefügt
Dokumentierte Drachenverrücktheit
Beheben Sie potenzielle Sicherheitsprobleme bei einigen gängigen Nutzungsmustern
Fügen Sie die LolStatus-V4-API hinzu. Ich wusste bis jetzt nicht, dass es das gibt.
Fügen Sie die Abfrageparameter „Warteschlange“ und „Typ“ für die Match v5-API hinzu
Unterstützung für LoL MatchAPI v5 hinzufügen
Fügen Sie Unterstützung für die API für aktuelle Valorant-Matches hinzu.
Unterstützung für LoR MatchAPI hinzufügen.
Unterstützung für Clash-APIs hinzufügen
Fügen Sie Unterstützung für generische Riot-APIs über die Klasse riotwatcher.RiotWatcher hinzu (Hinweis: Die alte veraltete Klasse wurde umfunktioniert – Sie wurden gewarnt)
Fügen Sie Unterstützung für Valorant-APIs hinzu
Dokumentation bereinigt. Ziemlich viel.
LoR-APIs wurden über die Klasse riotwatcher.LorWatcher hinzugefügt.
Über die Klasse riotwatcher.TftWatcher hinzugefügte TFT-APIs.
Unterstützung für LoR-APIs durch die Klasse riotwatcher.LorWatcher hinzugefügt.
Keine Python 2-Unterstützung mehr. Endlich. Wenn Sie Unterstützung für Python 2 benötigen, verwenden Sie bitte v2.7.1. Auch Python 3.5 wird nicht mehr unterstützt. Bitte verwenden Sie 3.6 oder neuer.
Die Klasse riotwatcher.RiotWatcher ist veraltet – sie wurde in LolWatcher umbenannt. Die Klasse riotwatcher.RiotWatcher wurde aus Gründen der Abwärtskompatibilität beibehalten, wird jedoch nicht für immer existieren.
Der Parameter „custom_handler_chain“ für LolWatcher (vormals RiotWatcher) existiert nicht mehr. Es wurde durch die Parameter rate_limiter, deserializer und error_handler ersetzt. Dies ist Teil des Ziels, die externen APIs von Riotwatcher von Anfragen zu entkoppeln.
Längst veraltete Klassen entfernt.
Problem bei der Verwendung des Kernels in anderen Regionen als NA behoben.
Unterstützung für die Verbindung zum Kernel hinzufügen.
Allgemeine Aufräumarbeiten
Veraltete v3-Endpunkte entfernt
Unterstützung für Liga v4-Eintritts-/Nachbeschwörer- und Eintritts-/Warteschlangen-/Stufen-/Divisionsendpunkte hinzugefügt
Warnprotokoll hinzugefügt, wenn veralteter Endpunkt verwendet wird
Unterstützung für Timeout-Parameter hinzugefügt. Beispiel:
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' )
Unterstützung für v4-API hinzugefügt
Ausnahmen wurden von der Anforderungsausnahme in eine benutzerdefinierte Ausnahme (ApiError) geändert. Die Änderung ist abwärtskompatibel bis mindestens Version v2.6. Danach wird das Abfangen von HTTPError nicht mehr unterstützt.
BREAKING:
RequestHandler.preview_static_request und RequestHandler.after_static_request erhalten Version und Gebietsschema nicht mehr direkt als Parameter. Sollte stattdessen eine URL verwenden. Diese API ist nicht dokumentiert, aber aufgrund einiger Änderungen im Zusammenhang mit ddragon technisch fehlerhaft.
Tests wurden auf die Verwendung von Pytest + Tox von Unittest umgestellt und daran gedacht, jede unterstützte Python-Version auszuführen.
Abdeckungsmessungen beim Ausführen von Tests hinzugefügt.
Quelle in src-Ordner verschoben.
Integrationstests hinzugefügt.
URL-Schreiben in separate Module verschoben.
StaticData API (RIP) entfernt
Champions.all und Champions.by_id entfernt (RIP)
DDragon-API-Unterstützung hinzugefügt
Unterstützung für die Champion-Rotation-API hinzugefügt
Problem Nr. 88 behoben (aktueller Matchlist-Endpunkt veraltet)
Der Namespace und die API „riotewatcher.legacy“ wurden entfernt. Bitte aktualisieren Sie (endlich) auf die v3-API.
Problem Nr. 84 behoben, bei dem der alte Endpunkt in Beispielen vorkam
Endpunkt league.by_id hinzugefügt
Einige Dokumentationsprobleme wurden behoben
Problem Nr. 83 behoben, bei dem von Riot gesendete niedrigere Grenzwerte ungleich 1 eine Ausnahme auslösten, anstatt korrekt behandelt zu werden.
Außerdem wurden Komponententests zur Limit-Klasse hinzugefügt. Weil Tests gut sind.
Meisterschaften und Runen-APIs wurden vollständig entfernt
ThirdPartyCode-API hinzugefügt
Einige Tippfehler in der Dokumentation wurden behoben
Ich habe gelernt, was PyLint ist, und es verwendet.
Die Legacy-Schnittstelle wird mit der nächsten Nicht-Bugfix-Version entfernt. Zeit, sich an die ordnungsgemäße Nutzung von v3-Schnittstellen zu gewöhnen!
Service-Tarifgrenzen werden jetzt tatsächlich eingehalten!
Eine Reihe zufälliger Dokumentkorrekturen ... andere nicht interessante Dinge. usw.
Viele Korrekturen an der Dokumentation und automatischen Testläufern (keine Pypi-Version)
Fehler Nr. 80 behoben (boolesche Werte werden in Anfragen nicht in Kleinbuchstaben umgewandelt)
Python 2-Unterstützung
Eine Reihe von PEP-Verstößen wurden behoben und das Kommentarformat korrigiert.
Ein böser Verpackungsfehler wurde behoben, der alles unbrauchbar machte. Hoppla.
v3-API-Unterstützung.
Riesige Umgestaltung des Codes, viele alte Aufrufe kaputt.
Standardmäßig hinzugefügte Ratenbegrenzung, kann entfernt/ersetzt werden.
Problem mit Sonderzeichen in Namen in der get_summoners-Methode behoben (Problem Nr. 28)
Fehler in der Matchlist-API behoben, der dazu führte, dass Anfragen für vergangene Saisons fehlschlugen, Konstanten für jede mögliche Saison hinzugefügt. (Ausgabe Nr. 44)
Fehler behoben, der in Pull-Request Nr. 35 eingeführt wurde (die Methode zur Überprüfung, welche Ausnahme ausgelöst wird, hat sich gegenüber der Dokumentation geändert) – die alte Methode sollte jetzt funktionieren. (Ausgabe Nr. 43)
Match-History-Funktionen entfernt, da diese veraltet waren.
Problem mit zusammengeführten Matchlist-Endpunkttests behoben. Problem Nr. 24 in der Readme-Datei behoben. Es wurden Schwarzmarkt-Brawler-Konstanten hinzugefügt
Problem behoben, bei dem __init__.py nicht die richtigen Pakete importierte
Current-Game-v1.0- und Featured-Games-V1.0-APIs hinzugefügt
Fehler/undokumentierte Funktion beim Erhalten eines einzelnen Beschwörers mit Leerzeichen im Namen behoben. Außerdem wurde die statische Methode RiotWatcher.sanitize_name(name)
zum Entfernen von Sonderzeichen aus Beschwörernamen hinzugefügt.
Kleine Änderungen, Funktionssignatur von get_summoner geändert, um anhand der ID zu ermitteln, lautet das Schlüsselwort jetzt _id
und nicht id
. Die Tests wurden aktualisiert, um dies widerzuspiegeln
Einige Spielkonstanten wurden aktualisiert, falls jemand sie tatsächlich verwendet hat.
LOL-Status-API hinzufügen. Keine große Sache, aber ich hatte Zeit dafür.
Match- und MatchHistory-APIs hinzugefügt! Werden auch teilweise getestet, Abfrageparameter werden jedoch nicht getestet.
Einige neue Konstanten hinzugefügt. Wahrscheinlich nicht nützlich, aber wer weiß. Vielleicht möchte jemand sie haben.
Einige Codes wurden geändert, damit sie auch etwas schöner aussehen.
Aktualisierte APIs werden unterstützt. Aktualisierte APIs:
Keine Sorge, die Unterstützung für Spieldaten kommt bald. Ich wollte diese Änderungen nur zuerst festschreiben, da es bereits Tests gab.
Problem Nr. 4 behoben (ich habe vergessen, eine Zahl zu ändern, ups) und die Wahrscheinlichkeit verringert, dass ich es noch einmal mache (API-Versionsteil der URL in eine andere Methode verschoben, nur um sicherzugehen, dass ich es nicht vermassle).
Außerdem gibt es jetzt TESTS!! UMWERBEN! Alle freuen sich. Allerdings sind es keine sehr guten Tests, also seien Sie nicht zu aufgeregt. ABER wenn sie erkennen sollten, ob ein eindeutiges Problem im API-Wrapper vorliegt.
Oh, und einige bessere Formatierungen vorgenommen (Leerzeichen statt Tabulatoren, konsistentere Einrückung usw.). Sollte überhaupt keinen funktionalen Unterschied geben.
Unterstützung für regionale Proxys hinzugefügt, da EUW ohne sie kaputt ging
Denn was bedeuten Versionsnummern überhaupt?
Fügen Sie tatsächlich Endpunkte zur Liga-API hinzu, die ich gerade vergessen habe hinzuzufügen. Die Änderung ist NICHT abwärtskompatibel. Zusätzlich zu den Riot-Änderungen muss jede Verwendung der API-Aufrufe der alten Liga geändert werden.
Neu unterstützte APIs: - league-v2.4 - team-v2.3
Behebung des Problems mit statischen Aufrufen, nämlich dass diese vorher nichts richtig gemacht haben. Jetzt funktionieren sie.
Auf die neuesten API-Versionen aktualisiert. Folgende APIs werden jetzt unterstützt:
Änderungen sind NICHT abwärtskompatibel. Sie müssen jeden Code aktualisieren, der eine alte API-Version verwendet. Weitere Informationen zu den vorgenommenen Änderungen finden Sie in der Riots-Dokumentation
Riots neue Methoden hinzugefügt, um Teams anhand der ID zu ermitteln. In den Methoden „get_teams(team_ids, Region)“ und „get_team(team_id, Region)“.
Nur Alpha, experimentelle Geschwindigkeitsbegrenzung hinzugefügt
Erstveröffentlichung
RiotWatcher wird nicht von Riot Games unterstützt und spiegelt nicht die Ansichten oder Meinungen von Riot Games oder anderen Personen wider, die offiziell an der Produktion oder Verwaltung von League of Legends beteiligt sind. League of Legends und Riot Games sind Marken oder eingetragene Marken von Riot Games, Inc. League of Legends (c) Riot Games, Inc.