Ceci est le premier article à commémorer.
Dans cet article, je voulais obtenir les données de "League of Legends" (ci-après LOL), qui est le jeu auquel je suis accro, et exprimer numériquement le taux de victoire et les champions dans lesquels je suis bon. (Eh bien, des sites comme OPGG et YOURGG existent déjà, mais le mien Pour étudier)
Au 29 janvier 2020 OS:windows10 Anaconda:4.8.1 python:3.7.6
Étant donné que l'API est officiellement fournie lors de la collecte des données LOL, nous l'utiliserons cette fois. Pour ce faire, tapez la commande ci-dessous pour installer *** riotwather ***.
python -m pip install riotwatcher
Puisque vous devez obtenir la clé API, connectez-vous depuis ici et souvenez-vous de la clé API DEVELOPMENT. (Cette clé API doit être mise à jour et réécrite si elle devient inutilisable en raison de la date d'expiration d'un jour.)
(https://qiita.com/hyo_07/items/f106efbde82aeb47c8a0) J'ai fait référence à cet article.
sample_1.py
from riotwatcher import RiotWatcher
API_KEY="{CLÉ API acquise plus tôt}"
wather = RiotWatcher(API_KEY)
region = "jp1" #Sélection du serveur: Japan Saba est jp1
name = "Macha-kun" #Entrez le nom de l'invocateur
summoner = watcher.summoner.by_name(region,name) #Acquisition des données des joueurs
print(summoner)
Quand ceci est exécuté, le contenu de l'invocateur de type dictionnaire peut être sorti. En fait, le contenu inclut des données telles que ["id": str, "accountId": str, "puuid": str, "fileIconId": int, "revisionDate": int, "summonerLevel": int].
sample_1.py
recentmatchlists = watcher.match.matchlist_by_account(region,summoner["accountId"]) #Obtenez une liste de données pour les 20 derniers matchs
matches = recentmatchlists["matches"]
match_data = watcher.match.by_id(region,matches[0]["gameId"]) #Extraire une seule correspondance
print(match_data)
Ajoutez-les au code précédent et affichez les données pour un jeu. Comme vous pouvez le voir, il y a une énorme quantité de données même dans un jeu. (Je ne pouvais pas serrer parce que ça ne cadrait pas sur l'écran)
Jetons un coup d'œil au contenu de ** match_data ** un par un.
Les données que je veux cette fois sont le nombre de victoires et de pertes, le nombre de victimes, le nombre de morts, le nombre de passes décisives, le taux d'implication des victimes, le champion utilisé, le champion qui a joué, le couloir, le CS, l'or gagné, les dégâts infligés au champion, le temps du match. Aller. Le mode de jeu est réduit au rang.
Trouvons l'élément qui vient d'être mentionné dans la sortie précédente. (C'est difficile à trouver avec beaucoup de lettres: D) Au fait, match_data est un type dict.
Nom de l'objet | Moule | Description des données |
---|---|---|
gameId | int | Numéro d'identification du jeu |
platformId | str | Emplacement du serveur |
gameCreation | int | Horodatage lorsque l'écran de chargement est affiché |
gameDuration | int | Temps de jeu |
queueId | int | 420=Rang, 430=Normal, 450=ARAM |
mapId | int | |
seasonId | int | 13=Season10 |
gameVersion | str | Version du jeu |
gameMode | str | ARAM ou CLASSIQUE |
gameType | str | |
teams | list | Détails ci-dessous |
participants | list | Détails ci-dessous |
participantIdentities | list | Détails ci-dessous |
Il ressemble à ce qui précède lorsqu'il est grossièrement divisé. Cependant, à ce stade, les informations que je souhaite ne sont claires que pour ** gameDuration ** et ** gameMode **. ** temas **, ** participants ** et ** identités partielles ** sont de * type liste *, il semble donc nécessaire de regarder de plus près.
Jetons donc un œil au contenu des ** équipes ** une par une.
match_data["teams"][0] #Équipe 1
match_data["teams"][1] #Équipe 2
Nom de l'objet | Moule | Description des données |
---|---|---|
teamId | int | 100=L'équipe bleue,200=Équipe rouge |
win | str | "Win" or "Fail" |
firstBlood | bool | Vrai si tu prends le premier sang |
firstTower | bool | Vrai si tu prends la première tour |
firstInhibitor | boo | Vrai si vous prenez le premier inhibiteur |
firstBaron | bool | Vrai si tu prends le premier baron |
firstDragon | bool | Vrai si vous prenez le premier dragon |
firstRiftHerald | bool | Vrai si vous prenez le premier héraut d'ascenseur |
towerKills | int | Nombre de tours cassées |
inhibitorKills | int | Nombre d'inhibiteurs cassés |
baronKills | int | Nombre de fois que Baron a été vaincu |
dragonKills | int | Nombre de fois où le dragon a été vaincu |
vilemawKills | int | Est-ce comme un personnage limité par une ligne d'arbre tordue? Nombre de défaites |
riftHeraldKills | int | Nombre de fois où vous avez vaincu Lift Herald |
dominionVictoryScore | int | |
bans | list | Détails ci-dessous |
** bans ** est un * type de liste *, alors creusons plus profondément.
match_data["teams"][0]["bans"] #Équipe 1 BAN
match_data["teams"][1]["bans"] #Équipe 2 BAN
Nom de l'objet | Moule | Description des données |
---|---|---|
championId | int | Numéro de champion |
pickTurn | int | Choisissez l'ordre |
Regardons maintenant les ** participants **.
match_data["participants"][0] #Prenez des données pour une personne
Nom de l'objet | Moule | Description des données |
---|---|---|
participantsId | int | 1~10 numéros d'identification des joueurs |
teamId | int | 100=Équipe bleue, 200=Équipe rouge |
championId | int | Numéro d'identification du champion |
spell1Id | int | Sort d'invocateur 1 |
spell2Id | int | Sort d'invocateur 2 |
stats | dict | Détails ci-dessous |
timeline | dict | Détails ci-dessous |
Il existe des ** stats ** et ** timeline ** de * dict type *, donc vérifions les détails en suivant l'exemple.
match_data["participants"][0]["stats"] #Statistiques de sortie pour une personne
Nom de l'objet | Moule | Description des données |
---|---|---|
participantId | int | 1~10 numéros d'identification des joueurs |
win | bool | Vrai si vous gagnez |
item0 | int | Numéro d'identification de l'article |
item1 | int | Numéro d'identification de l'article |
item2 | int | Numéro d'identification de l'article |
item3 | int | Numéro d'identification de l'article |
item4 | int | Numéro d'identification de l'article |
item5 | int | Numéro d'identification de l'article |
item6 | int | Numéro d'identification de l'article |
kills | int | Nombre de victimes |
deaths | int | Nombre de décès |
assists | int | Nombre de passes |
largestKillingSpree | int | Spree de meurtre maximale |
largestMultiKill | int | Multi-kill maximum |
killingSprees | int | Nombre de tueries |
longestTimeSpentLiving | int | |
doubleKills | int | Nombre de doubles éliminations |
tripleKills | int | Nombre de triples éliminations |
quadraKills | int | Nombre de quadrakills |
pentaKills | int | Nombre de pentakills |
unrealKills | int | |
totalDamageDealt | int | Total de tous les dégâts |
magicDamageDealt | int | Dégâts magiques totaux |
physicalDamageDealt | int | Dégâts physiques totaux |
trueDamageDealt | int | Total des dommages confirmés |
largestCriticalStrike | int | |
magicDamageDealtToChampions | int | Dégâts magiques totaux au champion |
physicalDamageDealtToChampions | int | Dégâts physiques totaux au champion |
trueDamageDealtToChampions | int | Total des dommages confirmés au champion |
totalHeal | int | Montant total de la récupération |
totalUnitsHealed | int | |
damageSelfMitigated | int | |
damageDealtToObjectives | int | Dommages aux objets |
damageDealtToTurrets | int | Dommages à la tour |
visionScore | int | Score de visibilité |
timeCCingOthers | int | Nombre d'obstacles |
totalDamageTaken | int | Total des dégâts reçus |
magicalDamageTaken | int | Total des dégâts magiques reçus |
physicalDamageTaken | int | Total des dommages physiques reçus |
trueDamageTaken | int | Total des dommages confirmés reçus |
goldEarned | int | Gagner de l'or |
goldSpent | int | |
turretKills | int | Nombre de tours détruites |
inhibitorKills | int | Nombre d'inhibiteurs cassés |
totalMinionsKilled | int | Nombre d'unités vaincues |
neutralMinionsKilled | int | Nombre de serviteurs vaincus |
neutralMinionsKilledEnemyJungle | int | Nombre de fluage de la jungle de l'adversaire vaincu |
totalTimeCrowdControlDealt | int | |
champLevel | int | Niveau de champion |
visionWardsBoughtInGame | int | |
sightWardsBoughtInGame | int | |
wardsPlaced | int | Nombre de mots placés |
wardsKilled | int | Nombre de mots brisés |
firstBloodKill | bool | Vrai si tu prends le premier sang |
firstBloodAssist | bool | Vrai avec First Blood Assist |
firstTowerKill | bool | Vrai si tu prends la première tour |
firstTowerAssist | bool | Vrai si vous obtenez l'aide de la première tour |
combatPlayerScore | int | |
objectivePlayerScore | int | |
totalPlayerScore | int | |
totalScoreRank | int | |
playerScore0 | int | |
playerScore1 | int | |
playerScore2 | int | |
playerScore3 | int | |
playerScore4 | int | |
playerScore5 | int | |
playerScore6 | int | |
playerScore7 | int | |
playerScore8 | int | |
playerScore9 | int | |
perk0 | int | |
perk0Var1 | int | |
perk0Var2 | int | |
perk0Var3 | int | |
perk1 | int | |
perk1Var1 | int | |
perk1Var2 | int | |
perk1Var3 | int | |
perk2 | int | |
perk2Var1 | int | |
perk2Var2 | int | |
perk2Var3 | int | |
perk3 | int | |
perk3Var1 | int | |
perk3Var2 | int | |
perk3Var3 | int | |
perk4 | int | |
perk4Var1 | int | |
perk4Var2 | int | |
perk4Var3 | int | |
perk5 | int | |
perk5Var1 | int | |
perk5Var2 | int | |
perk5Var3 | int | |
perkPrimaryStyle | int | |
perkSubStyle | int | |
statPerk0 | int | |
statPerk1 | int | |
statPerk2 | int |
Le montant est incroyable, et je n'ai aucune idée de ce que représentent les données du milieu.
Jetons un second regard et regardons la ** chronologie ** de la même manière.
match_data["participants"][0]["timeline"] #Chronologie de sortie pour une personne
Nom de l'objet | Moule | Description des données |
---|---|---|
participantsId | int | 1~10 numéros d'identification des joueurs |
creepsPerMinDeltas | dict | 1 minute CS |
xpPerMinDeltas | dict | Valeur d'expérience 1 minute |
goldPerMinDeltas | dict | 1 minute d'or gagné |
csDiffPerMinDeltas | dict | |
xpDiffPerMinDeltas | dict | |
damageTakenPerMinDeltas | dict | Dommages reçus en 1 minute |
damageTakenDiffPerMinDeltas | dict | |
role | str | SOLO,DUO_SUPPORT,DUO_CARRY,NONE |
lane | str | TOP,JUNGLE,MIDDLE,L'un des BOTTOM |
Lorsqu'il s'agit de * dict type *, les données à intervalles de 10 minutes tels que * "0-10" * et * "10-20" * sont stockées dans * float type *.
Enfin, examinons les ** identités partielles **.
match_data["participantIdentities"][0] #Sortie des identités partielles pour une personne
Nom de l'objet | Moule | Description des données |
---|---|---|
participantId | int | 1~10 numéros d'identification des joueurs |
player | dict | Détails ci-dessous |
Vérifiez le contenu de ** player **.
match_data["participantIdentities"][0]["player"] #Informations sur le joueur pour un joueur
Nom de l'objet | Moule | Description des données |
---|---|---|
platformId | str | L'emplacement du serveur sur lequel vous avez créé le compte pour la première fois |
accountId | str | identifiant de compte |
summonerName | str | Nom d'invocateur |
summonerId | str | ID d'invocateur |
currentPlatformId | str | Emplacement actuel du serveur |
currentAccountId | str | ID de compte actuel |
matchHistoryUri | str | URI de l'historique des enregistrements de bataille |
profileIcon | int | Numéro d'identification de l'icône |
Il faut beaucoup de patience pour vérifier cette quantité de données une par une. L'endroit où l'explication des données est vide est celui où cela n'est pas nécessaire cette fois. Je veux le remplir un jour: D
Ensuite, je voudrais passer au travail d'analyse à partir de ces données extraites.
Recommended Posts