Files

75 lines
2.2 KiB
Python

import io
import requests
import os
import time
import json
from yandex_music import Client
from PIL import Image
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC
def get_yandex_cover(query, settings):
try:
client = Client().init()
time.sleep(settings["delay"])
search_result = client.search(query, type_='track')
if search_result.tracks and search_result.tracks.results:
track_obj = search_result.tracks.results[0]
if track_obj.og_image:
return "https://" + track_obj.og_image.replace('%%', '1000x1000')
return None
except:
return None
def get_itunes_cover(query, settings):
url = "https://itunes.apple.com/search"
params = {"term": query, "entity": "song", "limit": 1}
try:
time.sleep(settings["delay"])
response = requests.get(url, params=params, timeout=5)
data = response.json()
if data.get("resultCount", 0) > 0:
return data["results"][0]["artworkUrl100"].replace("100x100bb.jpg", "1000x1000bb.jpg")
return None
except:
return None
def get_best_cover(query, settings):
cover_url = get_itunes_cover(query, settings)
if not cover_url:
cover_url = get_yandex_cover(query, settings)
return cover_url
def set_cover(track_path, request):
with open("settings.json", "r", encoding="utf-8") as file:
settings = json.load(file)
cover_url = get_best_cover(request, settings)
if not cover_url:
return
try:
response = requests.get(cover_url, timeout=10)
img = Image.open(io.BytesIO(response.content)).convert("RGB")
buffer = io.BytesIO()
img.save(buffer, format="JPEG", quality=90)
img_data = buffer.getvalue()
audio = MP3(track_path, ID3=ID3)
if audio.tags is None:
audio.add_tags()
audio.tags.add(
APIC(
encoding=3,
mime='image/jpeg',
type=3,
desc='Cover',
data=img_data
)
)
audio.save()
return True
except Exception as e:
print(f"Ошибка: {e}")
return False