[PYTHON] Ich habe meinen Hund "Monaka Bot" mit Line Bot gemacht

Screenshot_20160408-151644.png

Ich habe LineBot ausprobiert. Das Geld tut mir leid, also habe ich es mit GAE gebaut. Ich habe Python / Flask verwendet, weil Java umständlich ist.

Projekterstellung mit GCP

Wenn Sie neu in diesem Bereich sind, wird es herauskommen.

Vorbereitung von app.yaml

Die Quelle sieht so aus.

app.yaml


runtime: python27
api_version: 1
threadsafe: yes

- url: .*  # This regex directs all routes to main.app
  script: main.app

libraries:
- name: ssl
  version: latest

Zunächst passt es ohne Hinzufügen der SSL-Bibliothek.

Implementierung des Rückrufs

Wenn der Benutzer mit dem Bot spricht, wird die im Rückruf angegebene API aufgerufen. Es ist, als würde man die API von Line in einem Rückruf aufrufen und Text und Fotos senden. Die Einstellungen für den Rückruf finden Sie im Handbuch und in anderen Qiita.

Die Quelle sieht so aus.

main.py


# -*- coding: utf-8 -*-

import logging, random
import requests

from flask import Flask, request,Response

app = Flask(__name__)
app.config.from_object(__name__)
app.logger.setLevel(logging.DEBUG)

LINE_ENDPOINT = "https://trialbot-api.line.me"
HEADERS = {
    "X-Line-ChannelID": "<Siehe Basisinformationen>",
    "X-Line-ChannelSecret": "<Siehe Basisinformationen>",
    "X-Line-Trusted-User-With-ACL": "<Siehe Basisinformationen>"
}

#Nachrichtengruppe behoben
TALKS = [
    "Beeindruckend! Komm schon! !!",
    "Ja ... ich möchte ...",
    "Pinkeln! Pinkeln!",
    "Wo ist der Besitzer hingegangen?",
    "Shinotomo ~~~",
    "Ngu ~ ngu ~~",
    "Hehehehehehehehe",
    "Uo ・ e ・ oU",
    "Lecken lecken",
    "Ich möchte meine Hände lecken",
    "Ich frage mich, ob der Reis gefallen ist",
    "Einfach und leicht",
    "Aussehen!",
    "tanzen! Tanzen tanzen! !!"
]

#Bildgruppe
IMAGES = [
    {"origin": "https://storage.googleapis.com/linebot-1275.appspot.com/monaka1.jpg ",
     "thumb": "https://storage.googleapis.com/linebot-1275.appspot.com/monaka1thum.jpg "}
]


@app.route("/")
def hello():
    return "line bot api"


@app.route("/callback", methods=["POST"])
def callback():
    # TODO Signature validation

    app.logger.info(request.json)
    app.logger.info(request.headers)
    req = request.json["result"][0]

    if req["eventType"] == "138311609100106403":
        """
Der Empfang von Freundschaftsanfragen kommt hierher.
Senden Sie eine Dankesnachricht, sobald Sie sich bewerben.
TODO nicht verifiziert
        """

        send_text([req["from"]], u"Es ist auch drinnen. Vielen Dank für Ihre Freundschaftsbewerbung.")

    elif req["eventType"] == "138311609000106303":
        """
Kommen Sie hierher, wenn Sie eine Gesprächsnachricht erhalten.
Wenn Sie "Monaka" sagen, werden ein Foto und eine Nachricht zurückgegeben.
Andernfalls wird der vorbereitete Text zufällig zurückgegeben.
        """

        to = [req["content"]["from"]]
        if req["content"]["text"] == u"Monaka":
            #Fotos senden
            i = random.randint(0, len(IMAGES) - 1)
            send_picture(to, IMAGES[i])
            send_text(to, "Was?")
        else:
            #Messege senden
            i = random.randint(0, len(TALKS) - 1)
            send_text(to, TALKS[i])

    #Der Rückgabewert ist auf 200 festgelegt
    return Response(status=200)


def send_text(to, text):
    """
Senden Sie Text an
    """
    content = {
        "contentType": 1,
        "toType": 1,
        "text": text
    }
    events(to, content)


def send_picture(to, img):
    """
Bild senden an
    """
    content = {
        "contentType": 2,
        "toType": 1,
        "originalContentUrl": img["origin"],
        "previewImageUrl": img["thumb"]
    }
    events(to, content)


