モバイルアプリ開発初心者がSpotify APIを叩いてみる

# はじめに
今から約2週間前にMacBookを購入して、iOSアプリ開発を始めた初心者です。
Spotify APIを使って自分のプレイリストから音楽を流す「イントロクイズアプリ」を作りたくなったので、開発の進捗を記録していきます。


## 1. Spotify API 認証まわり
### （１）アプリの登録
- Spotifyにユーザー登録orログイン（無料会員でOK）
- Spotify for Developersにユーザ登録

https://developer.spotify.com/dashboard


アプリ名、概要、Redirect URiを登録（http://localhost:3000）。
この時発行されたClient ID、Client Secret、Redirect uriは認証時に使用する際に必要です。
ダッシュボードから確認できます。

### （２）Codeの取得

下記のURLをブラウザで実行すると、URLが変わります。そこで表示されたCodeを使って認証を進めます。
```
https://accounts.spotify.com/authorize?client_id=${CLIENT ID}&response_type=code&redirect_uri=http://localhost:3000&scope=user-top-read%20user-read-email&state=34fFs29kd09
```

レスポンス
```
http://localhost:3000/?code=
```
### （３）refresh Tokenの取得

実行するコマンド：
```
curl --data 
"code=${取得したコード}" --data 
"client_id=${CLIENT ID}" --data 
"client_secret=${CLIENT SECRET}" --data 
"redirect_uri=http://localhost:3000" --data 
"grant_type=authorization_code" https://accounts.spotify.com/api/token
```
レスポンス：
```
{"access_token":"${ACCESS TOKEN}",
"token_type":"Bearer",
"expires_in":3600,"
refresh_token":"${REFRESH TOKEN}",
"scope":"user-read-email user-top-read"}% 

```
access tokenとrefresh tokenを記録しておきます。
access tokenは１時間で期限が切れてしまうので、refresh tokenを使って更新します。

### （４）access tokenの更新

すでに取得したrefresh tokenを使います。

公式documentなど見て試したのですがエラーが返ってくるので調べたところ、
下記のissueで解決策が提示されていました。

https://github.com/spotify/web-api/issues/919


実行したコマンド
```
curl -X POST \
     -d grant_type=refresh_token \
     -d refresh_token=${MY_REFRESH_TOKEN} \
     -d client_id=${MY_CLIENT_ID} \
     -d client_secret=${MY_CLIENT_SECRET} \
     https://accounts.spotify.com/api/token
```

レスポンス
```
{"access_token":"${MY_ACCESS_TOKEN}",
"token_type":"Bearer",
"expires_in":3600,
"scope":"user-read-email user-top-read"}%         
```
## ２.Spotify APIを触ってみる
### プレイリストの曲IDを取得してみる
https://yuuuha.hatenablog.com/entry/spotify-get_track_id-spotipy

上記を参考に、Client IDとClient Secretを使ってプレイリストの曲IDを取得してみました。
```
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import pandas as pd

client_id='${CLIENT ID}'
client_secret='${CLIENT SECRET}'

client_id_and_secret = SpotifyClientCredentials(client_id, client_secret)
sp = spotipy.Spotify(client_credentials_manager=client_id_and_secret)

user='USER NAME'
playlist_id = '4Pfek2UsIIxJZfWpeekdAu'

playlist_data = sp.user_playlist(user, playlist_id)
tracks = playlist_data['tracks']
items = tracks['items']

for i in range(len(items)):
    print('---------------')
    print(i)
    id = items[i]['track']['album']['id']
    print(id)

```

ひとまずちゃんとAPIを叩いてデータを取得できることは確認できました。

### アーティストの各アルバムの曲を取得してみる
https://zenn.dev/d0ne1s/scraps/1c2d7d021c05e2

上記を参考に、Måneskinの各アルバムの楽曲名を取得してみました。


レスポンス
```
1. HONEY (ARE U COMING?)
2. OWN MY MIND
3. GOSSIP (feat. Tom Morello)
4. TIMEZONE
5. BLA BLA BLA
6. BABY SAID
7. GASOLINE
8. FEEL
9. DON'T WANNA SLEEP
10. KOOL KIDS
11. IF NOT FOR YOU
12. READ YOUR DIARY
13. MARK CHAPMAN
14. LA FINE
15. IL DONO DELLA VITA
16. MAMMAMIA
17. SUPERMODEL
18. THE LONELIEST
19. ZITTI E BUONI
20. CORALINE
21. LIVIDI SUI GOMITI
22. I WANNA BE YOUR SLAVE
23. IN NOME DEL PADRE
24. FOR YOUR LOVE
25. LA PAURA DEL BUIO
26. VENT'ANNI
27. New Song
28. Torna a casa
29. L'altra dimensione
30. Sh*t Blvd
31. Fear for Nobody
32. Le parole lontane
33. Immortale (feat. Vegas Jones)
34. Lasciami stare
35. Are You Ready?
36. Close to the Top
37. Niente da dire
38. Morirò da Re
39. Chosen
40. Recovery
41. Vengo dalla luna
42. Beggin'
43. Let's Get It Started
44. Somebody Told Me
45. You Need Me, I Don't Need You

```
### アーティストの曲情報をデータフレームで取得してみる

https://k2-tech.hatenablog.com/entry/2020/12/12/223855

https://machine-learning-skill-up.com/knowledge/pandasのdataframeをテキストファイルに出力する簡単な方法

https://tech-and-investment.com/pandas7-csv-write/

pythonのPandasを使って、Spotify API叩いて得た曲情報をDataFrameで取得し、CSV形式で出力してみました。
Måneskinの人気10曲です。

![2023-11-03 18.26の画像.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564033/a615d2ae-5fb4-53df-d330-a9730b336654.jpeg)