Das letzte Mal konnte ich die gewünschten Daten grob extrahieren, daher möchte ich diese Daten dieses Mal in der Datenbank speichern. (Klicken Sie hier für den vorherigen Artikel https://qiita.com/mattya_527/items/9b90451e94de246525a4)
Stand 08.02.2020 OS:windows10 Anaconda:4.8.1 python:3.7.6 MySQL:8.0.19
Ich habe hier für die anfänglichen Einstellungen wie Installation verwiesen. (https://www.dbonline.jp/mysql/)
mysql -u root -p
Geben Sie ein Passwort ein, um MySQL zu starten.
create database loldb;
Erstellen Sie eine Datenbank mit dem Namen LOLdb in.
show databases;
Sie können die Liste der Datenbanken unter überprüfen. OK mit LOLdb
Installieren Sie zunächst die erforderlichen Module.
python -m pip mysql
Ich werde den Python-Code sofort schreiben.
#Importieren Sie MySQL db
import MySQLdb
#Stellen Sie eine Verbindung zur Datenbank her und generieren Sie den Cursor
connection = MySQLdb.connect(
host="localhost",
user="root",
passwd="{Passwort in MySQL gesetzt}",
db="LOLdb",
charset="utf8"
)
cursor = connection.cursor()
Sie können jetzt eine Verbindung zu der gerade erstellten Datenbank herstellen. Dann erstellen Sie die Tabelle.
#Tabelleninitialisierung
cursor.execute("DROP TABLE IF EXISTS match_data")
#Eine Tabelle erstellen
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)
)""")
Wenn in diesem Skript eine Tabelle mit dem Namen ** match_data ** vorhanden ist, wird diese gelöscht und neu erstellt. (Wenn Sie fertig sind, kommentieren Sie diese Arbeit aus und verarbeiten Sie sie nicht.) Die Gegenstände in der Tabelle sollten diejenigen sein, die Sie das letzte Mal abgeholt haben.
#Daten hinzufügen(Prüfung)
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)
#Anzeigen einer Datenliste
cursor.execute("SELECT * FROM match_data")
for row in cursor:
print(row)
#Führen Sie save aus
connection.commit()
#Verbindung schließen
connection.close()
Geändert, um beim Hinzufügen zur Tabelle ** Daten ** aus der Liste zu extrahieren. Denken Sie unbedingt an ** commit () **.
Jetzt können Sie die Tabelle erstellen, hinzufügen und sogar anzeigen. Ich werde den Code der hinzuzufügenden Daten schreiben. Dazu werde ich den Code verbessern, den ich zuletzt geschrieben habe.
###Gleicher Teil wie beim letzten Mal###
from riotwatcher import RiotWatcher
API_KEY = "{Erhaltener API-SCHLÜSSEL}"
watcher = RiotWatcher(API_KEY)
region = "jp1" #Serverauswahl: Japan Saba ist jp1
name = "Macha-Kun" #Geben Sie den Namen des Beschwörers ein
summoner = watcher.summoner.by_name(region,name) #Erfassung von Spielerdaten
recentmatchlists = watcher.match.matchlist_by_account(region,summoner["accountId"]) #Holen Sie sich eine Liste der Daten für die letzten 20 Spiele
matches = recentmatchlists["matches"]
match_data = watcher.match.by_id(region,matches[0]["gameId"]) #Extrahieren Sie nur das letzte Spiel
#Der Name des Beschwörers lautet"Macha-Kun"Extrahiert den Player und gibt seine Partner-ID zurück
for i in range(10):
match_data["participantIdentities"][i]["player"]
if match_data["participantIdentities"][i]["player"]["summonerName"] == name: #Stimmt der Name des Beschwörers überein?
par_Id = match_data["participants"][i]["participantId"]
###Teil bis zum letzten Mal###
###Der verbesserte Teil diesmal###
data=[] #Vorbereiten von Listendaten zum Hinzufügen zur Tabelle
data.append(name) #Name hinzufügen
# par_Geben Sie die Daten aus, die der ID entsprechen
if match_data["participants"][par_Id-1]["stats"]["participantId"] == par_Id: #par_Id-1 entspricht dem Index
if match_data["participants"][par_Id-1]["stats"]["win"] == True:#Wenn der Gewinn oder Verlust wahr ist, gewinnen Sie,Wenn falsch, verlieren
wol = "win"
else:wol = "lose"
data.append(wol) #Fügen Sie wol hinzu
kills = match_data["participants"][par_Id-1]["stats"]["kills"] #Anzahl der Kills
data.append(kills) #Kills hinzufügen
deaths = match_data["participants"][par_Id-1]["stats"]["deaths"] #Anzahl der Todesfälle
data.append(deaths) #Fügen Sie Todesfälle hinzu
assists = match_data["participants"][par_Id-1]["stats"]["assists"] #Anzahl der Vorlagen
data.append(assists) #Assists hinzufügen
championId = match_data["participants"][par_Id-1]["championId"] #Champion benutzt
data.append(championId) #ChampionId hinzufügen(Konvertieren Sie später die Champion-ID in den Champion-Namen.)
lane = match_data["participants"][par_Id-1]["timeline"]["lane"] #Fahrbahn
role = match_data["participants"][par_Id-1]["timeline"]["role"] #rollen
if role == "DUO_SUPPORT": #Unterstützung
roles = "SUP"
elif role == "DUO_CARRY": #tragen
roles = "ADC"
elif role == "SOLO": #Solo Lane
if lane == "TOP": #oben
roles = "TOP"
elif lane == "MIDDLE": #Mitte
roles = "MID"
elif role == "NONE":
roles = "JG" #Urwald
data.append(roles) #Rollen hinzufügen(Zunächst können Sie anhand der Rolle beurteilen, ob es sich um SUP, ADC, SOLO Lane oder Dschungel handelt. Wenn es sich um SOLO handelt, bestimmen Sie TOP oder MID.)
cs = match_data["participants"][par_Id-1]["stats"]["totalMinionsKilled"] #CS **Gibt es etwas anderes als Schergen und Dschungelkriechen, das für CS notwendig ist, weil es für CS in OPGG nicht ausreicht?
data.append(cs) #Fügen Sie cs hinzu
gold = match_data["participants"][par_Id-1]["stats"]["goldEarned"] #Gold verdienen
data.append(gold) #Gold hinzufügen
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"] #Schaden für den Champion
data.append(damage) #Füge Schaden hinzu
if match_data["participants"][par_Id-1]["teamId"] == 100: #100 ist die blaue Seite, 200 ist die rote Seite
side = "RED"
else: side = "BLUE"
data.append(side) #Seite hinzufügen
game_time = match_data["gameDuration"] #Spielzeit(Sekunden)
data.append(game_time) #game_Zeit hinzufügen(Konvertieren Sie die Spielzeit später in Minuten.)
Sie können es mit ** append () ** am Ende eines Listenelements hinzufügen. Schreiben Sie diesen Code vor den Speicherort, an dem Sie die Datenbank erstellen.
*** Ausführungsergebnis ***
*** Überprüfen Sie mit MySQL ***
Jetzt können Sie eine Tabelle erstellen und die Daten speichern.
Auf diese Weise könnten Daten gespeichert werden, sie können jedoch nur dann als Datenbank fungieren, wenn mehrere Daten gespeichert sind. Lassen Sie uns also den Code zum Initialisieren und Erstellen der Tabelle im vorherigen Code auskommentieren und löschen.
*** Ausführungsergebnis ***
Ich habe versucht, den Index der Übereinstimmung zu ändern und auszuführen, konnte ihn jedoch ordnungsgemäß speichern.
Diesmal habe ich MySQL sehr genossen und festgestellt, dass es ziemlich einfach ist, auf der Python-Seite damit zu spielen. Ich hatte den Wunsch, die Datenbank zu studieren, aber ich konnte nicht darauf treten, also war es eine gute Gelegenheit. Von nun an möchte ich eine OPGG-ähnliche WEB-Anwendung erstellen.
Recommended Posts