[PYTHON] Extraire les données et les compétences de Pokemon GO Pokemon

Je suis désolé de dire que j'ai redémarré Pokemon Go à partir de janvier de l'année dernière. Je le fais depuis un an, mais il y a eu également un gros ajout du côté de Pokemon Go. C'est un match en ligne tant attendu. Cela ne m'intéressait pas, mais quand je l'ai essayé, c'était étonnamment amusant et je voulais moi-même penser à des simulations et à des batailles efficaces. Alors, comment collectez-vous les données Pokemon et les données techniques? C'est une histoire.

Aperçu

1. Examen de la méthode de collecte des données

C'était la première méthode que j'ai proposée. Toutes les données de statut et de compétence dans Pokemon Go, y compris les sites étrangers et les sites nationaux, sont ouvertes au public. Cependant, comme il n'est pas destiné à un usage secondaire, un procédé pour l'extraire de la bande par grattage, etc. est nécessaire.

Proposition 1. Collecte sur le site Web
Il s'agit d'une méthode de scraping à partir de la page publiée sur le site de capture.
Proposition 2. Extrait des données du jeu
C'est ce qui s'explique par le mot "analyse". Je pensais que si les données étendues pouvaient être obtenues, elles pourraient être utilisées.

2. Adoptez un "extrait des données du jeu"

Un référentiel qui publie des données étendues où il a démontré sa puissance de recherche, comme la recherche Google [[pokemongo-dev-contrib / pokemongo-game-master](https://github.com/pokemongo-dev-contrib/pokemongo- game-master)] a été rencontré. J'ai donc pensé qu'un cas était réglé, mais ** il y avait trop de choses supplémentaires dans les données **. En plus des Pokémon et des données techniques, il comprend également les costumes des joueurs et diverses valeurs de réglage.

3. Trouvez la pièce dont vous avez besoin à partir des données du jeu

À propos, ce fichier est nommé ** GAME_MASTER.json ** et contient beaucoup de données de réglage Pokemon GO telles que les données de costume, les valeurs de réglage de bataille PvP, les données Pokemon, l'énergie des compétences, etc. comme mentionné ci-dessus. Pour cette raison, c'est une grande taille de 3,4 Mo et il y a du gaspillage. Tout d'abord, nous en extrairons les données nécessaires.

Puisqu'il existe diverses données, examinez d'abord la partie données de Pokemon.

GAME_MASTER.Extrait partiel et mise en forme des données Pokemon de 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"],
  }, 
  }],

C'était là. Dans la figure, seule la partie des données jugée importante cette fois-ci a été extraite, mais diverses autres données sont également incluses. Bien qu'il ne soit pas suffisant de le résumer, il peut être déduit du nom de la clé et des données comme suit.

Key Contenu des données
templateId Identifiant de données Pokémon
pokemonId Nom du Pokémon
stats Valeur de la course
type type
quickMoves Technique 1
cinematicMoves Technique 2

De plus, ces données ne semblent pas inclure de techniques pour une durée limitée.

4. Extraction de données par programmation

Je pense que vous êtes 100 fois plus détaillé que moi à ce stade, mais je publierai mon programme pour le moment. Chaque donnée est séparée par une virgule afin de pouvoir être utilisée au format csv. Je ne voulais pas utiliser les données techniques telles quelles, alors je les ai attachées de force avec :: comme délimiteur.

GAME_MASTER_pokemon_parser.py


# -*- coding: utf-8 -*-

import json
import re

#Préparez un modèle pour l'expression régulière qui correspond aux données de Pokemon
pattern = '^V0\d+_POKEMON_.+'

f = open('GAME_MASTER.json', 'r')
json_dict = json.load(f)

#En tant que clé supérieure"itemTemplates"Puisqu'il y en a, déployez-le d'abord.
for json_list in json_dict["itemTemplates"]:
	templateIdData = json_list["templateId"]
	result = re.match(pattern, templateIdData)

	#Extraire les données nécessaires lorsqu'elles correspondent aux données Pokemon
	if (result):
		#Accéder aux données du dictionnaire au format get car certains Pokémon n'ont pas de données de compétences
		#(Doble n'avait pas la compétence)
		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))

Lorsqu'il est exécuté, il sera émis vers la sortie standard dans le format suivant. ** Identifiant de données Pokemon, Pokemon type 1, Pokemon type 2, endurance de valeur de course, attaque de valeur de course, défense de valeur de course, technique de valeur de course 1, technique de valeur de course 2 **

Résultat d'exécution.csv (extrait partiel)


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. Tâches restantes

Tout d'abord, j'ai pu récupérer les données Pokémon sous forme de données brutes. Cependant, ces données présentent les problèmes suivants:

(1) Non compatible avec le japonais (2) Il n'y a pas de numéro de livre d'images (3) Arora, ombre, réécriture, arrangement normal (?) (4) Les mouvements limités ne sont pas inclus

Il semble que (2) - (4) peuvent être traités mécaniquement. Concernant (1), je me demande si je peux préparer le numéro du livre d'images et les données cartographiques. Cependant, que dois-je faire des données techniques?

6. Post-scriptum

Lorsque j'ai pu accéder directement à l'API, elle était pleine d'articles techniques tels que la recherche, la vérification de la valeur individuelle et le modoki GO Plus. En raison de la fin du boom et des mesures prises par l'exploitant, il est tombé aussitôt ... Je suis simplement reconnaissant aux utilisateurs qui ont continué à jouer et à analyser.

prime

Les données techniques au moment du PvP sont les suivantes. Le plus gênant est ** "durationTurns" **. Il représente le temps de rigidité [s] de la technique 1 au moment du PvP, mais il semble que le temps de rigidité [s] = 1 + duréeTurns de la technique. Et lorsque le temps de rigidité était de 1 [s], cette clé n'était pas disponible. ** VOLT_SWITCH est rigide de 4 secondes, DRAGON_BREATH est rigide de 1 seconde **

    "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

Extraire les données et les compétences de Pokemon GO Pokemon
Extraire les données csv et calculer
Relation entre la conversion des types de données Firestore et Go
Extraction de données depuis S3
Suivez la structure de données de Blender et extrayez les coordonnées des sommets de fbx
Extraire les données Twitter avec CSV
Extraire et empaqueter des images initrd
Modélisation de données point et figure
Avec les types de données algébriques et FizzBuzz
J'ai essayé d'extraire des noms de joueurs et de compétences d'articles sportifs