[PYTHON] Erstellt einen Dienst, mit dem Sie J-League-Daten durchsuchen können

Überblick

Artikelübersicht

Während ich den diesmal erstellten Service vorstelle, werde ich den Entwicklungsfluss und die Stolperpunkte vorstellen. Wenn es Menschen hilft, die ähnliche Dinge machen ...

App Übersicht

Grund für die Erstellung einer App

――Ich bin ein Unterstützer der Fußball-J-League-Mannschaft namens Kawasaki Frontale, aber ich wollte frühere Daten nachschlagen, nachdem ich den Rekord von Siegen in Folge (10 Siege in Folge!) Im Jahr 2020 gebrochen hatte. ――Ich wollte es mir selbst machen, WebAPI besser zu verstehen.

Gesamtzusammensetzung

Der Quellcode für Front und Back ist auf GitHub verfügbar.

Serverkonfigurationsdiagramm

Jsearch-saverimage (1).png

ER-Diagramm

ER図.png

Technologie verwendet

Schöpfungsfluss & Stolperpunkt

fließen

  1. Erstellen Sie mit Docker eine Umgebung
  2. Erstellen Sie eine Datenbank durch Scraping von J League Data Site.
  3. Konvertieren Sie Daten mithilfe der Flask-API in die Web-API
  4. In AWS bereitstellen

Flussdetails

Ich werde den Entwicklungsfluss erläutern, während ich die Websites vorstelle, auf die ich mich bezog.

1. Erstellen Sie mit Docker eine Umgebung

Für die Basis habe ich hier verwiesen (Herstellen einer Verbindung zu MySQL mit Python in Docker).

version: "3"

services:
  mysql_db_j:
    container_name: "mysql_db_j"
    image: mysql:5.7
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    environment: # Set up mysql database name and password
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: employees
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    networks:
      - app-tier

  python3_j:
    restart: always
    build: .
    ports:
      - '3000:3000'
      - '5000:5000'
    container_name: "python3_j"
    working_dir: "/root/"
    tty: true
    stdin_open: true
    depends_on:
      - mysql_db_j
    networks:
      - app-tier
    volumes:
      - .:/root/app/
    # command: python3 app/app.py
    command: >
      bash -c "python3 app/create_teamid.py
      && python3 app/create_result.py
      && python3 app/app.py
      "
    
networks:
  app-tier:
    driver: bridge

Ich habe einen MySQL- und Python-Container gestartet und verbunden. Ebenfalls. Mit dem Befehl `:` werden die DB-Erstellung und der Flask beim Start gestartet.

2. Erstellen Sie eine Datenbank durch Scraping von J League Data Site.

Beim Scraping werden `Anfragen``` und` beautifulsoup verwendet. Ich habe `` `mysql-connector-python verwendet, um eine Verbindung von Python zu MySQl herzustellen. Siehe hier ・ Zusammenfassung der Verwendung von Python + mysql-connector-pythonInstallieren und Verbinden von MySQL Connector mit Python3 [Einführung in die bequeme Verwendung]Offizielles Dokument

3. Konvertieren Sie Daten mithilfe der Flask-API in die Web-API

Die mit der Flask-API in der Datenbank gespeicherten Daten werden als JSON gesendet. Referenz ・ Einfach zu verwendende Flasche

Außerdem müssen Sie `` `flask_cors``` verwenden

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Ich bekomme so einen Fehler. Notwendig für CROS-Maßnahmen.

4. In AWS bereitstellen

Installieren Sie Docker auf EC2 und starten Sie Docker wie folgt. Ich wollte unbedingt ECS verwenden ... Referenz

Stolperpunkt

Was soll ich mit dem Design machen ...

Beim Versuch, eine Web-API zu entwickeln, konnte ich nicht viele Informationen finden, die als Referenz für den "ersten Schritt" verwendet werden könnten. Es gibt verschiedene Erklärungen für die Prinzipien von Restful, aber wie ist es eigentlich Standard? Es wird sein. Vorerst habe ich es basierend auf meinen Erfahrungen mit der Web-API entworfen.

DB wird nicht gespeichert! ??

