[PYTHON] Erstellen Sie mit Django einen LINE-Bot

Einführung

Ich habe den Artikel über die Verwendung von LINE Bot mit Django zusammengefasst, weil er ein wenig recherchiert zu sein schien oder auch wenn er alt war.

Vorerst werde ich einen Umu-Return-Bot erstellen, der so wie er ist auf den Text antwortet, der als Einführung in LINE Bot gesendet wurde.

Der Artikel hier verwendet das SDK, aber ich bin ein Python-Anfänger und kann mit Python nicht einmal HTTP-Anfragen stellen, also mache ich es selbst für das Training. Ich würde es gerne machen.

Ich bin ein Django-Anfänger mit weniger als einer Woche Django-Geschichte. Da die Sprache, die ich normalerweise verwende, funktionales Elixier ist, ist die Implementierung möglicherweise nicht objektorientiert.

Wenn Sie Ratschläge dazu haben, was falsch ist oder was Sie verbessern müssen, hinterlassen Sie bitte einen Kommentar.

Obwohl es mein früherer Artikel ist, werde ich auf die folgenden Artikel als Ganzes verweisen. Verwenden der LINE Messaging-API mit Elixir / Phoenix

Registrieren Sie sich bei LINE Developer / Register Channel

↓ Registrieren Sie sich von hier aus https://developers.line.biz/ja/

Obwohl es sich in verschiedener Hinsicht von der aktuellen Situation unterscheidet, werden wir den Kanal anhand des folgenden Artikels registrieren https://qiita.com/nkjm/items/38808bbc97d6927837cd

Projekterstellung

Erstellen Sie ein Projekt nach Ihren Wünschen.

$ django-admin startproject qiita_linebot
$ cd qiita_linebot/
$ python manage.py startapp qiita_linebot_ai

Erstellen Sie urls.py

qiita_linebot_ai/urls.py


from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='callback'),
]

Reflektieren Sie in qiita_linebot / urls.py.

qiita_linebot/urls.py


from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('qiita_linebot_ai/', include('qiita_linebot_ai.urls')),  #add
    path('admin/', admin.site.urls),
]

Erstellen einer LineMessage-Klasse

Ich bin nicht gut im objektorientierten Denken, weil ich normalerweise nur Elixir verwende, aber ich denke, es ist besser, (?) Zu kapseln. Erstellen Sie in einem solchen Fall eine LineMessage-Klasse und erstellen Sie eine Antwortmethode darin. Machen.

Senden Sie eine HTTP-Anforderung an die LINE Messaging-API, indem Sie auf den folgenden Artikel verweisen Urllib.request ist für Python-HTTP-Client ausreichend

line_message.py


from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

import urllib.request
import json


REPLY_ENDPOINT_URL = "https://api.line.me/v2/bot/message/reply"

ACCESSTOKEN = 'Ihr Zugriffstoken'   #Messaging-API-Einstellungen|>Zugriffstoken vom Kanalzugriffstoken abrufen
HEADER = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + ACCESSTOKEN
}

class LineMessage():
    def __init__(self, messages):
        self.messages = messages

    def reply(self, reply_token):
        body = {
            'replyToken': reply_token,
            'messages': self.messages
        }
        print(body)
        req = urllib.request.Request(REPLY_ENDPOINT_URL, json.dumps(body).encode(), HEADER)
        try:
            with urllib.request.urlopen(req) as res:
                body = res.read()
        except urllib.error.HTTPError as err:
            print(err)
        except urllib.error.URLError as err:
            print(err.reason)

Hier nimmt die an die Methode "reply" übergebene "Nachricht" das folgende Format an.

{
 type: "text",
 text: "hogehoge" #Dieses Mal wird die empfangene Nachricht so zurückgegeben, wie sie ist
}

Schau dir das an "Sie müssen nur die zu sendende Nachricht (" hogehoge "oben) als Argument nehmen." Wie Sie vielleicht denken, unterstützt die LINE Messaging-API auch das gleichzeitige Senden mehrerer Nachrichten. Zusätzlich zu Text gibt es auch "Typ".

Ich habe darüber nachgedacht, die Klasse weiter aufzuteilen, aber dieses Mal werde ich es vorerst auf diese Weise implementieren.

Erstellen Sie message_creater

util/message.creater.py


def create_single_text_message(message):
    test_message = [
                {
                    'type': 'text',
                    'text': message
                }
            ]
    return test_message

Erstellen Sie ein Modul message_creater für die in LineMessage.reply verwendete Argumentnachricht.

Ansicht bearbeiten

view.py


from django.shortcuts import render
from django.http import HttpResponse
import json
from django.views.decorators.csrf import csrf_exempt

