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 URL’lerini almak ve bunları indirmek. (Apple’ın resmi API’leri ş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 API’yi kullanıp ilgili sanatçı ID’sine 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.pyolarak kaydet, çalıştır:python download_previews.py
#!/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=TRendpoint’ine istek atıyor. iTunes API JSON içinde her track içinpreviewUrldöner. (Apple Music / iTunes dokümantasyonu ve MusicKit preview nesnesi bilgisi için: Apple Developer docs.)
Eğer:
-
previewUrlalanı yoksa veya artist ID farklı çıktı veriyorsa, alternatif yaklaşım: şarkılarısearchendpoint’iyle (şarkı isimleriyle) sorgulayıppreviewUrlçekebilirsin. iTunes Search API dokümanı faydalı olacaktır. performance-partners.apple.com
Ek seçenekler / iyileştirmeler
-
İndirdikten sonra otomatik metadata ekleme veya mp3’e çevirme istersen
pydub+ffmpegile dönüştürebilirsin. -
Kullanmadan önce Apple’ın hizmet şartlarını ve varsa telif sahibinin lisans şartlarını gözden geçir. (Preview’leri kişisel, değerlendirme amaçlı indirmek genelde problem olmaz; yeniden dağıtım ve yayınlama sorun yaratır.)

Bir yanıt yazın