・ Je souffre toujours de pollen de cette époque. ・ C'est difficile pour les personnes atteintes de pollinose à cause de la corona cette année. ・ Masque insuffisant. ・ Je veux créer quelque chose en utilisant python, grattage et heroku. ・ Image de sortie ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Créez un répertoire line_kafun sur votre bureau. Créez main.py qui gère line-sdk et weather.py qui collecte des informations sur le pollen à partir des informations météo de Yahoo
La structure des répertoires est la suivante.
line_kafun
├main.py
├weather.py
├Procfile
├runtime.txt
└requirements.txt
Installez les packages requis.
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.Importer py
app = Flask(__name__)
#Paramètres des variables d'environnement Heroku
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='Quelles sont vos informations de localisation actuelles?'),
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)
-Pour l'adresse à la place de text = event.message.address, reportez-vous à la [référence api] de linesevelopers (https://developers.line.biz/ja/reference/messaging-api/#audio-message). -Pour la partie TextSendMessage, je me suis référé au schéma d'URL de la référence API LINE. ・ ** Le schéma d'URL ne peut être utilisé que pour des discussions en tête-à-tête, pas pour des groupes. ** ** ・ '\ UDBC0 \ uDC20' est un pictogramme, et je me suis référé à Utiliser le "pictogramme LINE" dans LINE BOT. ..
(4)weather.py Récupération des informations sur le pollen de Yahoo.
.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 = ""
#Obtenez des informations html à partir de la première URL et obtenez la deuxième URL à partir de là
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')
#Obtenez les dates d'aujourd'hui et de demain à partir de la deuxième 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()
#Obtenez le statut pollinique aujourd'hui et demain
content_4 = soup.find_all('p',class_='flying')
today_kafun = content_4[0].get_text()
nextday_kafun = content_4[1].get_text()
#Obtenir la zone
content_5 = soup.find_all('h2',class_='yjM')
area = content_5[0].get_text()
result = today + 'de' + area + 'Est' + '「{}」'.format(today_kafun) + 'C'est vrai.' + '\n' +'\n'+ nextday + 'de' + area + 'Est' + '「{}」'.format(nextday_kafun) + 'C'est vrai.' + '\n' +'\n' + 'Faites attention.'
return result
Enfin, créez les fichiers requis (requirements.txt, Procfile, runtime.txt) et déployez-les sur Heroku. La méthode de déploiement est introduite sur de nombreux sites, je vais donc l'omettre. Pour plus de détails, reportez-vous à Créer un tableau d'affichage avec Heroku, Flask, SQL Alchemy. En outre, les paramètres Webhook des développeurs LINE sont également introduits sur de nombreux sites, je les omettrai donc. Pour plus de détails, reportez-vous à Créer un LINE BOT.
Recommended Posts