from utils import message_creater
from qiita_linebot_ai.line_message import LineMessage

@csrf_exempt
def index(request):
    if request.method == 'POST':
        request = json.loads(request.body.decode('utf-8'))
        events = request['events']
        for event in events:
            message = event['message']
            reply_token = event['replyToken']
            line_message = LineMessage(message_creater.create_single_text_message(message['text']))
            line_message.reply(reply_token)
        return HttpResponse("ok")

Damit ist die Implementierung abgeschlossen.

Test mit ngrok

ngrok Einstellungen

Ich werde es tatsächlich versuchen. Da localhost nicht in der Webhook-URL angegeben werden kann, wird ngrok verwendet.

Bitte installieren Sie ngrok gemäß dem folgenden Artikel. ngrok ist zu bequem

Einmal installiert

$ ngrok http 8000

Dann

スクリーンショット 2020-01-08 16.23.00.png

Sie können es so starten. Bitte ersetzen Sie die danach angezeigte ngrok-URL durch Ihre eigene.

Webhook-URL-Einstellungen

Messaging-API-Einstellungen|>Webhook-Einstellungen|>WebhookURL Von Geben Sie "https: // ecdb2a20.ngrok.io / qiita_linebot_ai /" ein.

ALLOWED_HOSTS bearbeiten

Fügen Sie ALLOWED_HOSTS wie folgt ngrok hinzu.

settings.py


ALLOWED_HOSTS = ["ecdb2a20.ngrok.io"]

Prüfung

Du bist bereit zu gehen!

Wenn Sie den Server starten und die folgende Meldung erhalten, sind Sie erfolgreich!

スクリーンショット 2020-01-08 16.30.28.png

Recommended Posts

Erstellen Sie mit Django einen LINE-Bot
Bis Django etwas mit einem Linienbot zurückgibt!
Erstellen Sie einen Django-Zeitplan
Erstellen Sie einen Slack Bot
Erstellen Sie mit Minette für Python einen LINE BOT
So erstellen Sie eine Rest-API in Django
Bis Sie eine neue App in Django erstellen
Erstellen Sie ein Wörterbuch in Python
Erstellen Sie eine Homepage mit Django
Machen Sie einen LINE BOT (Chat)
Erstellen Sie einen Django-Anmeldebildschirm
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
[LINE Messaging API] Erstellen Sie mit Python ein umfangreiches Menü
Erstellen Sie mit Flask einen CSV-Reader
Erstellen Sie einen DI-Container mit Python
Schritte zum Erstellen eines Django-Projekts
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Erstellen Sie eine Binärdatei in Python
[LINE Bot] Ich bin ein Ranger! Teil 2
Erstellen Sie eine zufällige Zeichenfolge in Python
Erstellen Sie mit Django einen Datei-Uploader
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Installieren Sie Django in einer virtuellen Pipenv-Umgebung
Erstellen Sie einen Bot, um Corona-Virus-Informationen zu retweeten
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Erstellen Sie eine einfache GUI-App in Python
Erstellen eines LINE-Bots ~ Erstellen, Bereitstellen und Starten von ~
Geben Sie das ModelChoiceField-Abfrageset in Django dynamisch an
Erstellen Sie eine Python-GUI-App in Docker (PySimpleGUI).
[GPS] Erstellen Sie eine kml-Datei mit Python
Erstellen Sie einen Bot, der Twitter-Trends verstärkt
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Flask-Erstellen Sie einen Webdienst mit SQLAlchemy + PostgreSQL
Modell in Django
[Kann in 10 Minuten erledigt werden] Erstellen Sie schnell eine lokale Website mit Django
Ich habe einen Stempelersatzbot mit Linie gemacht
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Erstellen Sie eine GIF-Datei mit Pillow in Python
Erstellen Sie eine Datei, die in der Skriptsprache ausgeführt werden kann
Ich möchte mit Python ein Fenster erstellen
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
So erstellen Sie eine JSON-Datei in Python
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Aktivieren Sie Django https in nur wenigen Zeilen
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Mach ein Janken-Spiel in einer Zeile (Python)
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Erstellen Sie eine Proteinsequenz-Mutationsbibliothek mit Pandas
Schritte zum Erstellen eines Twitter-Bots mit Python
Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
So erstellen Sie ein 1-zeiliges Kivy-Eingabefeld
Erstellen Sie ein Datum / Uhrzeit-Objekt aus einer Zeichenfolge in Python (Python 3.3).
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Erstellen Sie in Python ein Paket mit globalen Befehlen
Fügen Sie ein Datum ohne Unterbrechungen in CotEditor ein
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot