Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen

Zweck

Obwohl ich Ingenieur bin, denke ich immer an Kleidung, weil ich ausgehe, aber ich mache oft Fehler, weil ich eine Person bin, die die Wettervorhersage nicht überprüft. Deshalb möchte ich LINE bot das Wetter (Temperatur) beibringen. Wir empfehlen, dass Sie zuerst eine Papageienrückgabe erstellen und testen und dann die eigentliche Codierung durchführen.

Referenz

Dieser Artikel ist wie eine Arbeitsaufzeichnung und ein Memorandum. Wenn Sie detaillierte und leicht verständliche lesen möchten, folgen Sie bitte dem unten stehenden Link. [Ich habe mit Python + Heroku einen LINE BOT erstellt](https://qiita.com/shimajiri/items/cf7ccf69d184fdb2fb26#flask%E3%81%A8line-bot-sdk%E3%82%92%E3%82%A4 % E3% 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% AB) Ich habe LINE Bot mit Python (gekühltes Chinesisch) gestartet [Teil 1] Ich habe LINE Bot mit Python (gekühltes Chinesisch) gestartet [Teil 2]

Registrieren Sie sich bei LINE Developers

Registrieren Sie sich zunächst bei LINE Developers. Die Registrierung ist einfach. https://developers.line.me/ja/

Anbieter und Kanäle erstellen

Erstellen Sie nach der Registrierung bei LINE Developers einen Anbieter. Wechseln Sie für Englisch die Sprache unten rechts. Erstellen Sie einen Kanal (App) im Anbieter. Ich denke, es ist schwer zu verstehen, weil der Bildschirm fortgesetzt wird

  1. Klicken Sie auf Provider erstellen
  2. Geben Sie die Anbieterinformationen ein (projektähnlich).
  3. Geben Sie Kanalinformationen ein (z. B. Bot-Name).

ist. Es wird bald enden.

Holen Sie sich die Informationen, die Sie brauchen

So verwenden Sie die API

Heroku-Einstellungen

Fahren wir mit den Heroku-Einstellungen fort. Lassen Sie uns zunächst ein Konto registrieren. Installieren Sie dann eine Befehlszeilenschnittstelle namens Heroku CLI. Heroku CLI : https://devcenter.heroku.com/articles/heroku-cli#download-and-install

Heroku Login

An der Eingabeaufforderung $heroku login Wenn Sie ausführen, werden Sie aufgefordert, einen Schlüssel einzugeben. Geben Sie also etwas ein. Dann können Sie sich über den Browser anmelden.

Erstellen einer Heroku-Anwendung

Sie können eine neue App mit "$ heroku create app name" erstellen. Bitte beachten Sie, dass die Unterleiste "_" nicht verwendet werden kann.

Umgebungsvariablen einstellen

Umgebungsvariablen festlegen. Die Methode hier scheint für jede Person unterschiedlich zu sein, aber ich habe sie auf die gleiche Weise wie die Referenzseite festgelegt. Lassen Sie uns die beiden Zeichenfolgen festlegen, die wir zuvor notiert haben. $ heroku config: setze YOUR_CHANNEL_ACCESS_TOKEN =" Channel Access Token "--app App Name $ heroku config: setze YOUR_CHANNEL_SECRET =" Channel Secret "--app App Name

Webhook-Einstellungen

Kehren Sie zur LINE Developers-Konsole zurück und legen Sie die Webhook-URL fest. Webhook-URL: https: // app name.herokuapp.com / callback Drücken Sie auf Aktualisieren und stellen Sie Webhooks ein, und Sie sind fertig.

https://github.com/line/line-bot-sdk-java/tree/master/sample-spring-boot-echo#step-2 Sie können EchoBot bereitstellen, indem Sie hier auf [** Für Heroku bereitstellen **] klicken und daraus eine App erstellen.

Codierung

・ Bot-Einstellungen in LINE-Entwicklern ・ Heroku-Einstellungen ・ Zusammenarbeit zwischen den beiden Ist komplett. Starten Sie von hier aus die Codierung.

Bibliotheksinstallation

Dieses Mal werde ich hauptsächlich "flask" und "line-bot-sdk" verwenden. pip install flask line-bot-sdk In meiner Umgebung flask : 1.1.1 line-bot-sdk : 1.16.0 ist.

Darüber hinaus verwendet die Bibliothek zum Scraping: soupsieve==2.0 urllib3==1.25.8 beautifulsoup4

Arbeitsverzeichnis und seine Struktur

Es kann überall sein, aber wir empfehlen, ein Verzeichnis für Ihr Projekt zu erstellen. Verfassung: line_bot (Arbeitsverzeichnis) ├ main.py ├ scrape.py ├ Procfile ├ runtime.txt └ requirements.txt

Der Inhalt der Datei

①main.py Es ist der Hauptkörper. Wenn Sie mit Papagei testen möchten, geben Sie [hier] zurück (https://qiita.com/shimajiri/items/cf7ccf69d184fdb2fb26#flask%E3%81%A8line-bot-sdk%E3%82%92%E3%82%A4%E3 % 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% AB) wird hilfreich sein.

main.py


#Importieren Sie, was Sie brauchen
from flask import Flask, request, abort
import os
import scrape as sc

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
#Holen Sie sich Events auf LINE
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

#Umgebungsvariablen abrufen
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["LINE_BOT_CHANNEL_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["LINE_BOT_CHANNEL_SECRET"]

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

#Wird ausgeführt, wenn der Anwendungskörper geöffnet wird
@app.route("/")
def hello_world():
    return "hello world!"

#/Verarbeitung beim Zugriff auf den Rückruflink. Für Webhooks.
@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:
        abort(400)

    return 'OK'

#Ereignis beim Empfang einer Nachricht
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    '''
    #line_bot_API-Antwort_Ereignis mit Nachrichtenmethode.message.text(Benutzermeldung)Antworten
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))
    '''
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=sc.getWeather())
    )

if __name__ == "__main__":
#    app.run()
    port = int(os.getenv("PORT"))
    app.run(host="0.0.0.0", port=port)

②scrape.py Wetterinformationen kratzen. Ich hatte vor, es selbst zu schreiben, aber vorerst Klicken Sie hier → https://qiita.com/RIRO/items/1b67b0418b08a52de0d6 Ich habe den Code von geändert. Vielen Dank.

scrape.py


#Bibliothek importieren
import requests
from bs4 import BeautifulSoup

def getWeather():
    #tenki.URL der Seite des Zielbereichs von jp (diesmal Chofu City, Tokio)
    url = 'https://tenki.jp/forecast/3/16/4410/13208/'
    #HTTP-Anfrage
    r = requests.get(url)

    #Beschreiben Sie Folgendes im Fall einer Proxy-Umgebung
    """
    proxies = {
        "http":"http://proxy.xxx.xxx.xxx:8080",
        "https":"http://proxy.xxx.xxx.xxx:8080"
    }
    r = requests.get(url, proxies=proxies)
    """

    #HTML-Analyse
    bsObj = BeautifulSoup(r.content, "html.parser")

    #Holen Sie sich das heutige Wetter
    today = bsObj.find(class_="today-weather")
    weather = today.p.string

    #Eine Sammlung von Temperaturinformationen
    temp=today.div.find(class_="date-value-wrap")

    #Holen Sie sich die Temperatur
    temp=temp.find_all("dd")
    temp_max = temp[0].span.string #Höchste Temperatur
    temp_max_diff=temp[1].string #Im Vergleich zum Tag vor der höchsten Temperatur
    temp_min = temp[2].span.string #Niedrigste Temperatur
    temp_min_diff=temp[3].string #Im Vergleich zum Tag vor der niedrigsten Temperatur

    #Ich möchte, dass es sich vorerst bewegt, also gebe ich es zurück, indem ich Wetter und Temperatur miteinander verbinde.
    return weather+temp_max+temp_min

③Procfile Beschreibt, wie das Programm ausgeführt wird.

web: python main.py

④runtime.txt Eine Textdatei, die die Python-Version beschreibt. Da in 3.7.7 ein Fehler aufgetreten ist, habe ich ihn auf 3.6.10 gesetzt. Ist Heroku nicht mit 3.7 kompatibel?

runtime.txt


python-3.6.10

⑤ requirements.txt Eine Textdatei, die die zu installierenden Bibliotheken beschreibt.

requirements.txt


Flask==1.1.1
line-bot-sdk==1.16.0
soupsieve==2.0
urllib3==1.25.8
beautifulsoup4



Es gibt scrape.py, weil es die Wetterinformationen kratzt. EchoBot (zurückkehrender Papagei) usw. ist in Ordnung mit 4 anderen.

In Heroku bereitstellen


//Erstellen Sie eine erste Datei für git
git init
//Richten Sie ein Remote-Repository ein, das eine Verbindung zu einem lokalen Repository herstellt
heroku git:remote -a (Der Name der App wurde von Ihnen selbst festgelegt)
//Indizieren Sie alle geänderten Dateien
git add .
//Schreiben Sie die geänderte Datei in das Repository ("inital commit"Ist ein Kommentar, also ist alles in Ordnung)
git commit -m "inital commit"
//Schieben Sie eine lokal in Heroku erstellte Datei
git push heroku master

* Ich habe hier einen Fehler bekommen

Ich habe beautifulsoup4 in require.txt falsch geschrieben und einen Fehler erhalten. Ich dachte, dass die Versionsspezifikation schlecht war und versuchte, die Version zu ändern, aber der Bibliotheksname war falsch ()

Überprüfen Sie auf Heroku Seite

Überprüfen Sie Ihre Aktivitäten im Dashboard von Heroku. Wenn es wie das Bild aussieht, ist es erfolgreich. b7276e159aa0cadcfe46ba23ed0d4cc4.png

Webhook-Validierungsfehler

Ich habe diesen Teil verwendet, indem ich das Beispiel kopiert habe. Ich erhalte die Fehlermeldung "Der Bot-Server hat einen anderen HTTP-Statuscode als 200 zurückgegeben". BOT scheint jedoch normal zu funktionieren, daher habe ich es ignoriert.

Funktionsprüfung

Fügen Sie auf dem BOT-Verwaltungsbildschirm einen Freund mit QR hinzu und senden Sie eine Nachricht. Wenn die Wetterantwort (oder die Papageienrückgabe) erfolgreich ist, ist sie erfolgreich.

Next Momentan sende ich nur das Wetter und die Temperatur als Zeichenfolgen

--Format

Ich würde gerne so etwas machen. Es gibt andere Projekte und Studien, daher werde ich langsam aktualisieren. Vielen Dank an alle Referenzartikel.

Recommended Posts

Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
[Python] Ich habe versucht, LINE BOT die Wettervorhersage beantworten zu lassen
Ich möchte mit Python-Datenklasse nach hinten erben
Ich möchte mit Python debuggen
[Python] Ich möchte die Option -h mit argparse verwenden
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich möchte die Natur von Python und Pip kennenlernen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte MATLAB feval mit Python verwenden
Ich möchte ein Spiel mit Python machen
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
#Unresolved Ich möchte Gobject-Introspection mit Python3 kompilieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich möchte mit Python in eine Datei schreiben
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich möchte Lambda mit Python auf Mac AWS!
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
Ich möchte R-Datensatz mit Python verwenden
Ich möchte einen Quantencomputer mit Python betreiben
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich möchte initialisieren, wenn der Wert leer ist (Python)
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich möchte eine andere Version von Python mit pyvenv angeben
Ich wollte den Panasonic Programming Contest 2020 mit Python lösen
Ich möchte die von LINE an S3 gesendeten Fotos speichern
Ich habe versucht, die Zugverspätungsinformationen mit LINE Notify zu benachrichtigen
maya Python Ich möchte die gebackene Animation wieder reparieren.
Ich möchte Daten mit Python analysieren können (Teil 1)
Ich möchte mit Numpy die japanische Flagge in die Palau-Flagge ändern
Ich möchte Daten mit Python analysieren können (Teil 4)
Was ich getan habe, um die Python2 EOL mit Zuversicht zu begrüßen
Ich möchte Daten mit Python analysieren können (Teil 2)
Ich möchte automatisch an Online-Kursen mit Python + Selen teilnehmen!
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Ich möchte die Legende der IT-Technologiewelt kennenlernen
Holen Sie sich das Wetter mit Python-Anfragen
Holen Sie sich das Wetter mit Python-Anfragen 2
Ich mochte den Tweet mit Python. ..
Ich möchte ○○ mit Pandas machen
Ich kenne? Datenanalyse mit Python oder Dingen, die Sie mit numpy verwenden möchten, wenn Sie möchten
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte