Files

117 lines
3.4 KiB
Python

import requests
import os
from yandex_music import Client
def get_itunes_search_data(query):
url = "https://itunes.apple.com/search"
params = {"term": query, "entity": "album", "limit": 1}
try:
response = requests.get(url, params=params)
return response.json()
except Exception as e:
print(f"iTunes API Error: {e}")
return None
def extract_itunes_album(data):
if not data or data.get("resultCount") == 0:
return None
return data["results"][0]
def get_itunes_tracks(album_id):
params = {"id": album_id, "entity": "song"}
response = requests.get("https://itunes.apple.com/lookup", params=params)
results = response.json().get("results", [])
return results[1:] if len(results) > 1 else []
def format_itunes_track(item, artist_name):
ms = item.get('trackTimeMillis', 0)
duration = f"{ms // 60000}:{(ms // 1000) % 60:02d}"
return {
"no": item.get("trackNumber"),
"artist": artist_name,
"title": item.get("trackName"),
"duration": duration
}
def get_yandex_client():
try:
return Client().init()
except:
return None
def find_yandex_album(client, query):
search = client.search(query, type_='album')
if not search.albums or not search.albums.results:
return None
return search.albums.results[0]
def format_yandex_track(track):
sec = track.duration_ms // 1000
duration = f"{sec // 60}:{sec % 60:02d}"
artists = ", ".join([a.name for a in track.artists])
return {
"no": getattr(track, 'number', 0),
"artist": artists,
"title": track.title,
"duration": duration
}
def process_itunes(query):
data = get_itunes_search_data(query)
album = extract_itunes_album(data)
if not album:
return None
raw_tracks = get_itunes_tracks(album["collectionId"])
artist = album.get("artistName", "Unknown")
return {
"title": album["collectionName"],
"year": album["releaseDate"][:4],
"tracks": [format_itunes_track(t, artist) for t in raw_tracks]
}
def process_yandex(query):
client = get_yandex_client()
if not client: return None
album_info = find_yandex_album(client, query)
if not album_info: return None
full_album = client.albums_with_tracks(album_info.id)
tracks = []
for vol in full_album.volumes:
for t in vol:
tracks.append(format_yandex_track(t))
return {
"title": album_info.title,
"year": album_info.year or "Unknown",
"tracks": tracks
}
def save_to_file(album_data):
filename = f"{album_data['title']}.txt"
with open(filename, "w", encoding="utf-8") as f:
for t in album_data['tracks']:
line = f"{t['no']}. {t['artist']} - {t['title']} ({t['duration']})"
print(line)
f.write(f"{t['artist']} {t['title']}\n")
print(f"\nГотово! Сохранено в {filename}")
def main(request):
print(f"Поиск '{request}' в iTunes...")
result = process_itunes(request)
if not result:
print("В iTunes не найдено. Ищем в Яндекс.Музыке...")
result = process_yandex(request)
if result:
print(f"Найдено: {result['title']} ({result['year']})")
save_to_file(result)
else:
print(f"Альбом '{request}' не найден ни в одном источнике.")