・ 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 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
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)
(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
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.
Recommended Posts