Vous souhaiterez peut-être afficher les paroles lors de la lecture d'une chanson sur iTunes (bien que le nom soit passé de Catalina à musique). Cependant, il est difficile de rechercher et d'afficher manuellement les paroles chaque fois que la chanson change. Laissez Python faire le travail fastidieux.
(Ajouté le 04/01/2020) Il a été amélioré. → "Affichons automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python (version améliorée)"
Jouez une chanson avec "Music", une application Mac standard, et affichez automatiquement les paroles sur le site des paroles chaque fois que la chanson change.
Système d'exploitation: macOS Catalina version 10.15 Langage: Python 3.6 Bibliothèque utilisée: appscript, urllib, BeautifulSoup, sélénium Chaque bibliothèque a été installée avec PyCharm. Je pense que chacun peut être installé avec pip.
Tout d'abord, obtenez les informations sur la chanson à partir de l'application musicale. Ici, nous utilisons appscript. Je ne suis pas sûr des détails, mais il semble qu'AppleScript puisse être utilisé avec Python. URL du site appscript
Tout d'abord, accédez à l'application. Cette fois, c'est de la musique, donc c'est de la musique (ou iTunes si vous utilisez Catalina ou une version antérieure).
music = appscript.app("Music")
Ensuite, récupérez les informations sur la chanson en cours de lecture.
name = music.current_track.name.get() #Titre de la chanson
artist = music.current_track.artist.get() #nom d'artiste
album = music.current_track.album.get() #Nom de l'album
music_time = music.current_track.time.get() #Durée de la chanson ("Minutes:Secondes"C'est une chaîne de caractères de)
Si la longueur de la chanson est la même que la chaîne de caractères, ce sera gênant, alors changez-le en nombre de secondes. La longueur de la chanson est utilisée pour déterminer la commutation des chansons.
music_time = music_time.split(":")
music_time = int(music_time[0]) * 60 + int(music_time[1])
Une fois que vous avez les informations sur la chanson, utilisez-les pour accéder au site des paroles. Cette fois, le site de paroles utilise Uta-Net. Nous utilisons également la bibliothèque de scraping BeautifulSoup pour accéder au site. Pour plus d'informations sur le grattage avec Beautiful Soup, voir Scraping with Python and Beautiful Soup.
Tout d'abord, utilisez la fonction de recherche de titre de chanson sur le site pour accéder à l'écran des résultats de la recherche. Effectuez un encodage en pourcentage pour rechercher des titres de chansons japonaises.
name = parse.quote(name) #Codage en pourcentage
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")
Si vous passez aux résultats de la recherche, les chansons du même nom apparaîtront dans une liste. Si vous regardez le code HTML, le titre de la chanson et le nom du chanteur sont répertoriés par la balise a dans la balise tr, alors recherchez le chanteur que vous recherchez. Si une correspondance est trouvée, l'étape suivante est franchie.
tr = soup.find_all("tr")
name_url = "" #Entrez l'URL de la chanson que vous recherchez
flag = False
for tag_tr in tr:
a = tag_tr.find_all("a")
#Il est stocké dans l'ordre du nom de la chanson, du nom du chanteur, des paroles et de la composition.
for i, tag_a in enumerate(a):
if i == 0: #Titre de la chanson
name_url = tag_a.get("href")
elif i == 1: #Nom du chanteur
if tag_a.string == artist:
flag = True
break
if flag:
break
Cette fois, il est nécessaire non seulement d'ouvrir automatiquement la page des paroles, mais aussi de fermer la page précédente lors du passage à la chanson suivante. Pour ce faire, nous utilisons du sélénium, qui peut automatiser les opérations sur le navigateur. Pour le sélénium, "Selenium in Python" est facile à comprendre.
Tout d'abord, accédons à l'URL que nous avons obtenue précédemment. La boucle globale est la suivante.
Tout d'abord, ouvrez le navigateur avant la boucle.
#Ouvrez Chrome
driver = webdriver.Chrome(executable_path="chromedriver")
#Onglet initial de l'origine de la boucle
driver.get("https://www.google.com/")
Ensuite, faites 2 ~ 3 dans la boucle. À ce moment-là, la marge en haut de la page des paroles est un obstacle, alors faites défiler la page.
#Ouvrez un nouvel onglet et déplacez-vous
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[1])
#Accéder à l'URL spécifiée à la destination
driver.get("https://www.uta-net.com/" + name_url)
#Faites défiler jusqu'à la position des paroles
driver.execute_script("window.scrollTo(0, 380);")
Vous pouvez maintenant afficher les paroles de la chanson que vous écoutez actuellement. Tout ce que vous avez à faire est de faire une boucle. Ci-dessous le code complet.
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/") #Onglet initial
music_time = 0
while True:
start = time.time()
# ----Obtenir le titre de la chanson----
#Accédez à l'application Musique
music = appscript.app("Music")
#Lecture du nom de la chanson, nom de l'album, nom de l'artiste, 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
print(name, artist, album, music_time)
# music_Convertir le temps en secondes
music_time = music_time.split(":")
music_time = int(music_time[0]) * 60 + int(music_time[1])
# ----Accéder au site des paroles----
name = parse.quote(name) #Codage en pourcentage
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: #Titre de la chanson
name_url = tag_a.get("href")
elif i == 1: #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])
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])
except:
pass
print("now browsing")
print()
#Attendez l'heure de la chanson
time.sleep(music_time - (time.time() - start))
Tout en écrivant cet article, il continue d'afficher la page des paroles en toute sécurité. Cependant, il y avait quelques insuffisances.
Les deux ci-dessus sont ignorés par try-except (car peu importe si vous ne pouvez pas les afficher occasionnellement). Concernant la fin, il n'y a pas d'autre choix que d'afficher les paroles.
Recommended Posts