J'ai gratté tenki.jp et incorporé les prévisions météorologiques dans le linebot. https://tenki.jp/
windows python 3.6.4
#URL du site cible
url = "https://tenki.jp/forecast/6/30/6200/27100/"
#Création d'instance
res = urllib.request.urlopen(url)
soup = BeautifulSoup(res, 'html.parser')
«html.parser» est comme un filtre nécessaire au grattage.
weather = soup.find_all("p", class_="weather-telop")
temp = soup.find_all("dd", class_="high-temp temp")
low_temp = soup.find_all("dd", class_="low-temp temp")
tds = soup.select("tr.rain-probability td")
hini = soup.find_all("h3", class_="left-style")
Du haut, le grattage se fait dans l'ordre "météo, température, température minimale, probabilité de précipitations, date". J'ai besoin de m'habituer à utiliser correctement find_all et select, mais je pensais qu'il n'y aurait pas de problème si je n'utilisais que select.
tenki = hini[0].getText() + "\n\n" + weather[0].getText()
kion = "\n meilleur" + temp[0].getText()
low_kion = "Le minimum" + low_temp[0].getText()
rain1 = "\n\n Probabilité de précipitation\n00-06:00" + tds[0].getText()
rain2 = "\n06-12 heure" + tds[1].getText()
rain3 = "\n12-18h00" + tds[2].getText()
rain4 = "\n18-24h00" + tds[3].getText()
Tous les éléments récupérés seront acquis sous forme de liste. Cette fois, fondamentalement, le contenu de [0] était les données d'aujourd'hui, et le contenu de [1] était les données de demain, donc c'était relativement facile.
import urllib.request
from bs4 import BeautifulSoup
def getw():
#URL du site cible
url = "https://tenki.jp/forecast/6/30/6200/27100/"
#Création d'instance
res = urllib.request.urlopen(url)
soup = BeautifulSoup(res, 'html.parser')
#Élément cible
#La météo d'aujourd'hui
weather = soup.find_all("p", class_="weather-telop")
temp = soup.find_all("dd", class_="high-temp temp")
low_temp = soup.find_all("dd", class_="low-temp temp")
tds = soup.select("tr.rain-probability td")
hini = soup.find_all("h3", class_="left-style")
tenki = hini[0].getText() + "\n\n" + weather[0].getText()
kion = "\n meilleur" + temp[0].getText()
low_kion = "Le minimum" + low_temp[0].getText()
rain1 = "\n\n Probabilité de précipitation\n00-06:00" + tds[0].getText()
rain2 = "\n06-12 heure" + tds[1].getText()
rain3 = "\n12-18h00" + tds[2].getText()
rain4 = "\n18-24h00" + tds[3].getText()
a = tenki+kion+low_kion+rain1+rain2+rain3+rain4
return a
Après cela, chargez cette fonction dans main.py de linebot.
text_in = event.message.text
if "aujourd'hui" in text_in:
line_bot_api.reply_message(event.reply_token,TextSendMessage(text=scw.getw()))
Lorsque l'utilisateur entre un caractère contenant le mot «aujourd'hui», la météo du jour s'affiche. Puis déployez et terminez!
Je devrais être capable d'écrire plus intelligemment, alors je vais laisser cela comme un problème ensuite. De plus, comme c'est un BOT qui n'est pas du tout intéressant, il y a beaucoup de choses qui peuvent être faites, comme l'ajout d'arrangements tels que "Avez-vous un parapluie?" S'il pleut, laissons cela comme la prochaine tâche.
Cela n'a pas d'importance du tout, mais j'ai mal au dos.
Recommended Posts