Lassen Sie uns automatisch den Text des Songs anzeigen, der in iTunes in Python abgespielt wird (verbesserte Version).

Einführung

Eine wichtige Funktion wurde zu dem zuvor erstellten "Lassen Sie uns automatisch den Text des in iTunes in iTunes abgespielten Songs anzeigen" hinzugefügt.

Verbesserungspunkte

Unterstützt das Überspringen von Songs

Sobald die Textseite eines Songs geöffnet wurde, wurde diese Seite bis zum Ende dieses Songs angezeigt. Wenn Sie jedoch zum nächsten Song springen, wird in den Texten auch der nächste Song angezeigt.

Vorher ändern


while True:
    start = time.time()  # delete

    # ~~~~~~~~

    time.sleep(music_time - (time.time() - start))  # delete

Nach der veränderung


prev_track_name = ""  # add
while True:
    #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

    # add-start
    if name == prev_track_name:
        time.sleep(1)
        continue

    prev_track_name = name
    # add-end

    # ~~~~~~~~

    time.sleep(1)  # add

Schnellere Anzeige

Ich habe eine Zeitüberschreitung festgelegt, da das Anzeigen der Textseite lange gedauert hat.

Nach der veränderung


driver = webdriver.Chrome(executable_path="chromedriver")
driver.get("https://www.google.com/")  #Registerkarte "Initial"
driver.set_page_load_timeout(5)  #Maximale Wartezeit beim Lesen (in diesem Fall 5 Sekunden)# add

Die Texte selbst können bis zu 5 Sekunden lang gelesen werden, andere Bilder dauern jedoch lange und die Ladezeit der Seite ist lang, sodass sie nach 5 Sekunden zwangsweise beendet werden. Übrigens wurde auch "Zur Position der Texte scrollen" geändert, um nach der Position der Texte zu suchen und zu dieser Position zu scrollen.

Vorher ändern


while True:
    # ~~~~~~~~

    try:
        # ~~~~~~~~

        #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])

Nach der veränderung


while True:
    # ~~~~~~~~

    try:
        # ~~~~~~~~

        #In neuem Tab öffnen
        driver.execute_script("window.open()")
        driver.switch_to.window(driver.window_handles[1])

        # add-start
        try:
            driver.get("https://www.uta-net.com/" + name_url)
        except:
            pass
        #Scrollen Sie zur Position der Texte
        driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))
        # add-end

        #Schließen Sie die vorherige Registerkarte
        driver.switch_to.window(driver.window_handles[0])
        driver.close()
        driver.switch_to.window(driver.window_handles[0])

App-Steuerung

Es ist fast ein Bonus, aber ich habe es möglich gemacht, "Wiedergabe" und "zum nächsten Song" sogar auf dem Terminal zu steuern. Erstens ist die Grundoperation.

Grundbetrieb


music = appscript.app("Music")

#Wiedergabe
music.play()

#Pause
music.pause()

#Spielpause
music.playpause()

#Zum vorherigen Titel
music.previous_track()

#Zum nächsten Titel
music.next_track()

Verwenden Sie dies so wie es ist. Bei normaler Eingabe () ist es nicht möglich, zu warten, bis die Eingabe ausgeführt wird, und eine andere Verarbeitung durchzuführen, sodass eine Eingabe mit einer Zeitüberschreitung verwendet wurde.

Eingabe mit Timeout


from select import select
import sys

#Die Argumente lauten "Lesen", "Schreiben", "Ausnahme" und "Wartezeit", und diesmal wird nur Lesen verwendet.
#Wartezeit ist 0.Angegeben als 5 Sekunden
# 0.Wenn nach 5 Sekunden keine Eingabe erfolgt, wird eine leere Liste zurückgegeben
read, _, _ = select([sys.stdin], [], [], 0.5)

if read:
    command = sys.stdin.readline().strip()
else:
    command = ""

Ich werde das Obige so in den Code setzen, wie es ist.

Nach der veränderung


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

    # add-start
    # ----App-Steuerung----

    #Eingabe mit Timeout
    read, _, _ = select([sys.stdin], [], [], 0.5)

    if read:
        command = sys.stdin.readline().strip()
    else:
        command = ""

    if command == "b":  #Zum vorherigen Titel
        music.previous_track()
    elif command == "p":  #Spielpause
        music.playpause()
    elif command == "n":  #Zum nächsten Titel
        music.next_track()
    # add-end

    # ~~~~~~~~

Auto Scroll

Da möglicherweise nicht der gesamte Text angezeigt wird, wird automatisch ein Bildlauf durchgeführt.

Nach der veränderung


while True:
    # ~~~~~~~~

    if name == prev_track_name:
        time.sleep(1)

        # add-start
        count += 1
        if count % 5 == 0:
            driver.execute_script(
                "window.scrollTo(window.pageXOffset, window.pageYOffset + " + str(kashi_length // music_time * 5) + ");"
            )
        # add-end

        continue

        # ~~~~~~~~

        #In neuem Tab öffnen
        driver.execute_script("window.open()")
        driver.switch_to.window(driver.window_handles[1])
        try:
            driver.get("https://www.uta-net.com/" + name_url)
        except:
            pass
        #Scrollen Sie zur Position der Texte
        driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))

        # add-start
        #Länge der Texte auf Seite
        kashi_length = driver.find_element_by_id("view_mylink").location["y"] - \
                       driver.find_element_by_id("view_kashi").location["y"]
        # add-end

        #Schließen Sie die vorherige Registerkarte
        driver.switch_to.window(driver.window_handles[0])
        driver.close()
        driver.switch_to.window(driver.window_handles[0])

