[PYTHON] Benachrichtigen Sie LINE über die Informationen zum TV-Auftritt Ihres Lieblingsunterhalters

Zweck

Ich vermisste mein Lieblingsidol und meinen lachenden Entertainer, der im Fernsehen auftrat, und beschloss, sie auf LINE zu benachrichtigen. 2020-05-15 (9).png

Überblick

[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.

Programminformationserfassung

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.

Code verwendet

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')

Lauf

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.

Referenz

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

Benachrichtigen Sie LINE über die Informationen zum TV-Auftritt Ihres Lieblingsunterhalters
Benachrichtigen Sie LINE über Informationen zum Zugbetrieb
Benachrichtigen Sie LINE über Standortinformationen (Google-Karte) mit der GPS-SORACOM Edition mit mehreren Einheiten
Lassen Sie uns über das Wetter in Ihrer Lieblingsgegend von Yahoo Wetter auf LINE informiert werden!