Регистратор Spotify для проигрываемых треков

Я хочу поделиться созданным мной маленьким приложением, которое записывает треки, которые я проигрываю на Spotify (работающее в фоновом режиме на моем DigitalOcean капельный сервер). Оно использует Spotipy, облегченная библиотека Python для Spotify Web API. С Spotipy вы получаете полный доступ ко всем музыкальным данным, предоставляемым платформой Spotify.

Любые предложения по улучшению приветствуются.

my_spotify_logger.py

from dataclasses import dataclass, asdict
import time
import datetime
from pathlib import Path
import json
from decouple import config
import spotipy
from spotipy.oauth2 import SpotifyOAuth

TRACK_LOGFILE= Path('logs/track_log.json')
TIME_DELAY = 5
SCOPE = 'user-read-currently-playing'
SPOTIFY_CLIENT_ID = config('SPOTIFY_CLIENT_ID')
SPOTIFY_CLIENT_SECRET = config('SPOTIFY_CLIENT_SECRET')
SPOTIFY_REDIRECT_URI = config('SPOTIFY_REDIRECT_URI')

spotify_authorization = SpotifyOAuth(
    SPOTIFY_CLIENT_ID,
    SPOTIFY_CLIENT_SECRET,
    SPOTIFY_REDIRECT_URI,
    scope=SCOPE,
)
spotify = spotipy.Spotify(auth_manager=spotify_authorization)


@dataclass
class TrackRecord():
    played_at: str
    name: str
    id: int
    artist: str

    def as_dict(self):
        return asdict(self)


def read_track_logfile():
    with open(TRACK_LOGFILE, 'r') as json_file:
        return json.load(json_file)


def update_track_logfile(tracks_log):
    with open(TRACK_LOGFILE, 'w') as json_file:
        json.dump(tracks_log, json_file)


def print_track(track):
    print(f'{track.played_at}, id: {track.id}n'
          f'artist: {track.artist}, {track.name}')


def main():
    tracks_log = read_track_logfile()
    track_id = None

    while True:
        new_track = spotify.current_user_playing_track()

        if new_track and track_id != new_track['item']['id']:
            track_id = new_track['item']['id']
            track_record = TrackRecord(
                played_at=datetime.datetime.now().strftime("%Y-%B-%d %H:%M:%S"),
                id=track_id,
                artist=new_track['item']['artists'][0]['name'],
                name=new_track['item']['name'],
            )
            print_track(track_record)
            tracks_log['tracks'].append(track_record.as_dict())
            update_track_logfile(tracks_log)

        time.sleep(TIME_DELAY)

if __name__ == '__main__':
    main()

С использованием decouple вам нужно определить свои секретные учетные данные в .env файл. Учетные данные, которые вы можете получить Spotify.

Требования: Python 3.8+

certifi==2021.5.30
chardet==4.0.0
idna==2.10
python-decouple==3.4
requests==2.25.1
six==1.16.0
spotipy==2.18.0
urllib3==1.26.5

Перед первым использованием вам необходимо инициализировать track_log.json в виде

{"tracks": []}

Наконец, есть приятное маленькое приложение для запроса файлов json (в Linux). jq (sudo apt install jq). Например, чтобы увидеть последние 3 проигранных трека.

>jq ".tracks[-3:]" ./logs/track_log.json
[
  {
    "played_at": "2021-June-23 07:37:17",
    "name": "Blitzkrieg Bop - 2001 Remastered Version",
    "id": "33iQW2OneB0oNh2NfrAzqW",
    "artist": "Ramones"
  },
  {
    "played_at": "2021-June-23 07:39:28",
    "name": "Should I Stay or Should I Go - Remastered",
    "id": "3v8PlUFGQQDBIk1J86waCo",
    "artist": "The Clash"
  },
  {
    "played_at": "2021-June-23 07:42:40",
    "name": "Trash",
    "id": "2OQS3xvoKKSayJMJT8dVuZ",
    "artist": "New York Dolls"
  }
]

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *