Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python

introduction

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)"

Chose que tu veux faire

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.

environnement

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.

Obtenir le titre de la chanson

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

Affichage des paroles

Trouver la page des paroles

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

Affichage de la page des paroles

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.

  1. La chanson change ↓
  2. Ouvrez un nouvel onglet pour accéder à la page des paroles ↓
  3. Fermez l'onglet précédent ↓ 4.1 Retour à 1

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);")

Achevée

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

en conclusion

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

Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python
Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python (version améliorée)
Ne pas être conscient du contenu des données en python
Utilisons les données ouvertes de "Mamebus" en Python
Affichage de la forme d'onde audio en Python
Comment est le progrès? Continuons le boom ?? en Python
Mesurez la couverture de test du code python poussé sur GitHub.
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Vérifiez le comportement du destroyer en Python
Django ~ Affichons-le sur le navigateur ~
Afficher une liste d'alphabets en Python 3
Afficher Python 3 dans le navigateur avec MAMP
Modifions automatiquement la palette de couleurs d'iTerm2 en fonction de l'heure de la journée
Le résultat de l'installation de python sur Anaconda
Afficher le graphique de tensorBoard sur Jupyter
[Android] Afficher des images sur le Web dans la fenêtre info de Google Map
Principes de base pour exécuter NoxPlayer en Python
À la recherche du FizzBuzz le plus rapide en Python
J'ai essayé d'obtenir automatiquement le RSS de la chanson la plus populaire de l'iTunes Store
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
J'ai installé Pygame avec Python 3.5.1 dans l'environnement de pyenv sur OS X
Jouons avec Python Receive et enregistrez / affichez le texte du formulaire de saisie
En Python, changez le comportement de la méthode en fonction de la façon dont elle est appelée
Définir la limite supérieure du nombre de répétitions de fonctions récursives en Python
Sortie du nombre de cœurs de processeur en Python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Analysons le journal de validation git en Python!
Récupérer l'appelant d'une fonction en Python
Faites correspondre la distribution de chaque groupe en Python
Afficher le résultat du traitement de la géométrie en Python
Copiez la liste en Python
Découvrez la fraction de la valeur saisie en python
Trouvez la solution de l'équation d'ordre n avec python
L'histoire de la lecture des données HSPICE en Python
[Note] À propos du rôle du trait de soulignement "_" en Python
Résolution d'équations de mouvement en Python (odeint)
Sortie sous la forme d'un tableau python
Au moment de la mise à jour de python avec ubuntu
Je veux afficher la progression en Python!
[Exemple d'amélioration de Python] Apprentissage des bases de Python sur un site gratuit en 2 semaines
[Apprentissage automatique] "Détection d'anomalies et détection de changement" Dessinons la figure du chapitre 1 en Python.
Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE!
Afficher n chiffres après la virgule décimale en python
Découvrez la bonne efficacité de calcul de la vectorisation en Python
Trier en Python. Pensons ensuite à l'algorithme.
[python] Récupère la liste des classes définies dans le module
Décomposons les bases du code Python de TensorFlow
L'histoire de FileNotFound en Python open () mode = 'w'
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Implémenter la solution de l'algèbre de Riccati en Python
Obtenir la taille (nombre d'éléments) de Union Find en Python
Utilisons la version Python du module API Confluence.
Différence de résultats en fonction de l'argument du multiprocessus.
Reproduire l'exemple d'exécution du chapitre 4 de Hajipata en Python
Ecrire un histogramme à l'échelle logarithmique sur l'axe des x en python
Implémentation de l'algorithme "Algorithm Picture Book" en Python3 (Heap Sort Edition)