Ich habe mit einer Bibliothek namens mysql-connector-python eine Verbindung zu MySQL hergestellt, aber als ich von Python aus operierte, gab es das Problem, dass es nicht gespeichert wurde, selbst wenn ich die DB-Verarbeitung hinzugefügt habe. Ich stecke schon lange fest, aber in der offiziellen Dokumentation "Connector / Python standardmäßig" Es ist wichtig, diese Methode nach jeder Transaktion aufzurufen, die die Daten in einer Tabelle ändert, die die Transaktionsspeicher-Engine verwendet, da sie nicht automatisch festgeschrieben wird. " Ich muss das Dokument richtig lesen!

AWS Juckreiz

Beim Veröffentlichen der Vorderseite auf Github-Seiten tritt der folgende Fehler auf

index.js:30 Mixed Content: The page at 'https://yuta97.github.io/j-search-front/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://18.178.166.9:5000/continuous-records/match/win/?yearFrom=2017&yearTo=2019&continuou_recordFrom=2&continuou_recordTo=15'. This request has been blocked; the content must be served over HTTPS.

Kurz gesagt, es scheint, dass das Problem darin besteht, dass Sie den http-API-Server auf der https-Site aufrufen. Es scheint, dass solche gemischten Inhalte veraltet sind. Als Lösung habe ich versucht, SSL für den EC2-API-Server zu verwenden, aber es funktioniert nicht ... Als sorgfältige Maßnahme hosten Sie mit S3 und verwenden Sie die http-Kommunikation an der Rezeption.

Impressionen

Schreiben Sie Ihre Eindrücke träge.

――Es ist wichtig, dass Ihre geistige Gesundheit klein wird und sich wie eine agile Entwicklung verbessert. ――Wie suchen Medienvertreter nach Aktualisierungen von Datensätzen? Gibt es eine Datenbank? ――Sie müssen sich während der Verwendung an AWS gewöhnen. Es fällt mir immer noch schwer zu verstehen. ――Ich möchte mehr über Sicherheit erfahren. Wenn Sie nicht wissen, um welche Art von Angriff es sich handelt, wissen Sie nicht, was Sie tun sollen.

Zukunftsaussichten

Ich werde auflisten, was ich in Zukunft tun möchte.

Recommended Posts

Erstellt einen Dienst, mit dem Sie J-League-Daten durchsuchen können
Erstellen Sie ein Plugin, mit dem Sie in Python nach Registerkarten für Sublime Text 3 suchen können
Einführung von "Sherlock", einem CLI-Tool, mit dem Sie in SNS nach Benutzernamen suchen können
Wir haben eine Erweiterung veröffentlicht, mit der Sie Xarray-Daten wie eine Python-Datenklasse definieren können.
Ein Hinweis, mit dem Sie die Python-Umgebung von Pineapple mit pyenv ändern können
Einführung von "Scikit-Mobility", einer Bibliothek, mit der Sie menschliche Flussdaten mit Python einfach analysieren können (Teil 1)
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Ich habe ein System erstellt, mit dem Sie nur durch einen Anruf twittern können
Lern-Roadmap, mit der Sie Services mit Python von Grund auf neu entwickeln und veröffentlichen können
Ich habe versucht, mit Docker einen Dienst aufzubauen, der maschinell erlernte Daten mit explosiver Geschwindigkeit verkauft
Erstellt eine Methode zum Downsample für nicht ausgeglichene Daten (für die Binomialklassifizierung).
Ein Python-Skript, das Oracle-Datenbankdaten in CSV konvertiert
Wenn Sie Datenwissenschaftler werden möchten, beginnen Sie mit Kaggle
Wollen Sie nicht sagen, dass Sie ein Gesichtserkennungsprogramm erstellt haben?
Erstellt einen Discord-Bot, um Sie über Aktualisierungen zu informieren und Romanautor zu werden
Eine Geschichte, die Schwierigkeiten hatte, 3 Millionen ID-Daten in einer Schleife zu verarbeiten
Ich habe ein Buch geschrieben, in dem Sie maschinelle Lernimplementierungen und -algorithmen auf ausgewogene Weise lernen können.
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
[Choregraphe] Erstellt eine Box, in der Sie jede Nachricht an ChatWork senden können