· 2 dk okuma

Bir Spotify kataloğunda erişilemez hale gelen parçaları izlemek

yazan: · Proje: Track Analyzer

#python #fastapi #react

Müzik yayınlarını yönetirken bir parçanın bazı ülkelerde sessizce çalınamaz hale gelmesi kolayca gözden kaçıyor ve düzeltilmeden bırakılması pahalıya patlıyor. Track Analyzer, iki operatör için yazılmış, playlist'leri ve sanatçı kataloglarını bu duruma karşı tarayan ve dinlenme sayılarını zaman içinde takip eden dahili bir araç. Bir FastAPI backend'i ve bir React panelinden oluşuyor.

Çalınamayan parçaları bulmak

Backend, uygulama seviyesinde credential'larla Spotify'ın resmi Web API'sini kullanıyor; yani herhangi bir kullanıcı girişi gerekmiyor. Üç tür tarama var:

  • Playlist'ler. Bir playlist'i 100'er parçalık sayfalar halinde geziyor, yalnızca ihtiyaç duyduğu alanları ve isteğe bağlı olarak tek bir market için istiyor, Spotify'ın çalınamaz olarak bildirdiği her parçayı işaretliyor. Yeni bulgular öncekilerin üzerine yazılmadan kaydediliyor.
  • Sanatçı katalogları. Bir sanatçının albümlerini ve parçalarını dolaşıyor, her parçanın erişilebilir olduğu market listesini kontrol edilen bölgeyle karşılaştırıyor.
  • Keşif. Bir sanatçı adından başlayarak playlist'lerde arama yapıyor, ardından her playlist sahibinin diğer playlist'lerini yapılandırılabilir bir derinliğe kadar tarıyor. Böylece sanatçının, kimsenin elle listelemediği yerlerde geçtiği görülebiliyor.

Parçalar 50'lik, albümler 20'lik gruplar halinde çekiliyor; bu da daha küçük albüm nesnelerinde eksik olan yayın tanımlayıcılarını tamamlıyor.

Dinlenme sayıları başka bir kaynaktan

Spotify'ın public API'sinde dinlenme sayıları yok. Bunlar ticari bir müzik verisi API'si olan Soundcharts'tan geliyor. Her Spotify parça ID'si bir kez Soundcharts ID'sine eşleniyor ve cache'leniyor, ardından parçanın günlük dinleyici verisi çekiliyor.

Soundcharts varsayılan olarak yaklaşık son 90 günü döndürüyor, ama araç bundan daha fazlasını saklıyor. Her güncelleme yalnızca elinde olmayan tarihleri ekliyor, bu sayede kayıtlı geçmiş bu pencerenin ötesine doğru büyümeye devam ediyor. Panel bu geçmişten günlük bir ortalama hesaplıyor: negatif olmayan günlük farkların ortalaması; bu yöntem kaynak verideki düzeltmeleri yok sayıyor. Günde ortalama 5.000'den fazla dinlenme alan parçalar öncelik listesine alınıyor.

Kurallara uyan bir API client'ı olmak biraz emek istedi:

  • Rate limit'ler: rate limit'e takılan istekler, API'nin döndürdüğü bekleme süresi kullanılarak yeniden deneniyor.
  • Kota: "forbidden" yanıtı bozuk bir parça olarak değil, kotanın dolduğu şeklinde yorumlanıyor.
  • Toplu güncellemeler: arka planda, parçalar arasında bir bekleme ile çalışıyor.
  • Hatalar: hata veren parçalar hatırlanıyor ve bir sonraki sefer atlanıyor; ancak "not found" sonuçları bunun dışında, çünkü bir şarkı veri kaynağına daha sonra eklenebilir.

Panel

React panelinde parçalar, veritabanı, sanatçı taramaları, çalınabilir ve işaretlenmiş sanatçılar ve sorgulamalar için sayfalar var. Dinlenme geçmişi Recharts ile çiziliyor, bir bölge seçici de kontrol edilen market'i değiştiriyor. Arayüz Türkçe, çünkü kullanıcıları Türk.

Mevcut durum

Çalışan ama pürüzleri olan dahili bir araç. Veriler SQLite'ta tutuluyor, bu da iki kullanıcı için yeterli. Otomatik periyodik taramalar için bir scheduler var ama henüz bağlanmadı, bu yüzden taramalar panelden başlatılıyor. Popülerlik ve playlist içerikleri yalnızca son değerleriyle saklanıyor, dolayısıyla bunlardaki trendler henüz takip edilmiyor. Kaynak kod GitHub'da.