[PYTHON] Bereiten Sie einen Pseudo-API-Server mit GitHub-Aktionen vor

Einführung

Vielleicht wurde in jüngerer Zeit eine Funktion namens GitHub Actions hinzugefügt. Dies ist diejenige, die die angegebenen Aktionen (Ausführung des Shell-Skripts) für das angegebene Ereignis auslösen kann. Wenn beispielsweise der PR zum Dev-Zweig zusammengeführt wird, wird er erstellt und in den Dev-Pages-Zweig verschoben, der eine Funktion für sogenannte CI / CD ist.

Dieses Mal nahm ich an der Hokkaido-Version der COVID-19-Gegenmaßnahmen-Website teil, die derzeit ein großer Schritt ist, und entwickelte sie mit dieser Funktion. Ist es am Beispiel möglich, GitHub zu einem Pseudo-API-Server zu machen, wie der Titel schon sagt? Ich werde in diesem Artikel einen Vorschlag machen.

Planen mit GitHub-Aktionen

Wie es zu Aktionen kam

https://github.com/Kanahiro/covid19hokkaido_scraping Dies ist ein Skript, das erstellt wurde, um die Daten im JSON-Format zu unterstützen, die die Quelle der Visualisierung bei der Entwicklung der oben genannten Website für Gegenmaßnahmen darstellen. Bei der Ausführung (in der damaligen Version) hat es die Funktion, die Website der Straße zu patrouillieren, die statische CSV-Datei im Zweig zu lesen und die JSON-Datei auszugeben (derzeit die externe CSV-Datei zu lesen). ). Zuerst musste ich main.py mit dem Skript, das ich vorerst geschrieben hatte, manuell ausführen. Zu diesem Zeitpunkt schlug ein Mitglied von JUST Road IT vor: "Können Sie eine Planung durchführen?" Zu diesem Zeitpunkt wusste ich nicht, ob ich es schaffen könnte, also antwortete ich vorerst nicht, aber als ich die Implementierungsmethode heimlich untersuchte, war es überraschend einfach, also implementierte ich sie (Actions is God).

Planungsmethode

Referenzseite: GitHub-Aktionen als Scheduler verwenden

Aktionen werden in der yaml-Datei definiert. Definiert das Timing "Ein", um zuerst zu feuern. Bei normaler CI / CD-Verwendung kann dies durch Drücken auf einen bestimmten Zweig ausgelöst werden. Wenn Sie jedoch wie folgt schreiben, kann es alle 15 Minuten ausgeführt werden.


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

#(Es ist ein Geheimnis, dass Cron? Was ist das?)

Die Planung ist jetzt abgeschlossen. Führen Sie dann das obige Skript alle 15 Minuten aus und übertragen Sie die in einem anderen Zweig generierten JSON-Daten! Also entschied ich mich, mit der folgenden Yaml-Datei zu planen.


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 #Führen Sie das Hauptskript aus
    - name: deploy
      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: ./data
        publish_branch: gh-pages

Ich habe es mit Bezug auf die Yaml-Datei einer anderen Person geschrieben, also weine ich, wenn ich gebeten werde, mit vollem Kratzer zu schreiben. Ich fand es erstaunlich, dass man die Abhängigkeit mit pip installieren konnte. Wenn main.py ausgeführt wird, werden JSON-Dateien im Datenverzeichnis im selben Verzeichnis ausgegeben. Verschieben Sie nach der Verarbeitung des Skripts die Dateien im Datenverzeichnis auf gh-pages (autorisiert von secrets.GITHUB_TOKEN). Gh-Seiten enthalten jetzt JSON-Dateien, die alle 15 Minuten generiert werden.

Als Pseudo-API-Server

Ich halte den Titel für betrügerisch, aber der von mir vorgeschlagene Pseudo-API-Server ist vollständig. https://raw.githubusercontent.com/Kanahiro/covid19hokkaido_scraping/gh-pages/patients.json Dies ist eine JSON-Datei, die Actions automatisch alle 15 Minuten im obigen Skript-Repository generiert. Diese Datei scheint keinen CORS-Beschränkungen zu unterliegen (obwohl ich sie selbst noch nicht überprüft habe), sodass sie direkt an der Rezeption gelesen werden kann. Mit anderen Worten, wenn Sie diese Datei erhalten und die Elemente auf der Vorderseite "färben", können Sie sie tatsächlich als API-Server behandeln!

Es war ein Vorschlag. Ich denke, dass es effektiv ist, wenn es keine Ressource zum Erstellen eines separaten API-Servers gibt, es redundant ist oder Probleme verursacht. Ich denke auch, dass es gut ist, einen besseren Ausblick zu haben und alles auf GitHub zu vervollständigen, ohne andere Dienste einzuschalten.

Nachtrag: Über GitHub-Seiten

Das Ziel der oben erwähnten Ausgabe json war der Zweig gh-pages, aber aus irgendeinem Grund konnte ich nicht über github.io darauf zugreifen, sodass ich direkt auf den oben genannten raw.githubusercontent.com zugegriffen habe. In den Kommentaren wurde jedoch der folgende Austausch durchgeführt.

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

Hmm ...? Ich fühle mich wie ein Kontoname, mit dem ich vertraut bin ...

Das Actions-Skript von früher



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

(Diese Person (@peaceiris) ist die Person, die die Aktion ausgeführt hat, um auf die im Skript verwendeten Gh-Seiten zu pushen ...) Also habe ich mich entschieden, die Einstellungen wieder auf gh-Seiten auszugeben ...

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

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

Ich konnte es sicher auf Gh-Seiten hosten, es tut mir leid (und danke). Nachdem Sie Aktionen festgelegt haben, müssen Sie die Einstellungen überprüfen, um Gh-Seiten erneut zu hosten. Seien Sie also vorsichtig.

Recommended Posts

Bereiten Sie einen Pseudo-API-Server mit GitHub-Aktionen vor
Erstellen Sie mit GitHub Pages einen Pseudo-REST-API-Server
Ich habe mit Github-Aktionen ein Rad für Windows erstellt
Lernen eines neuronalen Netzes mit Chainer - Erstellen eines Web-API-Servers
Erstellen Sie mit hug einen Web-API-Server mit explosiver Geschwindigkeit
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
Erstellen Sie einfach einen DNS-Server mit Twisted
Richten Sie mit Twisted einen Mailserver ein
Erstellen Sie einfach einen API-Server mit dem Modul go-json-rest
Erstellen wir eine REST-API mit SpringBoot + MongoDB
Ausgabe der Repository-Liste mit der Github-API auf dem Mac
Ich habe mit Scrapy- und GitHub-Aktionen eine Listenseite für Kindle Prime Reading erstellt
Als offene Daten mithilfe der CKAN-API in Python hochladen und automatisch mit Github-Aktionen verknüpfen
Versuchen Sie, mit der Twitter-API v2 ein soziales Diagramm zu zeichnen
Richten Sie mit Samba einen Dateiserver unter Ubuntu 20.04 ein
Erstellen eines seq2seq-Modells mithilfe der Funktions-API-Übersicht von keras
Registrieren Sie Tickets mit der Redmine-API mithilfe von Python-Anforderungen
[Python] Ich habe versucht, einen lokalen Server mit flask auszuführen
Ich habe versucht, mit Python eine Pseudofraktalfigur zu zeichnen
[Vagrant] Richten Sie einen einfachen API-Server mit Python ein
Erstellen Sie mit Docker eine einfache Fast API-Entwicklungsumgebung