[PYTHON] Création d'un service qui vous permet de rechercher des données J-League

Aperçu

Résumé de l'article

En présentant le service créé cette fois, je présenterai le flux de développement et les points d'achoppement. Si cela aide les gens qui font des choses similaires ...

Aperçu de l'application

Raison de la création d'une application

`` Je suis un partisan de l'équipe de football J-League appelée Kawasaki Frontale, mais je voulais consulter les données du passé après avoir battu le record de victoires consécutives (10 victoires consécutives!) En 2020. «Je voulais faire moi-même mieux comprendre WebAPI.

Composition globale

Le code source pour Front et Back est disponible sur GitHub.

Diagramme de configuration du serveur

Jsearch-saverimage (1).png

Diagramme ER

ER図.png

Technologie utilisée

--Python (Flacon dans la bibliothèque)

Flux de création et point d'achoppement

couler

  1. Créez un environnement avec Docker
  2. Créez une base de données en grattant J League Data Site
  3. Convertissez les données en API Web à l'aide de l'API Flask
  4. Déployer sur AWS

Détails du flux

J'expliquerai le déroulement du développement tout en présentant les sites auxquels j'ai fait référence.

1. Créez un environnement avec Docker

Pour la base, je me suis référé ici (Connexion à MySQL dans Docker avec Python).

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

J'ai lancé un conteneur MySQL et Python et les ai connectés. Aussi. Avec `` commande: '', la création de DB et Flask sont lancés au démarrage.

2. Créez une base de données en grattant J League Data Site

Le grattage utilise des requêtes '' et beautifulsoup ''. J'ai utilisé `` mysql-connector-python '' pour me connecter de Python à MySQl. Reportez-vous ici ・ Résumé de l'utilisation de Python + mysql-connector-pythonComment installer et connecter MySQL Connector avec Python3 [Présentation de son utilisation confortable]Document officiel

3. Convertissez les données en API Web à l'aide de l'API Flask

Les données enregistrées dans la base de données à l'aide de l'API Flask sont envoyées au format JSON. référence ・ Flacon facile à utiliser

De plus, vous devez utiliser flask_cors```

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

J'obtiens une erreur comme celle-ci. Nécessaire pour les mesures CROS.

4. Déployer sur AWS

Installez Docker sur EC2 et démarrez Docker en vous référant à ce qui suit. Je voulais vraiment utiliser ECS ... référence

Point de trébuchement

Que dois-je faire avec le design ...

Lorsque j'essayais de développer une API Web, je n'ai pas trouvé beaucoup d'informations qui pourraient être utilisées comme référence pour la "première étape". Il existe différentes explications des principes de Restful, mais comment est-ce réellement la norme? Ce sera. Pour le moment, je l'ai conçu sur la base de mon expérience avec l'API Web.

DB n'est pas sauvegardé! ??

Je me connectais à MySQL avec une bibliothèque appelée mysql-connector-python, mais lorsque je fonctionnais à partir de Python, il y avait un problème car il n'était pas enregistré même si j'ajoutais le traitement de la base de données. Je suis bloqué depuis longtemps, mais dans la Documentation officielle, "Connector / Python par défaut" Il est important d'appeler cette méthode après chaque transaction qui modifie les données dans une table qui utilise le moteur de stockage des transactions, car elle n'effectue pas de validation automatique. " Je dois lire le document correctement!

Démangeaisons AWS

Lors de la publication du recto sur les pages Github, l'erreur suivante se produit

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.

En bref, il semble que le problème soit que vous appelez le serveur API http sur le site https. Il semble qu'un tel contenu mixte soit obsolète. En guise de solution, j'ai essayé d'utiliser SSL pour le serveur API EC2, mais cela ne fonctionne pas ... Comme mesure minutieuse, hébergez avec S3 et utilisez la communication http à la réception.

Impressions

Écrivez vos impressions paresseusement.

――Il est important pour votre santé mentale de faire petit et de s'améliorer comme le développement agile. ――Comment les gens dans les médias vérifient-ils les mises à jour des enregistrements? Existe-t-il une base de données? ―― Vous devez vous habituer à AWS lors de son utilisation. J'ai encore du mal à comprendre. «Je veux en savoir plus sur la sécurité. Si vous ne savez pas quel type d'attaque il y a, vous ne saurez pas quoi faire.

Perspectives d'avenir

Je vais énumérer ce que je veux faire à l'avenir.

--Fonction de tri

Recommended Posts

Création d'un service qui vous permet de rechercher des données J-League
Créez un plugin qui vous permet de rechercher les onglets Sublime Text 3 en Python
Présentation de «Sherlock», un outil CLI qui vous permet de rechercher des noms d’utilisateur dans SNS
Nous avons publié une extension qui vous permet de définir des données xarray comme une classe de données Python.
Notez que l'environnement Python de Pineapple peut être modifié avec pyenv
Introduction de "scikit-mobility", une bibliothèque qui vous permet d'analyser facilement les données de flux humain avec Python (Partie 1)
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
J'ai créé un système qui vous permet de tweeter simplement en passant un appel téléphonique
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python
J'ai essayé de créer un service qui vend des données apprises par machine à une vitesse explosive avec Docker
Création d'une méthode pour sous-échantillonner les données non équilibrées (pour la classification binomiale)
Un script python qui convertit les données Oracle Database en csv
Si vous souhaitez devenir data scientist, commencez par Kaggle
Vous ne voulez pas dire que vous avez créé un programme de reconnaissance faciale?
Création d'un bot Discord pour vous informer des mises à jour pour devenir romancier
Une histoire qui avait du mal à traiter en boucle 3 millions de données d'identification
J'ai écrit un livre qui vous permet d'apprendre les implémentations et les algorithmes d'apprentissage automatique de manière équilibrée.
Comment envoyer une image visualisée des données créées en Python à Typetalk
[Choregraphe] J'ai créé une boîte dans laquelle vous pouvez poster n'importe quel message sur ChatWork.