Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird

Einführung

Möglicherweise möchten Sie die Texte anzeigen, während Sie einen Titel in iTunes abspielen (obwohl sich der Name von Catalina in Musik geändert hat). Es ist jedoch mühsam, die Texte bei jeder Änderung des Songs manuell zu suchen und anzuzeigen. Lassen Sie Python die mühsame Arbeit erledigen.

(Hinzugefügt am 2020/01/04) Es wurde verbessert. → "Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird (verbesserte Version)"

Was du machen willst

Spielen Sie einen Song mit "Music", einer Standard-Mac-App, und zeigen Sie die Texte bei jeder Änderung des Songs automatisch auf der Lyrics-Site an.

Umgebung

Betriebssystem: macOS Catalina Version 10.15 Sprache: Python 3.6 Verwendete Bibliothek: Appscript, Urllib, BeautifulSoup, Selen Jede Bibliothek wurde mit PyCharm installiert. Ich denke, jeder kann mit pip installiert werden.

Songtitel holen

Holen Sie sich zuerst die Song-Informationen aus der Musik-App. Hier verwenden wir Appscript. Ich bin mir über die Details nicht sicher, aber es scheint, dass AppleScript mit Python betrieben werden kann. URL der Appscript-Site

Greifen Sie zunächst auf die App zu. Diesmal ist es Musik, also Musik (oder iTunes, wenn Sie Catalina oder früher verwenden).

music = appscript.app("Music")

Als nächstes erhalten Sie die Informationen des gespielten Songs.

name = music.current_track.name.get()  #Song Titel
artist = music.current_track.artist.get()  #Künstlername
album = music.current_track.album.get()  #Albumname
music_time = music.current_track.time.get()  #Songlänge ("Protokoll:Sekunden"Es ist eine Zeichenkette von)

Wenn die Länge des Songs eine Zeichenkette bleibt, ist dies problematisch. Ändern Sie sie daher auf die Anzahl der Sekunden. Die Länge des Songs wird verwendet, um das Umschalten von Songs zu bestimmen.

music_time = music_time.split(":")
music_time = int(music_time[0]) * 60 + int(music_time[1])

Anzeige der Texte

Finde die Lyrics-Seite

Sobald Sie die Song-Informationen haben, verwenden Sie diese, um auf die Lyrics-Site zuzugreifen. Diesmal verwendet die Lyrics-Site Uta-Net. Wir verwenden auch die Scraping-Bibliothek BeautifulSoup, um auf die Site zuzugreifen. Weitere Informationen zum Scraping mit Beautiful Soup finden Sie unter Scraping mit Python und Beautiful Soup.

Verwenden Sie zunächst die Funktion zum Suchen von Songtiteln auf der Site, um zum Suchergebnisbildschirm zu springen. Führen Sie eine prozentuale Codierung durch, um nach japanischen Songtiteln zu suchen.

name = parse.quote(name)  #Prozentuale Codierung
url = "https://www.uta-net.com/search/?Aselect=2&Keyword=" + name + "&Bselect=4&x=0&y=0"

html = request.urlopen(url)
soup = BeautifulSoup(html, "html.parser")

Wenn Sie zu den Suchergebnissen springen, werden gleichnamige Titel in einer Liste angezeigt. Wenn Sie sich den HTML-Code ansehen, werden der Songtitel und der Name des Sängers durch das a-Tag im tr-Tag aufgelistet. Suchen Sie also nach dem gesuchten Sänger. Wenn eine Übereinstimmung gefunden wird, wird der nächste Schritt ausgeführt.

tr = soup.find_all("tr")

name_url = ""  #Geben Sie die URL des gesuchten Songs ein
flag = False
for tag_tr in tr:
    a = tag_tr.find_all("a")
    #Es wird in der Reihenfolge von Songname, Sängername, Text und Komposition gespeichert.
    for i, tag_a in enumerate(a):
        if i == 0:  #Song Titel
            name_url = tag_a.get("href")
        elif i == 1:  #Name des Sängers
            if tag_a.string == artist:
                flag = True
                break
    if flag:
        break

Anzeige der Textseite

Dieses Mal muss nicht nur die Textseite automatisch geöffnet werden, sondern auch die vorherige Seite geschlossen werden, wenn zum nächsten Titel gewechselt wird. Dazu verwenden wir Selen, das Vorgänge im Browser automatisieren kann. Für Selen ist "Selen in Python" leicht zu verstehen.

Lassen Sie uns zunächst auf die URL zugreifen, die wir zuvor erhalten haben. Die Gesamtschleife ist wie folgt.

  1. Das Lied ändert sich ↓
  2. Öffnen Sie eine neue Registerkarte, um auf die Textseite zuzugreifen ↓
  3. Schließen Sie die vorherige Registerkarte ↓ 4.1 Zurück zu 1

Öffnen Sie zunächst den Browser vor der Schleife.

#Öffnen Sie Chrome
driver = webdriver.Chrome(executable_path="chromedriver")
#Anfangsregisterkarte des Schleifenursprungs
driver.get("https://www.google.com/")

Dann mache 2 ~ 3 in der Schleife. Zu diesem Zeitpunkt ist der Rand oben auf der Textseite ein Hindernis. Scrollen Sie also durch die Seite.

#Öffnen Sie eine neue Registerkarte und verschieben Sie sie
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[1])
#Greifen Sie am Ziel auf die angegebene URL zu
driver.get("https://www.uta-net.com/" + name_url)
#Scrollen Sie zur Position der Texte
driver.execute_script("window.scrollTo(0, 380);")

Komplett

Sie können jetzt den Text des Songs anzeigen, den Sie gerade spielen. Alles was Sie tun müssen, ist dies zu schleifen. Unten ist der gesamte Code.


