Рубрики
Без рубрики

Как интегрировать Spotify и Genius API Чтобы легко ползать песни песен с Python

Получите лирику для песни, которая в настоящее время играет в Spotify. Теги с Python, API.

Этот пост был первоначально опубликован в моем личном блоге.

Всем привет!

Для этого поста я решил поговорить о сценарии Python, который я написал в прошлом году, который я все еще использую его очень часто в наше время.

Это был один из тех моментов, которые у вас есть идея, и вы действительно взволнованы об этом, но не знаете, это будет работать, как вы ожидаете или нет. Я начал в основном с некоторыми знаниями о Python и зная, какой API я собирался использовать для достижения этой идеи.

Цель состояла в том, чтобы реализовать сценарий, с помощью которого я мог бы получить текст песни, которые в настоящее время играют в Spotify. Итак, сначала я знал, что мне нужно что-то, что обеспечило бы мне интерфейс, который я мог бы использовать для подключения этого сценария с помощью Spotify Service, работающей на моем компьютере. Кроме того, как я был верным пользователем Genius.com Я знал, что у них есть большая публичная API, которую я мог получить помощь.

Для долгосрочных пользователей Spotify вы, вероятно, помните, когда Spotify имел функциональность, чтобы показать песню текста в приложении на рабочем столе, верно? Старые добрые времена. Я до сих пор не понимаю, почему это было удалено, но все, что мы получили сейчас За лирикой особенность, которая показывает некоторые бесполезный Информация и небольшие фрагменты лирики для песни, которую мы слушаем (кажется, она доступна только на мобильных устройствах).

Отсюда я начну разорвать скрипт после того, как он был реализован. Если вы хотите проверить полный скрипт, прежде чем продолжить, вы можете пойти в Этот репозиторий на Github. Там у вас также будут инструкции о том, как запустить его, но имейте в виду, что я проведу вас через это в этом посте:)

Подключение к Southify.

Это была одна из вещей, которые я не поняла, как это сделать Так что я должен был сделать немного гугул, чтобы достичь этого. К счастью, это Ответ по Йорна на стековерфл был спас мне много времени, так kudos тебе сэр.

В основном, поскольку я являюсь пользователем Linux, используемое iPutify Client Spotify автоматически создает интерфейс D-шины, называемый MPRIS – Media Player Remote Interfacing Specification.

От D-Bus Страница технических характеристик, API D-Bus обычно используется для реализации сервиса, который будет потребляться несколькими клиентскими программами. Этот вид системы сообщений предназначен для двух конкретных случаев: связь между настольными приложениями в одном и том же сеансе настольных компьютеров и связь между рабочим сеансом и операционной системой, которая включает в себя любые системные процессы (это наше дело).

Система D-Bus имеет несколько слоев, и один из них формируется библиотеками обертки, который является видом инструмента, который мы используем здесь. Для того, чтобы скрипт Python для общения с приложением Spotify Desktop мы будем использовать DBUS-Python библиотека обертки или технически называется Привязка для libdbus. библиотека. После того, как эта библиотека установлена в вашей системе, вы можете использовать ДБУС Модуль для создания Sessionbus Что мы будем использовать для общения с Spotify.

Если вы на Ubuntu и, по какой-либо причине у вас нет DBUS-Python Установлен, вы можете установить его на работу: apt-get install python-dbus

import dbus

def get_current_song_info():
    # kudos to jooon from this stackoverflow question http://stackoverflow.com/a/33923095
    session_bus = dbus.SessionBus()
    spotify_bus = session_bus.get_object('org.mpris.MediaPlayer2.spotify',
                                         '/org/mpris/MediaPlayer2')
    spotify_properties = dbus.Interface(spotify_bus,
                                        'org.freedesktop.DBus.Properties')
    metadata = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'Metadata')

    return {'artist': metadata['xesam:artist'][0], 'title': metadata['xesam:title']}

В коде выше мы просто создаем Sessionbus экземпляр и используя это для создания Интерфейс с приложением Spotify.

Из этой связи мы можем извлечь метаданные для этого сеанса, которая предоставит нам множество информации о текущей сессии Spotify, включая имя исполнителя и песни, которая в настоящее время играет, что нам нужно. Обратите внимание, что этот метод возвращает словарь с двумя клавишами, художник и Название Отказ

Подключение к Genius API

Поскольку у нас уже есть имя художника и песни, которую мы хотим искать, мы можем пойти дальше и сделать запрос на API Genius.

Для этого нам нужен токен доступа, который мы можем получить, создав клиент Genius API. Во-первых, мы должны Зарегистрироваться Для учетной записи (или войдите, если у вас уже есть учетная запись в Genius). После этого вы можете перейти на страницу документации Genius API, чтобы Управляйте своим клиентам Отказ Процесс для создания нового клиента довольно прост и после этого вы, наконец, получите ваш токен доступа.

