在此存儲庫中,我收集和探索與Spotify圖表中特色的曲目有關的數據。我基於在此倉庫中所做的工作,在那裡我已經做了很多事情。不幸的是,這個項目中的數據處理真的很混亂,因此我決定從頭開始創建一個清潔數據集。
我提出了CLI腳本,以獲取與Spotify圖表有關的數據。它們可以在該項目的cli_scripts
文件夾中找到。正如文件夾名稱所建議的那樣,可以直接從命令行調用腳本。您可以將每個腳本帶有-h
選項,以獲取有關接受參數的信息(例如: python cli_scripts/get_all.py -h
)。
首先,我想出了用於組裝Spotify Daily Top 200軌道的數據的腳本。不幸的是,此數據無法通過API獲得。此外,必須下載每個區域的圖表CSV文件,然後單獨跟踪(通過導航到Spotify圖表頁面並單擊下載按鈕),這是非常不便的。
但是,我通過創建兩個腳本來解決此問題(請參閱spotify_charts
文件夾):
download.py
:自動使用selenium
下載多個區域(通過參數指定的全部或子集)的CSV文件的過程CSV文件(啟動 +結束日期)(需要Spotify帳戶/憑據!)combine_charts.py
:組合下載的Spotify圖表CSV文件位於指定目錄中的單個.parquet
文件Spotify的官方API也可以檢索到Spotify上有關音樂的許多有趣的信息和元數據。所有使用Spotify API(通過spotipy
Python API包裝器)的腳本都可以在spotify_api
中找到:
get_track_metadata.py
:從/tracks
API端點獲取軌道元數據,以獲取提供的.parquet
文件中提到的唯一軌道ID。輸出幾個元數據.parquet
文件的文件夾get_album_metadata.py
:僅適用於上面的事情,僅適用於專輯而不是曲目(使用/albums
API端點)get_artist_metadata.py
:在幾個輸入文件(每個都有artists_id
列)中獲取所有獨特藝術家ID的藝術家元數據,也將元數據存儲在文件夾中,例如上面的其他腳本get_all.py
:將所有腳本結合在一起,首先獲得軌道元數據,然後是與曲目相關的所有專輯的元數據,最後是所有曲目和專輯唱片藝術家的藝術家元數據。不幸的是,軌道積分(特別是詞曲作者和製作人)的信息也無法通過公共Spotify API獲得。但是,我想出了一種解決這個問題的方法。可以提取用於Spotify Web應用程序提出的特定請求的請求標題,例如,在軌道頁面上打開Show Credits
彈出窗口時,並將其重新使用以使其他請求對相同的(inofficial/Internal)API Endpoint。
這種方法可用於
# 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:添加腳本“完成”後添加正確的命令(足夠好)
為了使一切正常工作,您可以按照以下說明(假設您已安裝了Python的最新版本)
如果願意,可以創建一個新環境,例如使用conda
:
conda env create --name=spotify-charts-analysis
conda activate spotify-charts-analysis
為了使所有腳本都在框外工作,您只需運行即可安裝helpers
包
pip install -e .
另外,您當然也只需在遇到試圖執行問題的問題時一對一安裝包裹
即使對於相當受歡迎的歌曲,Spotify上的曲目歌詞也可能是不正確的(例如,出於某種原因具有歌詞的樂器曲目)。