La dernière fois, j'ai pu extraire grossièrement les données que je voulais, alors cette fois, j'aimerais enregistrer ces données dans la base de données. (Cliquez ici pour l'article précédent https://qiita.com/mattya_527/items/9b90451e94de246525a4)
Au 08/02/2020 OS:windows10 Anaconda:4.8.1 python:3.7.6 MySQL:8.0.19
Je me suis référé ici pour les paramètres initiaux tels que l'installation. (https://www.dbonline.jp/mysql/)
mysql -u root -p
Entrez le mot de passe pour démarrer mysql.
create database loldb;
Créez une base de données nommée LOLdb dans.
show databases;
Vous pouvez consulter la liste des bases de données sur. OK avec LOLdb
Tout d'abord, installez les modules requis.
python -m pip mysql
J'écrirai le code Python immédiatement.
#Importer la base de données MySQL
import MySQLdb
#Connectez-vous à la base de données et générez le curseur
connection = MySQLdb.connect(
host="localhost",
user="root",
passwd="{Mot de passe défini dans mysql}",
db="LOLdb",
charset="utf8"
)
cursor = connection.cursor()
Vous pouvez maintenant vous connecter à la base de données que vous venez de créer. Créez ensuite la table.
#Initialisation de la table
cursor.execute("DROP TABLE IF EXISTS match_data")
#Créer une table
cursor.execute("""CREATE TABLE match_data(
id INT(10) AUTO_INCREMENT NOT NULL,
sn VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
wol VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
kills INT(10) NOT NULL,
deaths INT(10) NOT NULL,
assists INT(10) NOT NULL,
championId INT(10) NOT NULL,
roles VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
cs INT(10) NOT NULL,
gold INT(10) NOT NULL,
damage INT(10) NOT NULL,
side VARCHAR(20) NOT NULL COLLATE utf8mb4_unicode_ci,
game_time INT(10) NOT NULL,
PRIMARY KEY(id)
)""")
Dans ce script, si une table appelée ** match_data ** existe, elle est supprimée et recréée. (Une fois terminé, commentez ce travail et ne le traitez pas.) Les articles du tableau doivent être ceux que vous avez ramassés la dernière fois.
#Ajouter des données(tester)
cursor.execute("INSERT INTO match_data(sn,wol,kills,deaths,assists,championId,roles,cs,gold,damage,side,game_time) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",data)
#Affichage d'une liste de données
cursor.execute("SELECT * FROM match_data")
for row in cursor:
print(row)
#Exécuter la sauvegarde
connection.commit()
#Fermer la connexion
connection.close()
Modifié pour extraire de la liste ** données ** lors de l'ajout à la table. N'oubliez pas ** commit () **.
Vous pouvez désormais créer, ajouter et même afficher le tableau. J'écrirai le code des données à ajouter. Pour ce faire, je vais améliorer le code que j'ai écrit la dernière fois.
###Même partie que la dernière fois###
from riotwatcher import RiotWatcher
API_KEY = "{Clé API obtenue}"
watcher = 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
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 uniquement la dernière correspondance
#Le nom de l'invocateur est"Macha-kun"Extrait le joueur et renvoie ses partenairesId
for i in range(10):
match_data["participantIdentities"][i]["player"]
if match_data["participantIdentities"][i]["player"]["summonerName"] == name: #Le nom de l'invocateur correspond-il?
par_Id = match_data["participants"][i]["participantId"]
###Partie jusqu'à la dernière fois###
###La partie améliorée cette fois###
data=[] #Préparation des données de liste à ajouter au tableau
data.append(name) #Ajouter un nom
# par_Sortir les données qui correspondent à l'ID
if match_data["participants"][par_Id-1]["stats"]["participantId"] == par_Id: #par_Id-1 correspond à l'index
if match_data["participants"][par_Id-1]["stats"]["win"] == True:#Si la victoire ou la perte est vraie, gagnez,Si faux, perdez
wol = "win"
else:wol = "lose"
data.append(wol) #Ajouter wol
kills = match_data["participants"][par_Id-1]["stats"]["kills"] #Nombre de victimes
data.append(kills) #Ajouter des éliminations
deaths = match_data["participants"][par_Id-1]["stats"]["deaths"] #Nombre de décès
data.append(deaths) #Ajouter des décès
assists = match_data["participants"][par_Id-1]["stats"]["assists"] #Nombre de passes
data.append(assists) #Ajouter des aides
championId = match_data["participants"][par_Id-1]["championId"] #Champion utilisé
data.append(championId) #Ajouter championId(Plus tard, convertissez l'ID de champion en nom de champion.)
lane = match_data["participants"][par_Id-1]["timeline"]["lane"] #voie
role = match_data["participants"][par_Id-1]["timeline"]["role"] #rouleau
if role == "DUO_SUPPORT": #soutien
roles = "SUP"
elif role == "DUO_CARRY": #porter
roles = "ADC"
elif role == "SOLO": #Voie solo
if lane == "TOP": #Haut
roles = "TOP"
elif lane == "MIDDLE": #Milieu
roles = "MID"
elif role == "NONE":
roles = "JG" #jungle
data.append(roles) #Ajouter des rôles(Tout d'abord, vous pouvez juger s'il s'agit de SUP, ADC, SOLO Lane ou jungle en regardant le rôle. Quand c'est SOLO, déterminez TOP ou MID.)
cs = match_data["participants"][par_Id-1]["stats"]["totalMinionsKilled"] #CS **Y a-t-il autre chose que les sbires et le fluage de la jungle qui est nécessaire pour CS car ce n'est pas suffisant pour CS vu dans OPGG?
data.append(cs) #Ajouter cs
gold = match_data["participants"][par_Id-1]["stats"]["goldEarned"] #Gagner de l'or
data.append(gold) #Ajouter de l'or
damage = match_data["participants"][par_Id-1]["stats"]["magicDamageDealtToChampions"] + match_data["participants"][par_Id-1]["stats"]["physicalDamageDealtToChampions"] + match_data["participants"][par_Id-1]["stats"]["trueDamageDealtToChampions"] #Dommages au champion
data.append(damage) #Ajouter des dégâts
if match_data["participants"][par_Id-1]["teamId"] == 100: #100 est le côté bleu, 200 est le côté rouge
side = "RED"
else: side = "BLUE"
data.append(side) #Ajouter un côté
game_time = match_data["gameDuration"] #Temps de jeu(Secondes)
data.append(game_time) #game_Ajouter du temps(Convertissez plus tard le temps de jeu en minutes.)
Vous pouvez l'ajouter à la fin d'un élément de liste en utilisant ** append () **. Écrivez ce code avant l'emplacement où vous créez la base de données.
*** Résultat de l'exécution ***
*** Vérifiez avec MySQL ***
Vous pouvez maintenant créer une table et enregistrer les données.
Avec cela, une donnée peut être stockée, mais elle ne peut pas fonctionner comme une base de données à moins que plusieurs données ne soient stockées. Alors, commentons et supprimons le code d'initialisation et de création de la table dans le code précédent.
*** Résultat de l'exécution ***
J'ai essayé de changer l'index du match et de l'exécuter, mais j'ai pu le stocker correctement.
J'ai aimé utiliser MySQL cette fois-ci et j'ai trouvé qu'il était assez facile de jouer avec du côté Python. J'avais envie d'étudier la base de données, mais je ne pouvais pas marcher dessus, c'était donc une bonne opportunité. Désormais, je souhaite créer une application WEB de type OPGG.
Recommended Posts