Es tut mir leid zu sagen, dass ich Pokemon Go seit etwa Januar letzten Jahres neu gestartet habe. Ich mache es seitdem seit einem Jahr, aber es gab auch eine große Erweiterung auf der Pokemon Go-Seite. Es ist ein lang erwartetes Online-Match. Ich war nicht daran interessiert, aber als ich es ausprobierte, machte es unerwartet Spaß und ich wollte selbst über Simulationen und effiziente Schlachten nachdenken. Wie sammeln Sie dann die Pokemon-Daten und Technikdaten? Es ist eine Geschichte.
Dies war die erste Methode, die ich mir ausgedacht habe. Alle Status- und Fähigkeitsdaten in Pokemon Go, einschließlich Websites in Übersee und inländischen Websites, sind für die Öffentlichkeit zugänglich. Da es jedoch nicht für den sekundären Gebrauch vorgesehen ist, ist ein Verfahren zum Extrahieren aus der Bahn durch Schaben usw. erforderlich.
Ein Repository, das erweiterte Daten veröffentlicht, in denen es seine Suchleistung unter Beweis gestellt hat, z. B. die Google-Suche [pokemongo-dev-contrib / pokemongo-game-master Spielleiter)] wurde angetroffen. Also dachte ich, dass ein Fall beigelegt wurde, aber ** es gab zu viele zusätzliche Dinge in den Daten **. Neben Pokemon- und Technologiedaten enthält es auch Spielerkostüme und verschiedene Einstellwerte.
Diese Datei heißt übrigens ** GAME_MASTER.json ** und enthält viele Pokemon GO-Einstellungsdaten wie Kostümdaten, PvP-Kampfeinstellungswerte, Pokemon-Daten, Fertigkeitsenergie usw., wie oben erwähnt. Aus diesem Grund ist es eine große Größe von 3,4 MB und es gibt Abfall. Zuerst werden wir die notwendigen Daten daraus extrahieren.
Da es verschiedene Daten gibt, schauen Sie sich zuerst den Datenteil von Pokemon an.
GAME_MASTER.Teilauszug und Formgebung von Pokemon-Daten von json
{
"itemTemplates": [{
"templateId": "V0001_POKEMON_BULBASAUR",
"pokemonSettings": {
"pokemonId": "BULBASAUR",
"type": "POKEMON_TYPE_GRASS",
"type2": "POKEMON_TYPE_POISON",
"stats": {
"baseStamina": 128,
"baseAttack": 118,
"baseDefense": 111
},
"quickMoves": ["VINE_WHIP_FAST", "TACKLE_FAST"],
"cinematicMoves": ["SLUDGE_BOMB", "SEED_BOMB", "POWER_WHIP"],
},
}],
Es war da. In der Abbildung wurde nur der Datenteil extrahiert, der diesmal als wichtig angesehen wurde, aber auch verschiedene andere Daten sind enthalten. Obwohl es nicht ausreicht, es zusammenzufassen, kann es aus dem Schlüsselnamen und den Daten wie folgt abgeleitet werden.
Key | Dateninhalt |
---|---|
templateId | Pokemon-Datenkennung |
pokemonId | Pokemon Name |
stats | Rennwert |
type | Art |
quickMoves | Technik 1 |
cinematicMoves | Technik 2 |
Darüber hinaus scheinen diese Daten keine Techniken für eine begrenzte Zeit zu enthalten.
Ich denke, dass Sie zu diesem Zeitpunkt 100-mal detaillierter sind als ich, aber ich werde mein Programm vorerst veröffentlichen. Alle Daten werden durch ein Komma getrennt, damit sie im CSV-Format verwendet werden können. Ich wollte die Technologiedaten nicht so verwenden, wie sie sind, also habe ich :: als Trennzeichen verwendet und sie zwangsweise angehängt.
GAME_MASTER_pokemon_parser.py
# -*- coding: utf-8 -*-
import json
import re
#Bereiten Sie ein Muster für den regulären Ausdruck vor, das mit den Daten von Pokemon übereinstimmt
pattern = '^V0\d+_POKEMON_.+'
f = open('GAME_MASTER.json', 'r')
json_dict = json.load(f)
#Als oberster Schlüssel"itemTemplates"Da dies der Fall ist, stellen Sie es zuerst bereit.
for json_list in json_dict["itemTemplates"]:
templateIdData = json_list["templateId"]
result = re.match(pattern, templateIdData)
#Extrahieren Sie die erforderlichen Daten, wenn sie mit den Pokemon-Daten übereinstimmen
if (result):
#Greifen Sie im get-Format auf Wörterbuchdaten zu, da einige Pokemon keine Fähigkeitsdaten haben
#(Doble hatte nicht die Fähigkeit)
quickMoves = json_list["pokemonSettings"].get("quickMoves")
quickMovesStr = ""
if quickMoves is not None:
for quickMovesStrTemp in quickMoves:
quickMovesStr = quickMovesStr + quickMovesStrTemp + "::"
cinematicMoves = json_list["pokemonSettings"].get("cinematicMoves")
cinematicMovesStr = ""
if cinematicMoves is not None:
for cinematicMovesStrTemp in cinematicMoves:
cinematicMovesStr = cinematicMovesStr + cinematicMovesStrTemp + "::"
outPokemon = json_list.get("templateId") + "," + str(json_list["pokemonSettings"].get("type")) + "," + str(json_list["pokemonSettings"].get("type2")) + "," + str(json_list["pokemonSettings"]["stats"]["baseStamina"]) + "," + str(json_list["pokemonSettings"]["stats"]["baseAttack"]) + "," + str(json_list["pokemonSettings"]["stats"]["baseDefense"])+ ',' +quickMovesStr + ',' + cinematicMovesStr
print(str(outPokemon))
Bei der Ausführung wird es im folgenden Format an die Standardausgabe ausgegeben. ** Pokemon-Datenkennung, Pokemon-Typ 1, Pokemon-Typ 2, Ausdauer des Rennwerts, Angriff auf den Rennwert, Verteidigung des Rennwerts, Rassenwerttechnik 1, Rennwerttechnik 2 **
Ausführungsergebnis.csv (Teilauszug)
V0808_POKEMON_MELTAN,POKEMON_TYPE_STEEL,None,130,118,99,THUNDER_SHOCK_FAST::,FLASH_CANNON::THUNDERBOLT::
V0809_POKEMON_MELMETAL,POKEMON_TYPE_STEEL,None,264,226,190,THUNDER_SHOCK_FAST::,FLASH_CANNON::THUNDERBOLT::HYPER_BEAM::ROCK_SLIDE::SUPER_POWER::
Zunächst konnte ich die Pokemon-Daten als Rohdaten abrufen. Diese Daten weisen jedoch die folgenden Probleme auf:
(1) Nicht kompatibel mit Japanisch (2) Es gibt keine Bilderbuchnummer (3) Arora, Schatten, Umschreiben, normale (?) Anordnung (4) Begrenzte Züge sind nicht enthalten
Es scheint, dass (2) - (4) mechanisch verarbeitet werden können. In Bezug auf (1) frage ich mich, ob ich die Bilderbuchnummer und die Kartendaten vorbereiten kann. Was soll ich jedoch mit Technologiedaten tun?
Als ich direkt auf die API zugreifen konnte, war sie voller technischer Artikel wie Suche, Überprüfung einzelner Werte und GO Plus-Modoki. Aufgrund des Endes des Booms und der von der Betreibergesellschaft ergriffenen Maßnahmen ging es sofort zurück ... Ich bin nur den Benutzern dankbar, die weiter gespielt und analysiert haben.
Die Technikdaten zum Zeitpunkt des PvP sind wie folgt. Das problematischste davon ist ** "durationTurns" **. Es repräsentiert die Steifigkeitszeit (en) von Technik 1 zum Zeitpunkt des PvP, aber es scheint, dass die Steifigkeitszeit (en) = 1 + DauerDrehungen der Technik ist. Und als die Steifigkeitszeit 1 [s] betrug, war dieser Schlüssel nicht verfügbar. ** VOLT_SWITCH ist 4 Sekunden starr, DRAGON_BREATH ist 1 Sekunde starr **
"templateId": "COMBAT_V0250_MOVE_VOLT_SWITCH_FAST",
"combatMove": {
"uniqueId": "VOLT_SWITCH_FAST",
"type": "POKEMON_TYPE_ELECTRIC",
"power": 12.0,
"vfxName": "volt_switch_fast",
"durationTurns": 3,
"energyDelta": 16
}
"templateId": "COMBAT_V0204_MOVE_DRAGON_BREATH_FAST",
"combatMove": {
"uniqueId": "DRAGON_BREATH_FAST",
"type": "POKEMON_TYPE_DRAGON",
"power": 4.0,
"vfxName": "dragon_breath_fast",
"energyDelta": 3
}
Recommended Posts