In Python habe ich einen LINE-Bot erstellt, der Polleninformationen aus Standortinformationen sendet.

(1. Hintergrund

・ Ab dieser Zeit leide ich immer an Pollen. ・ Es ist schwer für Menschen mit Pollinose wegen Korona in diesem Jahr. ・ Unzureichende Maske. ・ Ich möchte etwas mit Python, Scraping und Heroku machen. ・ Ausgabebild ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ unnamed.png

(2) Umweltbau

Erstellen Sie ein Verzeichnis line_kafun auf Ihrem Desktop. Erstellen Sie main.py, das line-sdk verarbeitet, und weather.py, das Polleninformationen aus Yahoo-Wetterinformationen sammelt.

Die Verzeichnisstruktur ist wie folgt.

line_kafun
├main.py
├weather.py
├Procfile
├runtime.txt
└requirements.txt

Installieren Sie die erforderlichen Pakete.

pip install flask
pip install line-bot-sdk
pip install beautifulsopu4
pip install gunicorn
pip install lxml
pip install requests

(3)main.py

.py:main.py


from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,LocationMessage
)
import os
import weather as wt #weather.Import py


app = Flask(__name__)

#Einstellungen der Heroku-Umgebungsvariablen
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.route("/")
def hello_world():
    return "hello world!"


@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'



@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    if 'Pollen' in event.message.text:
        line_bot_api.reply_message(
            event.reply_token,
       [
            TextSendMessage(text='Was sind Ihre aktuellen Standortinformationen?'),
            TextSendMessage(text='https://line.me/R/nv/location/'),
            ]
        )
  

@handler.add(MessageEvent, message=LocationMessage)
def handle_location(event):
    text = event.message.address
    result = wt.get_weather(text)
    line_bot_api.reply_message(
    event.reply_token,
    TextSendMessage(text=result + '\uDBC0\uDC20')
    )


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

Ergänzende Erklärung

(4)weather.py Polleninformationen von Yahoo abkratzen.

.py:weather.py


import requests
from bs4 import BeautifulSoup
import re
import lxml


def get_weather(text):
    location = re.findall('\d{3}-\d{4}',text)
    location2 = location[0].replace('-','')
    url1 = "https://weather.yahoo.co.jp/weather/search/?p={}".format(location2)
    url2 = ""

    #Holen Sie sich HTML-Informationen von der ersten URL und erhalten Sie die zweite URL von dort
    res = requests.get(url1)
    res.encoding = res.apparent_encoding
    html_doc = res.text
    soup = BeautifulSoup(html_doc,"lxml")
    content_1 = soup.find_all(id = 'rsltmuni')
    for i in content_1:
        content_2 = i.find('a')
        url2 = 'https:' + content_2.get('href')


    #Holen Sie sich heute und morgen Daten von der zweiten URL(today、nextday)
    res = requests.get(url2)
    res.encoding = res.apparent_encoding
    html_doc = res.text
    soup = BeautifulSoup(html_doc,"lxml")
    content_3 = soup.find_all('p',class_='date')
    today = content_3[0].get_text()
    nextday = content_3[1].get_text()

    #Holen Sie sich heute und morgen den Pollenstatus
    content_4 = soup.find_all('p',class_='flying')
    today_kafun = content_4[0].get_text()
    nextday_kafun = content_4[1].get_text()

    #Holen Sie sich Bereich
    content_5 = soup.find_all('h2',class_='yjM')
    area = content_5[0].get_text()


    result = today + 'von' + area + 'Ist' + '「{}」'.format(today_kafun) + 'Korrekt.' + '\n' +'\n'+ nextday + 'von' + area + 'Ist' + '「{}」'.format(nextday_kafun) + 'Korrekt.' + '\n' +'\n' + 'Achtung.'

    return result

(5) In Heroku bereitstellen und Webhooks für LINE-Entwickler einrichten

Erstellen Sie schließlich die erforderlichen Dateien (Anforderungen.txt, Procfile, runtime.txt) und stellen Sie sie in Heroku bereit. Die Bereitstellungsmethode wird auf vielen Websites eingeführt, daher werde ich sie weglassen. Weitere Informationen finden Sie unter Erstellen eines Bulletin Boards mit Heroku, Flask, SQL Alchemy. Außerdem werden die Webhook-Einstellungen von LINE-Entwicklern auf vielen Websites eingeführt, sodass ich sie weglassen werde. Weitere Informationen finden Sie unter Erstellen eines LINE BOT.

Wenn Sie im abgeschlossenen LINE-Bot "Pollen" eingeben, werden Sie nach Standortinformationen gefragt. Tippen Sie also darauf, um Polleninformationen (abgeschlossen) abzurufen.

Recommended Posts

In Python habe ich einen LINE-Bot erstellt, der Polleninformationen aus Standortinformationen sendet.
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
Ich habe einen LINE-Bot erstellt, der jeden Tag pünktlich empfohlene Bilder sendet
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
[IOS] Ich habe ein Widget erstellt, das den Trend von Qiita in Pythonista3 anzeigt. [Python]
Ich habe einen Stempelersatzbot mit Linie gemacht
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Mattermost Bot mit Python gemacht (+ Flask)
[Python] Ich habe einen Bot erstellt, der mir die aktuelle Temperatur anzeigt, wenn ich einen Ortsnamen in LINE eingebe
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
[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 eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Eine persönlich verwendete Vorlage zum Erstellen von Discord BOT in Python (Notizen)
Ich habe einen Python-Text gemacht
Ich habe einen Zwietrachtbot gemacht
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Python-Bedingungsextraktion aus der Liste, die ich oft vergesse
Ich habe einen schnellen Feed-Reader mit Feedparser in Python erstellt
Bis Django etwas mit einem Linienbot zurückgibt!
Ich habe Chatbot mit LINE Messaging API und Python erstellt
[AWS] Ich habe BOT mit LINE WORKS (Implementierung) in Erinnerung gerufen.
Ich habe einen Line-Bot mit Python gemacht!
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe Line Benachrichtigung in Python versucht
Erstellen Sie mit Django einen LINE-Bot
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
Einfach! Implementieren Sie einen Twitter-Bot, der auf Heroku in Python ausgeführt wird
Beschreiben eines Netzwerks, das Anmerkungsinformationen von Benutzern in Keras akzeptiert
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
Ich habe einen Twitter-Bot erstellt, der das von #PokemonGO gefangene Pokemon murmelt
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe ein Plugin erstellt, um mit Vim eine Markdown-Tabelle aus CSV zu generieren
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Ich habe mit Python eine Hex-Map erstellt