2020.12.18 コラム
【API・データ検証奮闘記】#3.音楽系データシリーズ 3部作 第1部:Spotify
本コラムでは、APIやデータに関連する言語などを無邪気に触ってみた備忘録として、ライトに記載していきます!(連載記事はこちら)
「ちょっと違くない」「他にいい方法あるのに」といったご意見もあるかと思いますが、何卒お手柔らかに!!
<プロフィール>
富松 良介
2017年、株式会社サイバー・コミュニケーションズ(CCI)入社。Oracle Bluekai・Treasure Data等のDMPや、AWS・GCP等のPublicCloud領域を担務。2019年6月よりデータの利活用を推進するコンサルティング会社「株式会社DataCurrent」に出向し、事業会社の基盤構築・運用や自社ソリューション開発を担当。
※音楽系データシリーズ 3部作 他記事はこちら
・第2部:AppleMusic 編
・第3部:YouTube 編
●Spotifyランキング取得やってみた

ボス
Spotifyのランキングデータが欲しい。

モブ
かしこまり!!
Spotifyのデータ取得の手順から取得した結果までをご紹介致します。
対象 | Spotify ランキング URL: https://spotifycharts.com/regional/jp/daily/latest |
●ステップ1. どうやって取得できるか調査してみた

モブ1
API!!

モブ2
スクレイピング!!

モブ3
ツール!!

モブ
WebページのCSVをPythonで取得することにしよう!!

ボス
それでやってくれ。
●ステップ2. データ取得してみた
早速Pythonでデータを取得してみる。
from io import StringIO
import pandas as pd
import requests
import itertools
import datetime as datetime
from time import sleep
def get_charts_data(datelist):
result_charts_list = []
for charts_date in datelist:
endpoint_url = "https://spotifycharts.com/regional/jp/daily/"+ str(charts_date) + "/download"
sleep(0.5)
try:
res = requests.get(endpoint_url, timeout=(1800.0, 180.5))
except:
raise
if res.status_code == 200:
str_content=str(res.content,'utf-8')
data = StringIO(str_content)
df=pd.read_csv(data,header=1)
rename_df = df.rename(
columns={
'Position': 'position',
'Track Name': 'track_name',
'Artist': 'artist',
'Streams': 'streams',
'URL': 'url'
})
rename_df["date"] = str(charts_date)
result_charts_list.append(rename_df.values.tolist())
return result_charts_list
def main():
START_DATE = "2016-12-31"
END_DATE = "2020-11-05"
date_from = datetime.datetime.strptime(START_DATE,'%Y-%m-%d')
date_to = datetime.datetime.strptime(END_DATE,'%Y-%m-%d')
datelist = []
while (date_from-date_to)!=datetime.timedelta(days=0):
date_from = date_from + datetime.timedelta(days=1)
datelist.append(date_from.strftime('%Y-%m-%d'))
charts_list = get_charts_data(datelist)
result_df = pd.DataFrame(list(itertools.chain.from_iterable(charts_list)), index=None,columns=['position','track_name','artist','streams','url','date'])
if __name__ == '__main__':
main()
●ステップ3. 取得結果

※音楽系データシリーズ 3部作 他記事はこちら
・第2部:AppleMusic 編
・第3部:YouTube 編
●最後に
弊社では、定点的なリサーチやトレンドの分析をおこなっています。性別や年代等の属性を検索トレンドのダッシュボード提供等様々なパッケージをご用意しておりますので、お気軽にお問い合わせください。
本データに関するお問い合わせは下記にて承ります。
株式会社DataCurrent
info@datacurrent.co.jp