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