[Python] Verwenden der Linien-API [1. Erstellung des Beauty-Bots]

Motivation

Ich habe mich in letzter Zeit nicht mit einem Mädchen angestellt ... Gibt es nicht ein süßes Mädchen, das sofort antwortet? Ist es nicht möglich, dies mit Linebot zu erreichen?

Ich werde aus solch einem schrecklichen Grund einen Linebot erstellen.

Umgebung

・ Mac Catalina ・ Docker Version 19.03.13 ・ Kolben 1.1.2 ・ Python 3.8.3 ・ Docker-Compose Version 1.27.4 ・ Heroku 7.45.0 ・ Bash

Was diesmal zu erstellen

Bewegen Sie als Umgebungskonstruktion zunächst den Container vom Docker zum Heroku und starten Sie ihn. LINE BOT erstellt einen wunderschönen Bot, der guten Morgen zurückgibt, wenn Sie guten Morgen sagen. Beachten Sie, dass dies nicht der Fall ist, da es nicht hinten ist!

fließen

Der Ablauf des ersten Males wird beschrieben.

** 1. Registrierung von LINE-Entwicklern ** ** 2. Erstellen einer Python-Datei ** ** 3. Erstellen Sie Dockerfile und docker-compose.yml ** ** 4. Auf Heroku hochladen **

Die endgültige Dateistruktur lautet wie folgt.

bijobot ├── Dockerfile ├── app.py ├── docker-compose.yml └── requirements.txt

1. Registrierung von LINE-Entwicklern

Wechseln Sie von der folgenden Seite zur Site. LINE Developers

スクリーンショット 2020-11-15 21.56.14.png

Melden Sie sich zunächst an und wählen Sie "Von Anbietern erstellen". Es ist mir egal, ob es bereits eine Disny-Benachrichtigung gibt.

Es wird "Neuen Anbieter erstellen" angezeigt. Geben Sie ihm den gewünschten Namen, z. B. eine Disny-Benachrichtigung. Ich nannte es "Free Image Child".

Als Nächstes wird "Dieser Anbieter hat noch keine Kanäle" angezeigt. Wählen Sie daher "Messaging-API-Kanal erstellen".

スクリーンショット 2020-11-15 21.59.43.png

Danach werden Sie zum folgenden Bildschirm weitergeleitet. Füllen Sie sie daher entsprechend aus. Das Kanalsymbol wird häufig in freien Bildern verwendet, und ich habe persönlich ein Typenkind adoptiert.

スクリーンショット 2020-11-15 22.03.18.png

Wenn Sie den Bedingungen zustimmen und Admin überprüfen, können Sie sehen, dass neue Kanäle hinzugefügt wurden, wie unten gezeigt.

スクリーンショット 2020-11-15 22.06.36.png

Gehen Sie zu dem Kanal, den Sie hier und in der Grundeinstellung erstellt haben

Channnel secret

In der Messaging-API

Channel access token

Was es betrifft, notieren Sie es sich.

2. Erstellen einer Python-Datei

Messaging API SDKs Da das Verfahren zum Erstellen einer Datei mit flask in den offiziellen SDKs von beschrieben ist, wenden wir dies an, um es zu erstellen.

Erstellen Sie zunächst ein Arbeitsverzeichnis zum Erstellen einer App. Bijo wäre in Ordnung.

terminal


mkdir bijo
cd bijo

Erstellen Sie als Nächstes eine Python-Datei.

Die erstellte Python-Datei lautet wie folgt. Nennen Sie es unbedingt app.py.

app.py



from flask import Flask, request, abort

#Bibliothek, die die Umgebung in OS verwaltet
import os

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)



#Umgebungsvariablen abrufen

YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)


app = Flask(__name__)



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

@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))


if __name__ == "__main__":
    app.run()

YOUR_CHANNEL_ACCESS_TOKEN YOUR_CHANNEL_ACCESS_TOKEN Ich verzichtete darauf Channnel secret Channel access token Benutzen. Verwenden Sie os, um Informationen aus Heroku-Umgebungsvariablen abzurufen. Dies wird später in Heroku eingestellt.

