[PYTHON] Extrahieren Sie Pokemon GO Pokemon-Daten und Skill-Daten

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.

Überblick

1. Prüfung der Datenerhebungsmethode

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.

Vorschlag 1. Sammlung von der Website
Dies ist eine Methode zum Scraping von der auf der Erfassungssite veröffentlichten Seite.
Vorschlag 2. Aus den Spieldaten extrahieren
Dies wird durch das Wort "Analyse" erklärt. Ich dachte, wenn die erweiterten Daten erhalten werden könnten, könnten sie verwendet werden.

2. Nehmen Sie "Auszug aus In-Game-Daten" an

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.

3. Finden Sie das benötigte Teil aus den Daten im Spiel

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.

4. Programmatische Datenextraktion

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::

5. Verbleibende Aufgaben

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?

6. Nachtrag

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.

Bonus

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

Extrahieren Sie Pokemon GO Pokemon-Daten und Skill-Daten
CSV-Daten extrahieren und berechnen
Beziehung zwischen Firestore- und Go-Datentypkonvertierung
Daten aus S3 extrahieren
Folgen Sie der Datenstruktur von Blender und extrahieren Sie die Scheitelpunktkoordinaten aus fbx
Extrahieren Sie Twitter-Daten mit CSV
Extrahieren und verpacken Sie initrd-Images
Punkt- und Figurendatenmodellierung
Mit algebraischen Datentypen und FizzBuzz
Ich habe versucht, Spieler- und Fertigkeitsnamen aus Sportartikeln zu extrahieren