def events(to, content):
    """
Daten für bis(Text / Bilder / Videos)Senden
    """
    app.logger.info(content)
    data = {
        "to": to,
        "toChannel": "1383378250",
        "eventType": "138311608800106203",
        "content": content
    }
    r = requests.post(LINE_ENDPOINT + "/v1/events", json=data, headers=HEADERS)
    app.logger.info(r.text)

Einstellen der statischen IP-Adresse

Da der Server auf der Whitelist steht, gibt der Server von Line einen Fehler zurück, wenn Sie die IP-Adresse nicht festlegen. Da es sich jedoch um GAE handelt, gibt es keine feste IP-Adresse. Als ich versuchte, darauf zuzugreifen, wurde ein 403-Fehler angezeigt und die folgende Meldung wurde angezeigt.

{"statusCode":"427","statusMessage":"Your ip address [107.178.194.118] is not allowed to access this API."}

Wenn Sie also diese IP-Adresse hinzufügen und verschieben

{"statusCode":"427","statusMessage":"Your ip address [107.178.194.122, 10.128.141.149] is not allowed to access this API."}

Als nächstes wurde ich gebeten, etwas festzulegen, das eine interne IP-Adresse zu sein scheint, also werde ich es gehorsam festlegen.

Es funktionierte. Es besteht eine hohe Wahrscheinlichkeit, dass sich die IP-Adresse eines Tages ändert und nicht funktioniert. Ich möchte die Lösung in Zukunft mir überlassen.

Bewerben Sie sich für einen Freund

Es scheint, dass Sie es aus dem QR-Code tun können. (Ich habe es nicht verstanden und die ganze Zeit gelitten) Diesmal mein Hund "Monaka Bot"

rjs9046g.png

Sie können hinzufügen von.

Recommended Posts

Ich habe meinen Hund "Monaka Bot" mit Line Bot gemacht
Ich habe einen Stempelersatzbot mit Linie gemacht
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Mattermost Bot mit Python gemacht (+ Flask)
[AWS] Ich habe BOT mit LINE WORKS daran erinnert
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe mit LINE Bot ein Haushaltsbuch für Bot erstellt
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe einen Blackjack mit Python gemacht!
Ich habe meine eigene Sprache gemacht. (1)
Ich habe meine eigene Sprache gemacht (2)
Ich habe meine eigene AML gemacht
Ich habe einen Zwietrachtbot gemacht
Ich habe COVID19_simulator mit JupyterLab erstellt
Ich habe Word2Vec mit Pytorch gemacht
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.
Ich habe versucht, LINE-Bot mit Python + Flask + ngrok + LINE Messaging API zu erstellen
Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.
Als ich einen Discord Bot gemacht habe, haben meine Klassenkameraden meinen Computer zerstört
[AWS] Ich habe BOT mit LINE WORKS (Implementierung) in Erinnerung gerufen.
Ich habe einen Wikipedia Gacha Bot gemacht
Ich habe meine eigene Python-Bibliothek erstellt
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe einen Twitter-Bot mit Go x Qiita API x Lambda erstellt
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe mit Python eine Hex-Map erstellt
Ich habe ein Lebensspiel mit Numpy gemacht
Ich habe einen Hanko-Generator mit GAN gemacht
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe eine WEB-Bewerbung bei Django gemacht
Ich habe mit Python einen Neuronensimulator erstellt
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe eine einfache Brieftasche aus Bitcoin mit Pycoin gemacht
Ich habe meinen eigenen primitiven statischen Site-Generator erstellt
Serverloser LINE-Bot mit IBM Cloud-Funktionen
Ich habe versucht, Linux mit Discord Bot zu betreiben
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Ich habe meinen eigenen Parallel Link Roboter (Software Edition) gemacht
Ich habe mit Play with Docker einen gebrauchsfertigen Syslog-Server erstellt
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Tkinter ein Fenster für die Protokollausgabe erstellt
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Ich habe mit Sense HAT ein gefallenes Monospiel gemacht
Ich habe es mit der Verarbeitung "Der lebende Othello-Typ von Sakanaction" geschafft.
Ich habe meinen eigenen Parallelverbindungsroboter gebaut (mechanische Ausgabe)