Une fonction majeure a été ajoutée au "Affichons automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python" créé précédemment.
Une fois la page des paroles d'une chanson ouverte, cette page était affichée jusqu'à la fin de cette chanson, mais si vous passez à la chanson suivante, les paroles afficheront également la chanson suivante.
Changer avant
while True:
start = time.time() # delete
# ~~~~~~~~
time.sleep(music_time - (time.time() - start)) # delete
Après le changement
prev_track_name = "" # add
while True:
#Lecture du nom de la chanson, du nom de l'album, du nom de l'artiste, de la durée de la chanson
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
J'ai défini un délai d'attente car il a fallu beaucoup de temps pour afficher la page des paroles.
Après le changement
driver = webdriver.Chrome(executable_path="chromedriver")
driver.get("https://www.google.com/") #Onglet initial
driver.set_page_load_timeout(5) #Temps d'attente de lecture maximal (5 secondes dans ce cas)# add
Les paroles elles-mêmes peuvent être lues en 5 secondes, mais les autres images prendront beaucoup de temps et le temps de chargement de la page sera long, il sera donc interrompu de force après 5 secondes. À propos, "Faire défiler jusqu'à la position des paroles" a également été modifié pour rechercher la position des paroles et faire défiler jusqu'à cette position.
Changer avant
while True:
# ~~~~~~~~
try:
# ~~~~~~~~
#Ouvrir dans un nouvel onglet
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);") #Faites défiler jusqu'à la position des paroles
#Fermer l'onglet précédent
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
Après le changement
while True:
# ~~~~~~~~
try:
# ~~~~~~~~
#Ouvrir dans un nouvel onglet
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
#Faites défiler jusqu'à la position des paroles
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))
# add-end
#Fermer l'onglet précédent
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
C'est presque un bonus, mais j'ai rendu possible le contrôle de "playback" et "to the next song" même sur le terminal. Le premier est l'opération de base.
opération de base
music = appscript.app("Music")
#Régénération
music.play()
#pause
music.pause()
#Jouer pause
music.playpause()
#Vers la piste précédente
music.previous_track()
#Vers la piste suivante
music.next_track()
Utilisez ceci tel quel. De plus, avec ʻinput () `normal, il n'est pas possible d'attendre que l'entrée soit effectuée et d'effectuer un autre traitement, donc une entrée avec un délai d'attente a été utilisée.
Entrée avec timeout
from select import select
import sys
#Les arguments sont «read», «write», «exception» et «wait time» dans l'ordre, et cette fois seule la lecture est utilisée.
#Le temps d'attente est de 0.Spécifié comme 5 secondes
# 0.S'il n'y a pas d'entrée après 5 secondes, une liste vide est renvoyée
read, _, _ = select([sys.stdin], [], [], 0.5)
if read:
command = sys.stdin.readline().strip()
else:
command = ""
Je mettrai ce qui précède dans le code tel quel.
Après le changement
while True:
#Accédez à l'application Musique
music = appscript.app("Music")
# add-start
# ----Contrôle des applications----
#Entrée avec timeout
read, _, _ = select([sys.stdin], [], [], 0.5)
if read:
command = sys.stdin.readline().strip()
else:
command = ""
if command == "b": #Vers la piste précédente
music.previous_track()
elif command == "p": #Jouer pause
music.playpause()
elif command == "n": #Vers la piste suivante
music.next_track()
# add-end
# ~~~~~~~~
Étant donné que toutes les paroles peuvent ne pas être affichées, les paroles défilent automatiquement.
Après le changement
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
# ~~~~~~~~
#Ouvrir dans un nouvel onglet
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
#Faites défiler jusqu'à la position des paroles
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))
# add-start
#Longueur des paroles sur la page
kashi_length = driver.find_element_by_id("view_mylink").location["y"] - \
driver.find_element_by_id("view_kashi").location["y"]
# add-end
#Fermer l'onglet précédent
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
Obtenez la longueur de la partie des paroles dans la page, (Longueur des paroles / Longueur de la chanson) * 5 Faites défiler vers le bas toutes les 5 secondes pour faire défiler à un rythme raisonnable.
Commencez par convertir l'alphabet pleine largeur en demi-largeur. De plus, lors de la recherche, «correspondance exacte» a été remplacée par «contient».
Après le changement
while True:
# ~~~~~~~~
# ----Accéder au site des paroles----
#Angle complet à demi-angle# add
name = str(name).translate(str.maketrans({chr(0xFF01 + i): chr(0x21 + i) for i in range(94)}))
name = parse.quote(name) #Codage en pourcentage
url = "https://www.uta-net.com/search/?Aselect=2&Keyword=" + name + "&Bselect=3&x=0&y=0" # Bselect=Bsélectionner 4=À 3
De plus, la position du nom du chanteur peut changer en raison de l'influence de la marque de la couronne sur la page avec beaucoup d'accès, donc cela a été corrigé.
Après le changement
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: #Titre de la chanson
name_url = tag_a.get("href")
elif i == 1 or i == 2: #Nom du chanteur#Ajoutez 2 là où il n'y en avait qu'un
if tag_a.string == artist:
flag = True
break
if flag:
break
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/") #Onglet initial
driver.set_page_load_timeout(5) #Il peut être plus court en fonction de la vitesse de la ligne
music_time = 0
prev_track_name = ""
count = 0
kashi_length = 0
while True:
#Accédez à l'application Musique
music = appscript.app("Music")
# ----Contrôle des applications----
#Entrée avec timeout
read, _, _ = select([sys.stdin], [], [], 0.5)
if read:
command = sys.stdin.readline().strip()
else:
command = ""
if command == "b": #Vers la piste précédente
music.previous_track()
elif command == "p": #Jouer pause
music.playpause()
elif command == "n": #Vers la piste suivante
music.next_track()
# ----Obtenir le titre de la chanson----
#Lecture du nom de la chanson, du nom de l'album, du nom de l'artiste, de la durée de la chanson
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_temps en secondes
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))
# ----Accéder au site des paroles----
#Angle complet à demi-angle
name = str(name).translate(str.maketrans({chr(0xFF01 + i): chr(0x21 + i) for i in range(94)}))
name = parse.quote(name) #Codage en pourcentage
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: #Titre de la chanson
name_url = tag_a.get("href")
elif i == 1 or i == 2: #Nom du chanteur
if tag_a.string == artist:
flag = True
break
if flag:
break
#Ouvrir dans un nouvel onglet
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
#Faites défiler jusqu'à la position des paroles
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"]
#Fermer l'onglet précédent
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
except:
pass
print("b:Avant| p:Jouer pause| n:Suivant")
print()
time.sleep(1)
Recommended Posts