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)"
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.
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.
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])
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
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.
Ö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);")
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))
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.