** 3. Erstellen Sie Dockerfile und docker-compose.yml **

Das Erstellen von Procfile usw. mit Heroku ist mühsam, und ich wollte, wenn möglich, moderne Technologie verwenden, also verwende ich Docker. Erstellen Sie die Docker-Datei und die Datei docker-compose.yml im Bijo-Verzeichnis, wie unten gezeigt.

Es scheint, dass ich eine Heroku-Version von docker-compose.yml namens heroku.yml erstellen muss, aber es scheint problematisch zu sein, also habe ich diese Zeit bestanden.

docker-compose.yml


#Für die lokale Arbeit:Funktioniert nicht in Heroku.

#Für die lokale Arbeit:Funktioniert nicht in Heroku.

version: '3'

services:
  app:
    build: .
    container_name: bijobot
    tty: true
    ports:
      - 5000:5000
    environment:
        FLASK_ENV: 'development'    #Debug-Modus EIN
        FLASK_APP:  "app.py"        #app.Starten Sie py
        YOUR_CHANNEL_ACCESS_TOKEN:Eine Kopie des Zugriffstokens
        YOUR_CHANNEL_SECRET:Unterlassenes Kanalgeheimnis
    volumes:
      - ./:/code/
    command: flask run -h 0.0.0.0
    # command: gunicorn -b 0.0.0.0:$PORT app:app --log-file=-

Wenn Sie "FLASK_ENV:" development "" setzen, wird die Datei beim Speichern automatisch auf dem Server angezeigt.

Dockerfile


FROM python:3.7-alpine

#Erstellen Sie ein Verzeichnis namens Code und verwenden Sie es als Arbeitsordner
WORKDIR /code

#Debug-Modus EIN
ENV FLASK_ENV: 'development'   

#alpine Magie
RUN apk add --no-cache gcc musl-dev linux-headers

# requirements.Verschieben Sie txt in den Code
COPY requirements.txt requirements.txt
# requirements.Installieren Sie die Bibliothek in txt
RUN pip install -r requirements.txt

#Hängen Sie alle Dateien in Code ein.
COPY . .

# $Beachten Sie, dass es nur funktioniert, wenn PORT angegeben ist.
CMD gunicorn -b 0.0.0.0:$PORT app:app --log-file=-

Erstellen Sie außerdem die Datei require.txt.

Dies kann durch Drücken des Squid-Befehls dekomprimiert werden. Diesmal werden wir jedoch mit der im Voraus erstellten Prozedur fortfahren.

terminal


pip freeze > requirements.txt

Geben Sie Folgendes in die Datei resources.txt ein.

certifi==2020.11.8
chardet==3.0.4
click==7.1.2
Flask==1.1.2
future==0.18.2
gunicorn==20.0.4
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.2
line-bot-sdk==1.17.0
MarkupSafe==1.1.1
requests==2.25.0
urllib3==1.26.2
Werkzeug==1.0.1

require.txt schreibt die Python-Bibliothek im Voraus, damit sie installiert werden kann.

pip install gunicorn flask line-bot-sdk

Sie brauchen nicht, was Sie nicht besucht haben.

terminal


touch requirements.txt

Geben Sie als Nächstes den folgenden Befehl ein, um den Docker-Container zu starten.

terminal


docker-compose build
docker-compose up -d

Greifen Sie jetzt auf localhost: 5000 zu und überprüfen Sie, ob Hallo! Angezeigt wird.

4. Mit Heroku bereitstellen

Wir empfehlen Ihnen, Heroku im Voraus zu registrieren. Melden Sie sich zuerst bei Heroku an.

terminal


heroku  login
heroku container:login

Als nächstes erstellen Sie eine App in Heroku. Sie können "Heroku erstellen" als Namen der App verwenden, die Sie hinzufügen möchten. Dieses Mal gab ich ihm einen passenden App-Namen von bijobijo. Wenn hier eine Fehlermeldung angezeigt wird, müssen Sie diese umbenennen, da es sich um einen vorhandenen App-Namen handelt.

heroku create bijobijo

