[Line / Python] Beacon-Implementierungsnotiz

Aufbau einer Python-Umgebung

Installieren Sie Version 3.6.8 von pkg [Installation aus einer pkg-Datei](https://qiita.com/ms-rock/items/72b8f1abc661c539bb09#21-pkg%E3%83%95%E3%82%A1%E3%82%A4%E3%83 % AB% E3% 81% 8B% E3% 82% 89% E3% 81% AE% E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC % E3% 83% AB% E6% 96% B9% E6% B3% 95)

# Python3.6.Überprüfen Sie den Installationsort von 8
$ which python

#Installieren Sie Python mit Brew, um pip3 zu installieren
$ brew install python

#Installation von virtualenv
$ pip3 install virtualenv

#Erstellen Sie eine virtuelle Umgebung
$ virtualenv --python=/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 env

#Versionsbestätigung
$ python
Python 3.6.8 (v3.6.8:3c6b436a57, Dec 24 2018, 02:04:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

So gelangen Sie in die virtuelle Umgebung source bin/activate

Python3-Installation (Mac-Version)

Registrierung des Leitungskontos

Vorbereitung

--Erstellen Sie ein Line Developer-Konto --Erstellen eines Kanals --Bot-Erstellung

Führen Sie die folgenden Schritte aus, um mit "Erstellen eines LINE-Bots mit Flask" fortzufahren. [Bis Sie den LINE-Bot mit Flask implementieren und für Heroku bereitstellen](https://qiita.com/suigin/items/0deb9451f45e351acf92#%E9%96%8B%E7%99%BA%E7%92%B0%E5 % A2% 83)

Line Bot Umweltbau

Führen Sie ab dem Beginn der virtuellen Umgebung aus.

$ source bin/activate
$ pip install flask 
$ pip install line-bot-sdk
$ brew cask install ngrok

Zu verwendendes SDK: line-bot-sdk-python Was ist Homebrew-Fass?

Verwendung von Umgebungsvariablen

pip3 install python-dotenv

Best Practices für Konfigurationsdateien in Flask So schreiben Sie Umgebungsvariablen, die Sie nicht in [GitHub] Python einfügen möchten

Prüfung

Testen Sie, ob der Kolben funktioniert

Fügen Sie Folgendes zu "app.py" hinzu, greifen Sie auf den Stammpfad zu und bestätigen Sie, dass "Hallo Welt!" Angezeigt wird.

@app.route("/")
def hello_world():
    return "hello world!"

Kolbenausführungsbefehl flask run --host=0.0.0.0

ngrok Wenn Sie die Leitung testen möchten, müssen Sie die Test-URL in den Webhook eingeben. Zu diesem Zeitpunkt ist die URL von "https" erforderlich, und "ngrok" ist zu diesem Zeitpunkt praktisch.

Was macht ngrok?

Sie können Ihre lokale Entwicklung auf https veröffentlichen. Bitte überprüfen Sie unten für Details. ngrok ist zu bequem

Aktionen

Führen Sie in einem separaten Terminal die folgenden Schritte aus flask run --host=0.0.0.0 ngrok http 5000

Heroku

Einloggen

$ brew install heroku/brew/heroku

#Der Browser wird angezeigt, melden Sie sich dort an
$ heroku login

Bereitstellen

Erforderliche Dateien

Erstellen Sie die folgenden drei neuen

requirements.txt Verwenden Sie feeze, um die Version, die Sie sich derzeit in der virtuellen Umgebung befinden, in die Datei resources.txt zu exportieren. Überprüfen Sie die Liste der installierten Pakete mit Python, pip list / freeze

runtime.txt Beschreiben Sie die Python-Version.

Procfile

web: gunicorn app:app --log-file -

Über WSGI Unterschiede zwischen Webserver und Anwendungsserver bei der Rails-Entwicklung (Übersetzung)

Nginx leitet die Anfrage an Unicorn weiter. Unicorn leitet die Anfrage an Rack weiter. Rack leitet die Anforderung an den Rails-Router weiter. Der Router leitet die Anforderung an den entsprechenden Controller weiter. Dann werden die Antworten in umgekehrter Reihenfolge zurückgegeben.

Anwendungserstellung

heroku create [app name]

Code drücken

git push heroku master

Konfigurationseinstellungen

#Liste der Umgebungsvariablen
$ heroku config

#Umgebungsvariable hinzufügen
$ heroku config:set ENV_NAME=value

[Heroku-Befehl] Umgebungsvariable

SSH in Heroku-Umgebung

heroku run bash Heroku Command Collection

Beacon-Implementierung

Durch Implementieren der folgenden Schritte können Sie die Aktion definieren, wenn ein Beacon-Ereignis auftritt. Wenn Sie das Ereignis ändern möchten, ändern Sie das Argument (BeaconEvent) von @ handler.add (BeaconEvent). Das folgende Programm sollte daher beschreiben, wie ** nach dem Ereignis behandelt wird. ** **. Die Ereignisauftrittsbedingung wird auf der Leitungsseite implementiert.

#Leuchtfeuerereignis ausgelöst
@handler.add(BeaconEvent)
def handle_beacon(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text='Hello World'))

Dekorateur

Die obige Implementierung verwendet einen Dekorator.

Mit einem Dekorator können Sie einen Prozess hinzufügen, der automatisch ausgeführt wird, wenn Sie eine als Bibliothek bereitgestellte Funktion aufrufen. Zitiert aus Über Python-Dekoratoren

Bearbeitungsauftrag

handler = WebhookHandler(channel_secret)

#Kanalisieren Sie die WebhookHandler-Klasse_Mit Geheimnis initialisieren
handler.handle(body, signature)

##Verhalten der Handle-Methode
#Ausführung der Handle-Methode der WebhookHandler-Klasse
#Führen Sie die Analysemethode der WebhookParser-Klasse aus
#Da der Body Ereignisse enthält, hängen Sie an Ereignisse an und geben Sie Ereignisse zurück
#Schalten Sie Ereignisse mit einer for-Anweisung um

##Verhalten des Dekorateurs
#add Methode wird aufgerufen
#Gibt den Dekorateur zurück
#In diesem Moment,app.Griff in py implementiert_Nachrichtenmethode wird aufgerufen
#In der Dekorationsmethode__add_Die Handler-Methode wird aufgerufen_Handler haben einen Wert

#Die add-Methode der WebhookHandler-Klasse wird dekoriert und der Dekorator wird aufgerufen.
# __add_Handler genannt

##Ich weiß es noch nicht
#Ich weiß nicht, wo die Add-Methode ausgeführt wird
# handle_Ich kann es ausführen, ohne die Nachrichtenmethode aufzurufen, daher weiß ich nicht, wo es in der Handle-Methode ausgeführt wird

Rund um die DB

SQL Alchemy-Einstellungen

Folgendes wird hilfreich sein. Verfahren zum Starten des Flask + SQL Alchemy-Projekts

Kolbenmigration

Aus der Modelldatei wird automatisch eine Migrationsdatei generiert. In meinen eigenen Worten zu Flask-Migrate

Beim Hinzufügen einer Migration (beim Ändern des vorhandenen Schemas)

Lokal ausführen

#Setzt die Revision der Datenbank auf die als Argument angegebene Revision, ohne die Migration durchzuführen.
$ flask db stamp head
$ flask db migrate
$ flask db upgrade

Lauf nach Heroku

heroku run FLASK_APP=app.py flask db stamp head
heroku run FLASK_APP=app.py flask db migrate
heroku run FLASK_APP=app.py flask db migrate

Flask-Migrate

Recommended Posts

[Line / Python] Beacon-Implementierungsnotiz
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Anfänger-Memo (9.2-10)
Python-Anfänger-Memo (9.1)
★ Memo ★ Python Iroha
LINE Heroku Python
[Python] EDA-Memo
Python 3-Operator-Memo
[Mein Memo] Python
Python3-Metaklassen-Memo
[Python] Grundkarten-Memo
Python-Anfänger-Memo (2)
[Python] Numpy Memo
Python-Klasse (Python-Lernnotiz ⑦)
Python OpenCV Installation (Memo)
Python-Modul (Python-Lernnotiz ④)
RNN-Implementierung in Python
Visualisierungsnotiz von Python
ValueObject-Implementierung in Python
Python-Testpaket-Memo
[Python] Memo über Funktionen
Python-Memo für reguläre Ausdrücke
Memo zur Bisektionssuche (python2.7)
[Mein Memo] Python -v / Python -V
Python3-Memo vom Typ Liste / Wörterbuch
[Memo] Python 3-Listensortierung
Python-Tipps (mein Memo)
[Python] Memo Über Fehler
DynamoDB Script Memo (Python)
Python-Grundnotiz - Teil 2
Python-Rezeptbuch Memo
Grundlegende Python-Befehlsnotizen
Python OpenCV Tutorial Memo
Python grundlegende Grammatik Memo
TensorFlow API-Memo (Python)
Python nützliche Memo-Links
Python-Dekorator-Operationsnotiz
Python-Grundnotiz - Teil 1
Effektives Python-Memo Punkt 3
SVM-Implementierung in Python
Ungefähre Aufzählung Python-Memo
7-zeilige Zusammenfassung der Interpreter-Implementierung
Python-Memo (für mich): Array
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Zeichenfolgen ohne Zeilenumbrüche in Python anzeigen (persönliches Memo)
Memo zur Messung der Python-Ausführungszeit
Fizzbuzz in Python (in einer Zeile)
Twitter-Grafiknotiz mit Python
Python> Drucken> N Pausen> Drucken ('\ n' * 3)> 4 Pausen> Drucken ('\ n' * 3),> 3 Pausen
Python und Ruby Slice Memo
Python-Grammatik-Grundnotiz (1)
Persönliches Python-Code-Memo
Versuchen Sie LINE Notify mit Python
Raspeye + Python + OpenGL-Memo