Dalam repo ini, saya mengumpulkan dan mengeksplorasi data yang terkait dengan trek yang ditampilkan dalam grafik Spotify. Saya membangun pekerjaan yang saya lakukan dalam repo ini di mana saya sudah melakukan banyak hal. Sayangnya, pemrosesan data dalam proyek ini sangat berantakan, jadi saya memutuskan untuk memulai dari awal untuk membuat dataset yang lebih bersih.
Saya telah membuat skrip CLI untuk mengambil data yang terkait dengan grafik Spotify. Mereka dapat ditemukan di subfolder cli_scripts
dari proyek ini. Seperti nama folder, skrip semua dapat dipanggil langsung dari baris perintah. Anda dapat menghubungi setiap skrip dengan opsi -h
untuk mendapatkan informasi tentang argumen yang diterima (Contoh: python cli_scripts/get_all.py -h
).
Pertama, saya datang dengan skrip untuk merakit data untuk trek Spotify Daily Top 200. Sayangnya, data ini tidak tersedia melalui API. Selain itu, seseorang harus mengunduh file grafik CSV untuk setiap wilayah dan melacak secara terpisah (dengan menavigasi ke halaman grafik Spotify dan mengklik tombol unduh) yang sangat tidak nyaman.
Namun, saya mengatasi ini dengan membuat dua skrip (lihat subfolder spotify_charts
):
download.py
: mengotomatiskan proses mengunduh grafik file CSV untuk beberapa wilayah (baik semua atau subset yang ditentukan melalui argumen) dan rentang tanggal yang diberikan (Mulai + Tanggal Akhir) menggunakan selenium
(memerlukan akun/kredensial Spotify!)combine_charts.py
: menggabungkan file csv spotify yang diunduh yang terletak di direktori yang ditentukan menjadi satu file .parquet
Banyak informasi menarik dan metadata tentang musik di Spotify juga dapat diambil dari API resmi Spotify. Semua skrip menggunakan API Spotify (melalui wrapper API Python spotipy
) dapat ditemukan di spotify_api
:
get_track_metadata.py
: Fetches track metadata dari /tracks
API Endpoint untuk ID trek unik yang disebutkan dalam file .parquet
yang disediakan. Mengeluarkan folder beberapa file metadata .parquet
get_album_metadata.py
: melakukan hal yang sama seperti di atas, hanya untuk album alih -alih trek (menggunakan titik akhir API /albums
)get_artist_metadata.py
: Fetches Artist Metadata untuk semua ID artis unik di antara beberapa file input (masing -masing memiliki kolom artists_id
), juga menyimpan metadata dalam folder seperti skrip lainnya di atasget_all.py
: Menggabungkan semua skrip, mendapatkan trek metadata pertama, lalu album metadata untuk semua album yang terkait dengan trek dan akhirnya artis metadata untuk semua artis trek dan album. Sayangnya, informasi untuk kredit trek (khususnya, penulis lagu dan produser) juga tidak tersedia melalui API Spotify publik. Namun, saya datang dengan cara untuk mengatasi itu. Seseorang dapat mengekstrak header permintaan yang digunakan untuk permintaan spesifik yang dibuat oleh Aplikasi Web Spotify, misalnya saat membuka popup Show Credits
pada halaman trek dan menggunakannya kembali untuk membuat permintaan lain ke titik akhir API yang sama (tidak resmi/internal).
Pendekatan ini dapat digunakan untuk
# download CSVs; might take a loooong time, can be interrupted and restarted/resumed later
python cli_scripts/spotify_charts/download.py -s 2022-01-01 -e 2022-12-31 -o data/scraper_downloads
# combine downloaded CSVs into single parquet file
python cli_scripts/spotify_charts/combine.py -o data/top200_2022
python cli_scripts/spotify_api/get_all.py -i data/top200_2022/charts.parquet
TODO: Tambahkan perintah yang tepat setelah skrip 'selesai' (cukup baik)
Untuk membuat semuanya berfungsi, Anda dapat mengikuti instruksi ini (dengan asumsi Anda memiliki versi terbaru Python yang diinstal)
Jika Anda mau, Anda dapat membuat lingkungan baru, misalnya dengan conda
:
conda env create --name=spotify-charts-analysis
conda activate spotify-charts-analysis
Untuk membuat semua skrip berfungsi di luar kotak, Anda cukup menginstal paket helpers
dengan menjalankan
pip install -e .
Atau, Anda tentu saja juga hanya dapat menginstal paket satu per satu saat Anda mengalami masalah yang mencoba menjalankan hal-hal lol
Lirik trek di Spotify bisa salah, bahkan untuk lagu -lagu yang cukup populer (misalnya lagu instrumental yang karena beberapa alasan ini memiliki lirik).