Apple Music & iTunes Bulk Download

Apple Music & iTunes Toplu İndirme

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ı:

  1. Python 3 kurulu olsun.

  2. pip install requests tqdm (indirme ilerleme çubuğu için).

  3. Aşağıdaki scripti download_previews.py olarak 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=TR endpoint’ine 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 endpoint’iyle (ş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 mp3’e ç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. (Preview’leri kişisel, değerlendirme amaçlı indirmek genelde problem olmaz; yeniden dağıtım ve yayınlama sorun yaratır.)

 

 

 

Tags

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir