コラム

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
モブ1
API!!
モブ2
モブ2
スクレイピング!!
モブ3
モブ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