import appscript
from urllib import request, parse
from bs4 import BeautifulSoup
from selenium import webdriver
import time


driver = webdriver.Chrome(executable_path="chromedriver")
driver.get("https://www.google.com/")  #Registerkarte "Initial"

music_time = 0
while True:
    start = time.time()

    # ----Songtitel holen----

    #Greifen Sie auf die Musik-App zu
    music = appscript.app("Music")

    #Songname, Albumname, Künstlername, Songlänge abspielen
    name = music.current_track.name.get()
    artist = music.current_track.artist.get()
    album = music.current_track.album.get()
    music_time = music.current_track.time.get()  # m:s str

    print(name, artist, album, music_time)

    # music_Zeit in Sekunden umrechnen
    music_time = music_time.split(":")
    music_time = int(music_time[0]) * 60 + int(music_time[1])

    # ----Greifen Sie auf die Lyrics-Site zu----

    name = parse.quote(name)  #Prozentuale Codierung
    url = "https://www.uta-net.com/search/?Aselect=2&Keyword=" + name + "&Bselect=4&x=0&y=0"

    try:
        html = request.urlopen(url)
        soup = BeautifulSoup(html, "html.parser")

        tr = soup.find_all("tr")

        name_url = ""
        flag = False
        for tag_tr in tr:
            a = tag_tr.find_all("a")
            for i, tag_a in enumerate(a):
                if i == 0:  #Song Titel
                    name_url = tag_a.get("href")
                elif i == 1:  #Name des Sängers
                    if tag_a.string == artist:
                        flag = True
                        break
            if flag:
                break

        #In neuem Tab öffnen
        driver.execute_script("window.open()")
        driver.switch_to.window(driver.window_handles[1])
        driver.get("https://www.uta-net.com/" + name_url)
        driver.execute_script("window.scrollTo(0, 380);")  #Scrollen Sie zur Position der Texte
        #Schließen Sie die vorherige Registerkarte
        driver.switch_to.window(driver.window_handles[0])
        driver.close()
        driver.switch_to.window(driver.window_handles[0])

    except:
        pass

    print("now browsing")
    print()

    #Warten Sie auf die Songzeit
    time.sleep(music_time - (time.time() - start))

abschließend

Während er diesen Artikel schreibt, zeigt er die Textseite weiterhin sicher an. Es gab jedoch einige Unzulänglichkeiten.

--Kann nicht behandelt werden, wenn der Songtitel Symbole oder Leerzeichen enthält -In erster Linie können Sie es nicht verwenden, es sei denn, es ist auf der Lyrics-Website aufgeführt

Die beiden oben genannten werden von try-außer ignoriert (da es keine Rolle spielt, ob Sie sie gelegentlich nicht anzeigen können). In Bezug auf das Ende bleibt keine andere Wahl, als die Texte anzuzeigen.

Recommended Posts

Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird
Lassen Sie uns automatisch den Text des Songs anzeigen, der in iTunes in Python abgespielt wird (verbesserte Version).
Den Inhalt der Daten in Python nicht kennen
Verwenden wir die offenen Daten von "Mamebus" in Python
Audio-Wellenform-Anzeige in Python
Wie ist der Fortschritt? Lassen Sie uns mit dem Boom in Python weitermachen
Messen Sie die Testabdeckung von Push-Python-Code auf GitHub.
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Django ~ Lass es uns im Browser anzeigen ~
Zeigen Sie eine Liste der Alphabete in Python 3 an
Zeigen Sie Python 3 im Browser mit MAMP an
Lassen Sie uns das Farbschema von iTerm2 je nach Tageszeit automatisch ändern
Das Ergebnis der Installation von Python auf Anaconda
Zeigen Sie das Diagramm von tensorBoard auf jupyter an
[Android] Zeigen Sie Bilder im Web im infoWindow von Google Map an
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Ich habe versucht, das RSS des Top-Songs des iTunes Store automatisch abzurufen
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich habe Pygame mit Python 3.5.1 in der Umgebung von pyenv unter OS X installiert
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
Ändern Sie in Python das Verhalten der Methode je nach Aufruf
Legen Sie die Obergrenze für die Anzahl der Wiederholungen rekursiver Funktionen in Python fest
Geben Sie die Anzahl der CPU-Kerne in Python aus
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Lassen Sie uns das Git-Commit-Protokoll in Python analysieren!
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Kopieren Sie die Liste in Python
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Lösen von Bewegungsgleichungen in Python (odeint)
Ausgabe in Form eines Python-Arrays
Zum Zeitpunkt des Python-Updates mit Ubuntu
Ich möchte den Fortschritt in Python anzeigen!
[Beispiel für eine Python-Verbesserung] In 2 Wochen wurden die Grundlagen von Python auf einer kostenlosen Website erlernt
[Maschinelles Lernen] "Erkennung von Abnormalitäten und Erkennung von Änderungen" Zeichnen wir die Abbildung von Kapitel 1 in Python.
Lassen Sie uns über das Wetter in Ihrer Lieblingsgegend von Yahoo Wetter auf LINE informiert werden!
Zeigen Sie in Python n Nachkommastellen an
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
In Python sortieren. Lassen Sie uns als nächstes über den Algorithmus nachdenken.
[Python] Ruft die Liste der im Modul definierten Klassen ab
Lassen Sie uns die Grundlagen des Python-Codes von TensorFlow aufschlüsseln
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Implementieren Sie die Lösung der Riccati-Algebra in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Verwenden wir die Python-Version des Confluence-API-Moduls.
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Schreiben Sie in Python ein logarithmisches Histogramm auf die x-Achse
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Heap Sort Edition)