Apple Music sayfasındaki
30 saniyelik önizlemeleri (previews) topluca indirmenin en güvenli ve teknik olarak çalışır yolu
iTunes / Apple Search API ya da
Apple Music API üzerinden preview URLlerini almak ve bunları indirmek. (Appleın resmi APIleri şarkı önizlemelerini previews / previewUrl alanında döner.)
ÖNEMLİ HUKUKİ NOTLAR
- Bu önizlemeler genelde hak sahiplerine aittir
Aşağıda
Python ile çalıştırabileceğin, Apple iTunes Lookup APIyi kullanıp ilgili sanatçı IDsine ait şarkıları çekip previewUrl alanlarını bulup tek tek indirip klasöre kaydeden tam bir script var.
Kullanım adımları:- Python 3 kurulu olsun.
- pip install requests tqdm (indirme ilerleme çubuğu için).
- Aşağıdaki scripti download_previews.py olarak kaydet, çalıştır: python download_previews.py
Kaynak :
Apple Music & iTunes Toplu İndirme #!/usr/bin/env python3
# download_previews.py
# Apple iTunes Lookup API ile bir artistin şarkı önizlemelerini indirir.
# NOT: Preview dosyaları zaten ~30s olur; ek kırpmaya gerek yok.
import os
import re
import sys
import json
import requests
from pathlib import Path
from tqdm import tqdm
# Ayarlar
ARTIST_ID = "173099930" # Müslüm Gürses örneği; değiştir
COUNTRY = "TR" # Ülke kodu (TR, US, vb.)
OUT_DIR = Path("previews_{}".format(ARTIST_ID))
LIMIT = 200 # Maks sonuç sayısı
HEADERS = {
"User-Agent": "Mozilla/5.0 (compatible; preview-downloader/1.0)"
}
def sanitize_filename(s):
s = re.sub(r'[\\/:"*?<>|]+', '_', s)
s = re.sub(r'\s+', ' ', s).strip()
return s
def get_songs_for_artist(artist_id):
url = f"https://itunes.apple.com/lookup?id={artist_id}&entity=song&country={COUNTRY}&limit={LIMIT}"
print("Fetching metadata from:", url)
r = requests.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()
data = r.json()
return data.get("results", [])
def download_url_to(path: Path, url: str):
# Stream download with progress bar
try:
r = requests.get(url, stream=True, headers=HEADERS, timeout=30)
r.raise_for_status()
except Exception as e:
print(f" ! İndirilemedi: {url} -> {e}")
return False
total = int(r.headers.get("content-length", 0))
with open(path, "wb") as f, tqdm(total=total if total>0 else None, unit="B", unit_scale=True, desc=path.name) as bar:
for chunk in r.iter_content(chunk_size=8192):
if not chunk:
continue
f.write(chunk)
bar.update(len(chunk))
return True
def main():
OUT_DIR.mkdir(parents=True, exist_ok=True)
results = get_songs_for_artist(ARTIST_ID)
# results[0] genelde artist meta; şarkılar sonraki öğeler
previews = []
for item in results:
# item wrapper örneği: {"wrapperType":"track","kind":"song", "trackName":"...", "previewUrl":"https://...m4a", ...}
preview_url = item.get("previewUrl") or (item.get("previews") and item["previews"][0].get("url"))
if preview_url:
title = item.get("trackName") or item.get("collectionName") or "unknown"
artist = item.get("artistName") or "artist"
track_id = item.get("trackId") or item.get("collectionId") or ""
previews.append((preview_url, artist, title, track_id))
if not previews:
print("Bu artist için preview bulunamadı veya API cevap başka formatta. Artist ID'yi kontrol et.")
sys.exit(1)
print(f"Toplam {len(previews)} preview bulundu. İndiriliyor...")
for url, artist, title, tid in previews:
safe_name = sanitize_filename(f"{artist} - {title}")
ext = os.path.splitext(url.split('?')[0])[-1] or ".m4a"
out_path = OUT_DIR / f"{safe_name}{ext}"
if out_path.exists():
print("Zaten var, atlanıyor:", out_path.name)
continue
success = download_url_to(out_path, url)
if not success:
print("Başarısız:", url)
print("Bitti. Dosyalar:", OUT_DIR.resolve())
if __name__ == "__main__":
main()
Nasıl çalışıyor (kısa):
- https://itunes.apple.com/lookup?id=<ARTIST_ID>&entity=song&country=TR endpointine istek atıyor. iTunes API JSON içinde her track için previewUrl döner. (Apple Music / iTunes dokümantasyonu ve MusicKit preview nesnesi bilgisi için: Apple Developer docs.)
Eğer:
- previewUrl alanı yoksa veya artist ID farklı çıktı veriyorsa, alternatif yaklaşım: şarkıları search endpointiyle (şarkı isimleriyle) sorgulayıp previewUrl çekebilirsin. iTunes Search API dokümanı faydalı olacaktır. performance-partners.apple.com
Ek seçenekler / iyileştirmeler
- İndirdikten sonra otomatik metadata ekleme veya mp3e çevirme istersen pydub + ffmpeg ile dönüştürebilirsin.
- Kullanmadan önce Appleın hizmet şartlarını ve varsa telif sahibinin lisans şartlarını gözden geçir. (Previewleri kişisel, değerlendirme amaçlı indirmek genelde problem olmaz; yeniden dağıtım ve yayınlama sorun yaratır.)