Я хочу поделиться созданным мной маленьким приложением, которое записывает треки, которые я проигрываю на 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"
}
]