Als nächstes ist es notwendig, den lokalen Git und den Remote-Git zu verbinden. Das Verknüpfen ist mit dem folgenden Befehl möglich.

terminal


heroku git:remote -ein App-Name

Nächster heroku config: setze den Namen der Umgebungsvariablen, die du hinzufügen möchtest =" Zeichenkette der zu setzenden Umgebungsvariablen "--app Dein Anwendungsname Sie können die Umgebungsvariable in Heroku festlegen, indem Sie dies tun.

Stellen Sie daher Folgendes ein.

heroku config:set YOUR_CHANNEL_SECRET="Channel Secret String" --App Ihren Anwendungsnamen
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Zugriffstoken-Zeichenfolge" --App Ihren Anwendungsnamen

In Bezug auf die Konfiguration können Sie die Einstellungen der Konfiguration in Ihrer eigenen Anwendung auf der Heroku-Site wie folgt überprüfen.

スクリーンショット 2020-11-16 0.24.58.png

Die eingestellte Umgebungsvariable ist

heroku config

Sie können auch mit überprüfen.

Nachdem die Umgebungsvariablen festgelegt wurden, werden sie hochgeladen.

Der Ort, an dem ich hier feststeckte

Jeder leicht

heroku container:push web

Ich dachte, es wäre der Name von docker-compose.yml

heroku container:push app

Aber es hat nicht gut angefangen.

Als ich nach etwas suchte, wurde die Antwort im folgenden Artikel geschrieben.

Container Registry & Runtime (Docker Deploys)

heroku container:push <process-type>

To push multiple images, rename your Dockerfiles using Dockerfile.:

Mit anderen Worten, wenn Sie es Dockerfile.web nennen, können Sie es starten.

Schreiben Sie die Docker-Datei sofort in Dockerfile.web um und drücken Sie die folgenden Befehle in der angegebenen Reihenfolge.

terminal


heroku container:push web
heroku container:release web

Die App ist jetzt freigegeben.

Wenn Sie hier den folgenden Befehl drücken und zu der Seite wechseln, auf der Hallo steht, ist dies in Ordnung.

terminal


heroku open

Sie können den Container, der tatsächlich über Ressourcen ausgeführt wird, über Ihre eigene App vom Heroku-Beamten überprüfen. Wenn dies wie folgt ist, können Sie sehen, dass das Web ausgeführt wird.

スクリーンショット 2020-11-16 1.19.33.png

Wechseln Sie schließlich von LINE Developer und von der Messaging-API zu Ihrem eigenen Kanal Wählen Sie Webhook-Einstellungen, https: // {eigener App-Name} .herokuapp.com / callback` Wenn Sie einstellen, sind Sie fertig. Beachten Sie auch, dass Linebot nur funktioniert, wenn Sie "Webhook verwenden" wie unten gezeigt aktivieren. スクリーンショット 2020-11-16 1.28.27.png

Jetzt können Sie jeden Tag Nachrichten mit schönen Menschen austauschen! !!

S__116711449.jpg

Es scheint, dass eine feste Nachricht kommt, also werde ich mich darum kümmern.

Wählen Sie in der Messaging-API die Option "Nachrichten automatisch wiedergeben". スクリーンショット 2020-11-16 1.30.34.png

Antworteinstellungen → Erweiterte Einstellungen → Antworteinstellung → Antworteinstellungseinstellungen → Aus Dies wird gelöst.

スクリーンショット 2020-11-16 1.34.52.png

Bis bald,

S__116711452.jpg

Du bist gut zurückgekehrt.

Mein Herz ist leer.

Es scheint, dass das Geschäft mithilfe von Linebot automatisiert werden kann, daher möchte ich mich weiterhin Herausforderungen stellen.

Referenzartikel

Überblick

Es ist auch für Anfänger einfach! Erstellen wir einen LINE-Chat-Bot mit Python!

** Wie man die Umgebung in Heroku einstellt **

Ich habe mit Python + Heroku einen LINE BOT erstellt

** Umgang mit Anforderungen.txt **

Überprüfen Sie die Liste der installierten Pakete mit Python, pip list / freeze

** Schiebe Docker zu Heroku **

Container Registry & Runtime ↑ Dies war während der Veröffentlichung am nützlichsten.

[Local Development with Docker Compose] (https://devcenter.heroku.com/articles/local-development-with-docker-compose) Python-Anfänger haben beschlossen, einen LINE-Bot mit Flask (Heroku + ClearDB-Edition) zu erstellen

Recommended Posts

[Python] Verwenden der Linien-API [1. Erstellung des Beauty-Bots]
[Frage] Über die API-Konvertierung von Chat-Bot mit Python
LINE BOT mit Python + AWS Lambda + API Gateway
Letzte Ranglistenerstellung mit der Qiita-API mit Python
Anonymer Upload von Bildern mit der Imgur-API (mit Python)
[Python] Zusammenfassung der Methode zur Tabellenerstellung mit DataFrame (Pandas)
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
Verschiedene Memoranden bei Verwendung von SDK der LINE Messaging API mit Python (2.7.9) + Google App Engine
Python: Grundlagen der Verwendung von Scikit-Learn ①
Papagei gibt LINE BOT-Erstellung zurück
Online-Übertragung mit Python
Führen Sie den in Python (Flask) implementierten LINE Bot "ohne Verwendung von Heroku" aus.
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Asynchrone Verarbeitung mit LINE BOT: RQ (Redis Queue) in Python
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Leicht verständliche Demo von Imagemap Message der LINE Messaging API [PHP] [Ruby] [Python]
[Python] Erstelle deinen eigenen LINE-Bot
Bilderfassung von Firefox mit Python
Datenerfassung mit Python Googlemap API
Trübungsentfernung mit Python detailEnhanceFilter
[Python] LINE-Benachrichtigung über die neuesten Informationen mithilfe der automatischen Suche von Twitter
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Implementierung von Desktop-Benachrichtigungen mit Python
Versuchen Sie es mit der Aktions-API von Python argparse
Excel-Diagrammerstellung mit Python xlwings
Führen Sie Ansible über Python mithilfe der API aus
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
GUI-Erstellung in Python mit tkinter 2
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Python ruft die Google Cloud Vision API von LINE BOT über AWS Lambda auf
Entwicklung und Bereitstellung der REST-API in Python mit Falcon Web Framework
Holen Sie sich mit Python Bilder von großartigen Find / 47-Sites (1/2: Bis zur Erstellung der Zielliste)
Python: Grundlagen der Bilderkennung mit CNN
Mausbedienung mit Windows-API in Python
Automatische Erfassung von Aktienkursen mit Python
Informationen zum Erstellen einer GUI mit TKinter of Python
Versuchen Sie es mit der Wunderlist-API in Python
GUI-Erstellung in Python mit tkinter Teil 1
Übung, dies in Python zu verwenden (schlecht)
Versuchen Sie, die Kraken-API mit Python zu verwenden
Flexible Animationserstellung mit Animation.FuncAnimation von matplotlib
Python: Anwendung der Bilderkennung mit CNN
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Entwicklung eines Slack Bot mit Python mit chat.postMessage
Erstellung eines negativen / positiven Klassifikators mit BERT
Studie über die Miete in Tokio mit Python (3-1 von 3)
Erstellen einer Google-Tabelle mit der Python / Google Data-API
Kenntnis der Verwendung der Aurora Severless Data API
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Fügen Sie dem Slack Bot (erstellt von Python) mithilfe der Talk-API von Recruit eine Konversationsfunktion hinzu
Lassen Sie Python die durchschnittliche Punktzahl einer Seite mithilfe der PageSpeed Insights-API messen
[Python] Summiert automatisch die Gesamtzahl der von Qiita mithilfe der API veröffentlichten Artikel
LINE Bot hat mir das Scraping-Ergebnis der IT-Trendinformationen gesendet [LINE Messaging API]
[Python] Eine Geschichte über das Erstellen eines LINE-Bots mit einer praktischen bemannten Funktion ohne Verwendung von Salesforce [Messaging-API]