Ich vermisste mein Lieblingsidol und meinen lachenden Entertainer, der im Fernsehen auftrat, und beschloss, sie auf LINE zu benachrichtigen.
[Yahoo! TV G Guide](https://tv.yahoo.co.jp/search/?q=%E7%9C%89%E6%9D%91%E3%81%A1%E3%81%82% Wir haben TV-Programminformationen von E3% 81% 8D & g = & a = 23 & oa = 1 & s = 1% 22) erhalten und diese mit LINE Notify benachrichtigt. Ich habe den Raspberry Pi so eingestellt, dass das Programm jeden Morgen um 9 Uhr ausgeführt wird.
Im Fall des terrestrischen Programms "Chiaki Meimura" (regionale Umgebung Tokio) ist dies beispielsweise die URL. https://tv.yahoo.co.jp/search/?q=眉村ちあき&g=0&a=23&oa=1&s=1
Definieren Sie eine Funktion namens tv_information (query, romaji, jenre) und erhalten Sie den Namen des Entertainers, den Sie als Eingabe benachrichtigen möchten, den Namen der Textdatei, die das Erscheinungsprogramm aufzeichnet, und das Genre des TV-Programms, das Sie benachrichtigen möchten. Ich habe die Informationen von der URL erhalten, die ich eingegeben habe. Dieses Mal beschränken wir uns auf terrestrische Programme in Tokio. Ich wollte über Informationen über die Lachkombination und New York informiert werden, aber da viele Programme im Zusammenhang mit New York im US-Bundesstaat im Bezirk New York gemeldet werden, kann ich das Genre des Programms angeben und benachrichtigen. Geben Sie jenre = 0 für alle Genres und genre = 5 für die Vielfalt ein.
LINE LINE Notify Ich habe von hier ein Zeichen bekommen. Geben Sie das erhaltene Token anstelle von "line_notify_token =" Erhaltene LINE-API "ein.
tv_line.py
import requests
from bs4 import BeautifulSoup
import sys
from time import sleep
#Holen Sie sich TV-Informationen(Streit:Name des Darstellers, römische Schriftzeichen(Machen Sie daraus einen Dateinamen), Genre)
def tv_information(query,romaji,jenre):
#0 für alle Genres, 5 für Abwechslung
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
#Wenn der Statuscode von Requests nicht 200 ist, benachrichtigen Sie LINE und beenden Sie das Programm.
if status != 200:
def LineNotify(message):
line_notify_token = "Erworbene LINE API"
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 = "Anfragen fehlgeschlagen"
LineNotify(message)
sys.exit()
#Wenn der Statuscode 200 lautet, wird die Verarbeitung fortgesetzt
else:
pass
#Ermitteln Sie die Anzahl der Keyword-Suchen
soup = BeautifulSoup(res.text,"html.parser")
p = soup.find("p",class_="floatl pt5p")
#Wenn die Anzahl der Suchvorgänge 0 ist, wird der Vorgang beendet
if p == None:
print('0')
non={}
return non
#Setzen Sie die Verarbeitung fort, wenn die Anzahl der Suchvorgänge 1 oder mehr beträgt
else:
pass
answer = int(p.em.text) #Anzahl der Suchvorgänge
page = 1
list1 = [] #Datum und Uhrzeit der Übertragung
list2 = [] #Sender
list3 = [] #Programmtitel
#Informationen zu jeder Seite abrufen
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)
#Eine Liste, in der Datum und Uhrzeit der Sendung + Sender + Programmtitel von Liste1 bis Liste3 zusammengefasst sind_Erstelle neu
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'
#Erweitern Sie die vorherigen Daten als Satz aus einer Textdatei
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") #Datei schreiben
f.close()
#Nehmen Sie die Differenz zwischen den vorherigen und den aktuellen Daten
set_new = set(list_new)
set_dif = set_new - set_old
return set_dif
def LINE_notify(set_dif,query,romaji):
#Wenn kein Unterschied festgelegt ist, wird die Verarbeitung beendet
if len(set_dif) == 0:
return
#Wenn es einen Unterschied gibt, nehmen Sie ihn als Liste heraus und benachrichtigen Sie LINE
else:
list_now = list(set_dif)
list_now.sort()
for L in list_now:
def LineNotify(message):
line_notify_token = "Erworbene LINE API"
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+"Informationen zum Erscheinungsprogramm\n\n" + L
LineNotify(message)
sleep(2)
return
#Benachrichtigen Sie die Erscheinungsprogramme von Chiaki Meimura über alle Genres
set_dif1=tv_information('Chiaki Mayumura','mayumura',0)
LINE_notify(set_dif1,'Chiaki Mayumura','mayumura')
#Benachrichtigen Sie die Erscheinungsprogramme von Lufttreppen aller Genres
set_dif2=tv_information('Lufttreppen','kuuki',0)
LINE_notify(set_dif2,'Lufttreppen','kuuki')
#Benachrichtigen Sie das Auftrittsprogramm von New York über verschiedene Genres
set_dif3=tv_information('New York','newy',5)
LINE_notify(set_dif3,'New York','newy')
Ich habe versucht, dieses Programm jeden Tag um 9 Uhr auf Raspberry Pi auszuführen.
Ich habe die folgende Anweisung in die Datei mit crontab -e
geschrieben.
00 09 * * * python3 /home/pi/tv_line.py
Schreiben Sie den Job nach der Laufzeit. Schreiben Sie die Ausführungszeit in der Reihenfolge Minuten, Stunden, Tage, Monate und Tage.
Informationen aus Yahoo TV-Listen abrufen (Web-Scraping für Anfänger) Erwarb das Erscheinungsprogramm von Minami Hamabe durch Schaben [Zusammenfassung der crontab-Befehle [Linux-Befehlssammlung]] (https://eng-entrance.com/linux-command-crontab)
Recommended Posts