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.
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 zunächst bei LINE Developers. Die Registrierung ist einfach. https://developers.line.me/ja/
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
ist. Es wird bald enden.
So verwenden Sie die API
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
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.
Sie können eine neue App mit "$ heroku create app name" erstellen. Bitte beachten Sie, dass die Unterleiste "_" nicht verwendet werden kann.
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
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.
・ Bot-Einstellungen in LINE-Entwicklern ・ Heroku-Einstellungen ・ Zusammenarbeit zwischen den beiden Ist komplett. Starten Sie von hier aus die Codierung.
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
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
①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.
//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 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 Ihre Aktivitäten im Dashboard von Heroku. Wenn es wie das Bild aussieht, ist es erfolgreich.
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.
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