[PYTHON] Préparer un pseudo serveur API à l'aide d'actions GitHub

introduction

Peut-être plus récemment, une fonctionnalité appelée Actions GitHub a été ajoutée. C'est celui qui peut déclencher les actions spécifiées (exécution du script shell) pour l'événement spécifié. Par exemple, lorsque le PR vers la branche dev est fusionné, il est construit et poussé vers la branche dev-pages, qui est une fonction pour ce que l'on appelle CI / CD.

Cette fois, nous avons participé à la version Hokkaido du site de contre-mesures COVID-19, qui est actuellement un grand pas, et développé en utilisant cette fonction. En prenant cela comme exemple, est-il possible de faire de GitHub un pseudo serveur API comme le titre l'indique? Je ferai une proposition dans cet article.

Planification avec des actions GitHub

Comment est-il arrivé aux actions

https://github.com/Kanahiro/covid19hokkaido_scraping Il s'agit d'un script créé pour prendre en charge les données au format JSON qui sont la source de visualisation lors du développement du site de contre-mesures mentionné ci-dessus. Lorsqu'il est exécuté (dans la version à ce moment-là), il a pour fonction de patrouiller sur le site Web de la route, de lire le fichier CSV statique contenu dans la branche et de sortir le fichier json (en cours de lecture du fichier CSV externe). ). Au départ, pour le moment, je devais exécuter manuellement main.py avec le script que j'avais écrit. À ce moment-là, un membre de JUST Road IT a suggéré "Pouvez-vous faire la planification?" À ce stade, je ne savais pas si je pouvais le faire, donc je n'ai pas répondu pour le moment, mais quand j'ai secrètement enquêté sur la méthode de mise en œuvre, c'était étonnamment facile, alors je l'ai implémentée (Actions is God).

Méthode de planification

Site de référence: Utiliser les actions GitHub comme planificateur

Les actions sont définies dans le fichier yaml. Définit le moment «activé» pour tirer en premier. Pour une utilisation CI / CD normale, il peut être déclenché en poussant vers une branche spécifique. Cependant, en écrivant comme suit, il peut être exécuté toutes les 15 minutes.


on:
  schedule:
    - cron:  '*/15 * * * *'

#(C'est un secret ce cron? Qu'est-ce que c'est?)

Vous pouvez maintenant planifier. Ensuite, exécutez le script ci-dessus toutes les 15 minutes et poussez les données json générées dans une autre branche! J'ai donc décidé de planifier avec le fichier yaml suivant.


name: Python application

on:
  schedule:
    - cron:  '*/15 * * * *'

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.8
      uses: actions/setup-python@v1
      with:
        python-version: 3.8
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run script
      run: |
        python main.py #Exécutez le script principal
    - name: deploy
      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: ./data
        publish_branch: gh-pages

Je l'ai écrit en référence au fichier yaml d'une autre personne, alors j'ai pleuré quand on m'a dit de l'écrire avec une gratte complète. J'ai trouvé incroyable que vous puissiez installer la dépendance avec pip. Lorsque main.py est exécuté, il génère des fichiers json dans le répertoire de données du même répertoire. Après avoir traité le script, transférez les fichiers du répertoire data vers gh-pages (autorisé par secrets.GITHUB_TOKEN) Ainsi, gh-pages contient désormais des fichiers json qui sont générés une fois toutes les 15 minutes.

En tant que pseudo serveur API

J'ai l'impression que le titre est frauduleux, mais le pseudo serveur d'API que je propose est complet. https://raw.githubusercontent.com/Kanahiro/covid19hokkaido_scraping/gh-pages/patients.json Il s'agit d'un fichier json que Actions génère automatiquement toutes les 15 minutes sur le référentiel de scripts ci-dessus. Ce fichier ne semble pas être soumis aux limites CORS (bien que je ne l'ai pas encore vérifié moi-même), il peut donc être lu directement à la réception. En d'autres termes, si vous obtenez ce fichier et "colorez" les éléments du recto, vous pouvez en fait le traiter comme un serveur API!

C'était une proposition. Je pense que c'est efficace quand il n'y a pas de ressource pour construire un serveur API séparé, c'est redondant ou c'est gênant. De plus, je pense qu'il est bon d'avoir de meilleures perspectives et de tout terminer sur GitHub sans interposer d'autres services.

Postscript: À propos des pages GitHub

La destination du json de sortie mentionné ci-dessus était la branche gh-pages, mais pour une raison quelconque, je ne pouvais pas y accéder via github.io, donc j'accédais directement au raw.githubusercontent.com ci-dessus. Cependant, dans les commentaires, les échanges suivants ont été faits.

スクリーンショット 2020-03-14 22.32.40.png

Hmm…? Je me sens comme un nom de compte que je connais bien ...

Le script Actions de plus tôt



      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: ./data
        publish_branch: gh-pages

(Cette personne (@peaceiris) est la personne qui a fait l'action de pousser vers les pages gh utilisées dans le script ...) Donc, j'ai choisi de sortir à nouveau sur gh-pages à partir des paramètres ...

スクリーンショット 2020-03-14 22.48.05.png

https://kanahiro.github.io/covid19hokkaido_scraping/patients.json

J'ai pu l'héberger en toute sécurité sur gh-pages, je suis désolé (et merci). Donc, après avoir défini les Actions, vous devez à nouveau modifier les paramètres pour héberger les pages gh, alors soyez prudent.

Recommended Posts

Préparer un pseudo serveur API à l'aide d'actions GitHub
Créer un pseudo serveur d'API REST à l'aide de pages GitHub
J'ai construit une roue pour Windows à l'aide d'actions Github
Apprendre un réseau neuronal à l'aide de Chainer
Créez un serveur Web API à une vitesse explosive en utilisant HUG
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
Créez facilement un serveur DNS en utilisant Twisted
Configurer un serveur de messagerie avec Twisted
Créez facilement un serveur API à l'aide du module go-json-rest
Créons une API REST en utilisant SpringBoot + MongoDB
Liste des référentiels de sortie à l'aide de l'API Github sur Mac
J'ai créé un site de liste de Kindle Prime Reading en utilisant Scrapy et GitHub Actions
Télécharger en tant que données ouvertes à l'aide de l'API CKAN en Python et lier automatiquement avec les actions Github
Essayez de dessiner un graphe social à l'aide de l'API Twitter v2
Configurer un serveur de fichiers sur Ubuntu 20.04 à l'aide de Samba
Construire un modèle seq2seq en utilisant la vue d'ensemble de l'API fonctionnelle de Keras
Enregistrez des tickets avec l'API de Redmine en utilisant des requêtes Python
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé de dessiner une pseudo figure fractale en utilisant Python
[Vagrant] Configurer un serveur API simple avec python
Créer un environnement de développement d'API rapide léger à l'aide de Docker