Ermitteln Sie die Länge des Textteils auf der Seite (Textlänge / Songlänge). * 5 Scrollen Sie alle 5 Sekunden nach unten, um in einem angemessenen Tempo zu scrollen.

Verbesserte Genauigkeit der Textsuche

Konvertieren Sie zunächst das Alphabet in voller Breite in die halbe Breite. Außerdem wurde bei der Suche "genaue Übereinstimmung" in "enthält" geändert.

Nach der veränderung


while True:
    # ~~~~~~~~

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

    #Vollwinkel bis Halbwinkel# add
    name = str(name).translate(str.maketrans({chr(0xFF01 + i): chr(0x21 + i) for i in range(94)}))

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

Darüber hinaus kann sich die Position des Sängernamens aufgrund des Einflusses der Kronenmarke auf die Seite mit viel Zugriff verschieben, sodass dies behoben wurde.

Nach der veränderung


while True:
    # ~~~~~~~~

    try:
        # ~~~~~~~~

        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 or i == 2:  #Name des Sängers#Addiere 2, wo es nur 1 gab
                    if tag_a.string == artist:
                        flag = True
                        break
            if flag:
                break

Ganzer Code

import time
import sys
from select import select

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

driver = webdriver.Chrome(executable_path="chromedriver")
driver.get("https://www.google.com/")  #Registerkarte "Initial"
driver.set_page_load_timeout(5)  #Sie kann je nach Geschwindigkeit der Linie kürzer sein

music_time = 0
prev_track_name = ""
count = 0
kashi_length = 0
while True:
    #Greifen Sie auf die Musik-App zu
    music = appscript.app("Music")

    # ----App-Steuerung----

    #Eingabe mit Timeout
    read, _, _ = select([sys.stdin], [], [], 0.5)

    if read:
        command = sys.stdin.readline().strip()
    else:
        command = ""

    if command == "b":  #Zum vorherigen Titel
        music.previous_track()
    elif command == "p":  #Spielpause
        music.playpause()
    elif command == "n":  #Zum nächsten Titel
        music.next_track()

    # ----Songtitel holen----

    #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

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

    if name == prev_track_name:
        time.sleep(1)
        count += 1
        if count % 5 == 0:
            driver.execute_script(
                "window.scrollTo(window.pageXOffset, window.pageYOffset + " + str(kashi_length // music_time * 5) + ");"
            )
        continue

    prev_track_name = name

    print("{} / {} / {}".format(name, artist, album))

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

    #Vollwinkel bis Halbwinkel
    name = str(name).translate(str.maketrans({chr(0xFF01 + i): chr(0x21 + i) for i in range(94)}))

    name = parse.quote(name)  #Prozentuale Codierung
    url = "https://www.uta-net.com/search/?Aselect=2&Keyword=" + name + "&Bselect=3&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 or i == 2:  #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])
        try:
            driver.get("https://www.uta-net.com/" + name_url)
        except:
            pass
        #Scrollen Sie zur Position der Texte
        driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))
        kashi_length = driver.find_element_by_id("view_mylink").location["y"] - \
                       driver.find_element_by_id("view_kashi").location["y"]
        #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("b:Bisherige| p:Spielpause| n:Nächster")
    print()

    time.sleep(1)

Recommended Posts

Lassen Sie uns automatisch den Text des Songs anzeigen, der in iTunes in Python abgespielt wird (verbesserte Version).
Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird
Verwenden wir die Python-Version des Confluence-API-Moduls.
Den Inhalt der Daten in Python nicht kennen
Verwenden wir die offenen Daten von "Mamebus" in Python
Stellen Sie die neueste Version von Python in Linux (Debian) von Chromebook
Wie ist der Fortschritt? Lassen Sie uns mit dem Boom in Python weitermachen
Messen Sie die Testabdeckung von Push-Python-Code auf GitHub.
[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
pyenv-change die Python-Version von virtualenv
Audio-Wellenform-Anzeige in Python
Lassen Sie uns das Farbschema von iTerm2 je nach Tageszeit automatisch ändern
[Android] Zeigen Sie Bilder im Web im infoWindow von Google Map an
Zeigen Sie den Status der COVID 19-Infektion in Japan mit Splunk an (GitHub-Version).
Ich habe versucht, das RSS des Top-Songs des iTunes Store automatisch abzurufen
Ü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
Informationen zur virtuellen Umgebung von Python Version 3.7
Zeigen Sie Python 3 im Browser mit MAMP an
Das Ergebnis der Installation von Python auf Anaconda
[Python] Probieren Sie pydash der Python-Version von lodash aus
Doppelstart in Python verhindern (verbesserte Version)
Zeigen Sie das Diagramm von tensorBoard auf jupyter an
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
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
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
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
Test von emacs-org parser orgparse für Python
[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
Verwenden Sie die neueste Version von PyCharm unter Ubuntu
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Probieren Sie Progate Free Edition [Python I]
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.