Dev working with spotify
This commit is contained in:
41
bot/modules/spotify/song.py
Normal file
41
bot/modules/spotify/song.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
from attrs import define
|
||||||
|
import spotipy
|
||||||
|
|
||||||
|
|
||||||
|
@define
|
||||||
|
class SongItem:
|
||||||
|
name: str
|
||||||
|
id: str
|
||||||
|
artists: list[str]
|
||||||
|
preview_url: str
|
||||||
|
thumbnail: str
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_spotify(cls, song_item: dict):
|
||||||
|
return cls(
|
||||||
|
name=song_item['name'],
|
||||||
|
id=song_item['id'],
|
||||||
|
artists=[artist['name'] for artist in song_item['artists']],
|
||||||
|
preview_url=song_item['preview_url'].split('?')[0],
|
||||||
|
thumbnail=song_item['album']['images'][1]['url']
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def all_artists(self):
|
||||||
|
return ', '.join(self.artists)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{', '.join(self.artists)} - {self.name}"
|
||||||
|
|
||||||
|
|
||||||
|
@define
|
||||||
|
class Songs(object):
|
||||||
|
spotify: spotipy.Spotify
|
||||||
|
|
||||||
|
def search(self, query: str, limit: int = 10) -> list[SongItem] | None:
|
||||||
|
r = self.spotify.search(query, limit=limit)
|
||||||
|
|
||||||
|
if r is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return [SongItem.from_spotify(item) for item in r['tracks']['items']]
|
||||||
16
bot/modules/spotify/spotify.py
Normal file
16
bot/modules/spotify/spotify.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import spotipy
|
||||||
|
from spotipy.oauth2 import SpotifyClientCredentials
|
||||||
|
|
||||||
|
from .song import Songs
|
||||||
|
|
||||||
|
|
||||||
|
class Spotify(object):
|
||||||
|
def __init__(self, client_id, client_secret):
|
||||||
|
self.spotify = spotipy.Spotify(
|
||||||
|
client_credentials_manager=SpotifyClientCredentials(
|
||||||
|
client_id=client_id,
|
||||||
|
client_secret=client_secret
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.songs = Songs(self.spotify)
|
||||||
@@ -13,6 +13,8 @@ py-deezer = "^1.1.4.post1"
|
|||||||
soundcloud-lib = "^0.6.1"
|
soundcloud-lib = "^0.6.1"
|
||||||
shazamio = { path = "lib/ShazamIO" }
|
shazamio = { path = "lib/ShazamIO" }
|
||||||
sqlitedict = "^2.1.0"
|
sqlitedict = "^2.1.0"
|
||||||
|
spotipy = "^2.23.0"
|
||||||
|
attrs = "^23.1.0"
|
||||||
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
|
|||||||
Reference in New Issue
Block a user