J'ai raté mon idole préférée et mon artiste riant apparaissant à la télévision, alors j'ai décidé de les informer sur LINE.
[Guide Yahoo! TV G](https://tv.yahoo.co.jp/search/?q=%E7%9C%89%E6%9D%91%E3%81%A1%E3%81%82% Nous avons obtenu des informations sur les programmes télévisés de E3% 81% 8D & g = & a = 23 & oa = 1 & s = 1% 22) et l'avons notifié à l'aide de LINE Notify. J'ai configuré le Raspberry pi pour exécuter le programme tous les matins à 9h.
Par exemple, dans le cas du programme terrestre de "Chiaki Meimura" (réglage régional de Tokyo), il s'agit de l'URL. https://tv.yahoo.co.jp/search/?q=眉村ちあき&g=0&a=23&oa=1&s=1
Définissez une fonction appelée tv_information (query, romaji, jenre) et recevez le nom de l'animateur que vous souhaitez notifier en entrée, le nom du fichier texte qui enregistre le programme d'apparence et le genre du programme télévisé que vous souhaitez notifier. J'ai obtenu les informations de l'URL que j'ai saisie. Cette fois, nous sommes limités aux programmes terrestres à Tokyo. Je voulais être notifié des informations sur la combinaison du rire et New York, mais comme de nombreux programmes liés à New York dans l'état américain sont notifiés dans le quartier de New York, je permet de préciser le genre du programme et de le notifier. Entrez jenre = 0 pour tous les genres et genre = 5 pour la variété.
LINE
LINE Notify
J'ai un jeton d'ici.
Entrez le jeton obtenu à la place de line_notify_token =" Obtained LINE API "
.
tv_line.py
import requests
from bs4 import BeautifulSoup
import sys
from time import sleep
#Obtenir des informations TV(argument:Nom de l'artiste, caractères romains(Faites-en un nom de fichier), Genre)
def tv_information(query,romaji,jenre):
#0 pour tous les genres, 5 pour la variété
if jenre==0:
no=''
elif jenre==5:
no='05'
url = "https://tv.yahoo.co.jp/search/?q="+query+"&g="+no+"&a=23&oa=1&s=1"
res = requests.get(url)
status = res.status_code
#Si le code d'état des demandes n'est pas 200, notifiez LINE et quittez.
if status != 200:
def LineNotify(message):
line_notify_token = "API LINE acquise"
line_notify_api = "https://notify-api.line.me/api/notify"
payload = {"message": message}
headers = {"Authorization": "Bearer " + line_notify_token}
requests.post(line_notify_api, data=payload, headers=headers)
message = "Les demandes ont échoué"
LineNotify(message)
sys.exit()
#Si le code d'état est 200, le traitement se poursuit
else:
pass
#Obtenez le nombre de recherches par mots clés
soup = BeautifulSoup(res.text,"html.parser")
p = soup.find("p",class_="floatl pt5p")
#Si le nombre de recherches est égal à 0, le processus se termine
if p == None:
print('0')
non={}
return non
#Poursuivre le traitement si le nombre de recherches est égal ou supérieur à 1
else:
pass
answer = int(p.em.text) #Nombre de recherches
page = 1
list1 = [] #Date et heure de diffusion
list2 = [] #Diffuseur
list3 = [] #Titre du programme
#Obtenez des informations pour chaque page
while answer > 0:
url = "https://tv.yahoo.co.jp/search/?q="+query+"&g="+no+"&a=23&oa=1&s="+str(page)
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")
dates = soup.find_all("div",class_="leftarea")
for date in dates:
d = date.text
d = ''.join(d.splitlines())
list1.append(d)
for s in soup("span",class_="floatl"):
s.decompose()
tvs = soup.find_all("span",class_="pr35")
for tv in tvs:
list2.append(tv.text)
titles = soup.find_all("div",class_="rightarea")
for title in titles:
t = title.a.text
list3.append(t)
page = page + 10
answer = answer - 10
sleep(3)
#Une liste qui résume la date et l'heure de diffusion + la station de diffusion + le titre du programme de la liste1 à la liste3_Créer un nouveau
list_new = [x +" "+ y for (x , y) in zip(list1,list2)]
list_new = [x +" "+ y for (x , y) in zip(list_new,list3)]
filename=romaji+'.txt'
#Développez les données précédentes en tant qu'ensemble à partir d'un fichier texte
f = open(filename,'r')
f_old = f.read()
list_old = f_old.splitlines()
set_old = set(list_old)
f.close()
f = open(filename, 'w')
for x in list_new:
f.write(str(x)+"\n") #Écriture de fichier
f.close()
#Prendre la différence entre les données précédentes et les données actuelles
set_new = set(list_new)
set_dif = set_new - set_old
return set_dif
def LINE_notify(set_dif,query,romaji):
#S'il n'y a pas de différence définie, le traitement se termine
if len(set_dif) == 0:
return
#S'il y a une différence, retirez-la sous forme de liste et notifiez LINE
else:
list_now = list(set_dif)
list_now.sort()
for L in list_now:
def LineNotify(message):
line_notify_token = "API LINE acquise"
line_notify_api = "https://notify-api.line.me/api/notify"
payload = {"message": message}
headers = {"Authorization": "Bearer " + line_notify_token}
requests.post(line_notify_api, data=payload, headers=headers)
message = query+"Informations sur le programme d'apparence\n\n" + L
LineNotify(message)
sleep(2)
return
#Notifier les programmes d'apparition de Chiaki Meimura de tous genres
set_dif1=tv_information('Chiaki Mayumura','mayumura',0)
LINE_notify(set_dif1,'Chiaki Mayumura','mayumura')
#Notifier les programmes d'apparence des escaliers pneumatiques de tous genres
set_dif2=tv_information('Escaliers pneumatiques','kuuki',0)
LINE_notify(set_dif2,'Escaliers pneumatiques','kuuki')
#Notifier le programme d'apparition de New York de divers genres
set_dif3=tv_information('New York','newy',5)
LINE_notify(set_dif3,'New York','newy')
J'ai essayé d'exécuter ce programme sur Raspberry pi tous les jours à 9h.
J'ai écrit la déclaration suivante dans le fichier avec crontab -e
.
00 09 * * * python3 /home/pi/tv_line.py
Écrivez le travail après l'exécution. Écrivez l'heure d'exécution dans l'ordre des minutes, heures, jours, mois et jours.
Obtenir des informations à partir des listes de Yahoo TV (scraping Web pour débutants) Acquisition du programme d'apparition de Minami Hamabe en grattant [Résumé des commandes crontab [collection de commandes Linux]] (https://eng-entrance.com/linux-command-crontab)
Recommended Posts