После того, как у вас есть токен доступа, мы можем реализовать следующий метод.

import requests

def request_song_info(song_title, artist_name):
    base_url = 'https://api.genius.com'
    headers = {'Authorization': 'Bearer ' + 'INSERT YOUR TOKEN HERE'}
    search_url = base_url + '/search'
    data = {'q': song_title + ' ' + artist_name}
    response = requests.get(search_url, data=data, headers=headers)

    return response

Этот метод получает имя песни и художника, которое мы извлекли из сеанса Spotify и отправляет запрос на API Genius. Обратите внимание, что мы используем Запросы HTTP Библиотека для отправки запроса на получение.

Извлечение песен лирика

Если все работает нормально, у вас будет сейчас объект ответа, который содержит тонны информации обо всех матчах, которые были найдены в API.

Из-за формы объекта, которую мы получили от запроса, нам придется итерации за хиты ключ в этом объекте и ищите точное совпадение с помощью Artist_name Переменная.

# Search for matches in the request response
    response = request_song_info(song_title, artist_name)
    json = response.json()
    remote_song_info = None

    for hit in json['response']['hits']:
        if artist_name.lower() in hit['result']['primary_artist']['name'].lower():
            remote_song_info = hit
            break

Если у нас успешно будет совпадение в этом объекте, это означает, что песня, которую мы ищем доступны в API и теперь доступны в Remote_song_info Переменная.

Хотя у нас есть вся эта информация о конкретной песне, угадайте, что, у нас нет лирики !! Собственно, Genius API (как на дату этот сценарий был реализован), не предложит напрямую лирику для песни. Также нет конечной точки поиска лирики.

Чтобы обойти эту ситуацию, мы должны были бы, на самом деле, ползать веб-страницу, в которой доступна эта песня. В Remote_song_info У вас будет URL для этой песни.

# Extract lyrics from URL if the song was found
if remote_song_info:
    song_url = remote_song_info['result']['url']

Отсюда мы в основном должны сделать наш скрипт доступом к этой странице и ползать для нас лирика.

from bs4 import BeautifulSoup

def scrap_song_url(url):
    page = requests.get(url)
    html = BeautifulSoup(page.text, 'html.parser')
    lyrics = html.find('div', class_='lyrics').get_text()

    return lyrics

Этот метод получает URL-адрес песни и использует Красивый суп Библиотека для удаления данных из HTML файлов более простым способом.

Во время реализации этого метода мне пришлось проанализировать, какова была структура для HTML, возвращающейся, чтобы выяснить, что я мог бы использовать для извлечения только текста, который представляет текст песни. Я закончил использовать Div который содержит класс лирика , который держит все песни лирики. Я надеюсь, что они никогда не изменит разметку для этого:)

У нас наконец у нас есть лирика для распечатки на консоль. Tha Cool – это то, что во время ползающего процесса каждая строка в линейке автоматически получает новую строку escape Sequence ( \ n ). С этим мы получаем хорошую структуру в терминале.

Как использовать репозиторий GitHub

Все методы, упомянутые в этом посте, доступны в этом Репозиторий Отказ

Чтобы использовать его локально, вы можете просто клонировать репозиторий, добавьте токен доступа к Token.txt Файл и из папки REPO вы можете запустить команду ниже, чтобы получить текст песни. Не забывайте открывать Spotify и играть что-то:)

python get-lyric.py

Сценарий должен работать как с Python 2.7, так и Python 3. Тем не менее, вы должны проверить, какую версию вы используете, и какой из них вы использовали для установки зависимостей.

Из репозитория вы получаете дополнительные функции, такие как:

  • Автоматически есть лирика песни, доступная в Lyric-View.txt файл.
  • Поиск любой песни, передавая имена художника и песни (этот режим не взаимодействует с Spotify, чтобы его его не нужно). Проверьте Readme.md Отказ

Последнее, что я хотел бы отметить, что вы не всегда должны быть внутри папки, чтобы получить текст, если вы создаете псевдоним для этой команды в вашем .bashrc файл.

Для меня мне пришлось добавить эту линию к моему .bashrc файл.

alias lyric="python ~/repos/lyrics-crawler/get-lyric.py"

А также, я должен был использовать абсолютный путь для Token.txt и Lyric-View.txt Файлы в коде сценария.

С этим я могу просто запустить команду Лирика из любого каталога и получите текст песни, играя через Spotify.

Я надеюсь, что это было хорошее чтение для вас. Если у вас есть какие-либо предложения или функции для хранилища, дайте мне знать или открыть запрос на тягу, я буду признателен:)

Спасибо!

Оригинал: “https://dev.to/willamesoares/how-to-integrate-spotify-and-genius-api-to-easily-crawl-song-lyrics-with-python-4o62”