一篇文章玩轉世界最強音樂Spotify API操作
Spotify的API簡單分為兩個入口:
其中所有的授權相關驗證都通過 授權入口
進行,而所有正常獲取資料的API請求都從 API入口
進行。
Requests Rate Limit 請求限制次數
其中只說了不同請求方式的限制次數有不同,但是沒寫具體有多少:
- Implicit Grant:次數最少,不能重新整理token,數量未知。Rate limits for requests are improved but there is no refresh token provided.
- Client Credentials:次數較多一些,數量未知. The advantage here ... is that a higher rate limit is applied.
- Authorization Code:次數最多,具體數量未知。網友回答:With 400 users, this would work out at one request every 3.6 seconds, which I'm sure wouldn't trigger Spotify's rate limiting policy. 也就是說一個app大約
100 requests/second
,或6000 requests/minute
。
參考另一篇官網文件: https://developer.spotify.com...
"Rate limiting is applied on an application basis (based on client id), regardless of how many users are using it."
即無關多少個使用者,限制次數只是和每個app掛鉤的。
Developer 建立開發者身份
前往Spotify開發者網址: https://developer.spotify.com...
登入後點擊 create a client id
,生成一個專用的 client_id
和 client_secret
。
同時必須認真設定 Redirect URIs
,因為日後授權驗證時要完全匹配才行。
Scopes 許可權選擇
在進行授權申請之前,要先確定這個app需要哪些許可權,確定好了再到授權過程中通過引數進行宣告。
Spotify對許可權進行了詳細的分類,全部的許可權如下:
在之後我們對 /authorize
頁面進行GET申請授權時候,需要在URL里加入 scope
引數,裡面的值就是我們所選擇的一些許可權申請。
每條許可權名用 空格分開
只讀型
的常用許可權有:
user-library-read user-follow-read user-top-read user-read-private playlist-read-private user-read-playback-state
修改型
的常用許可權有:
user-follow-modify user-library-modify playlist-modify-public playlist-modify-private
全部組合起來的請求URL是這樣的:
https://accounts.spotify.com/authorize?...&...&...&scope=user-library-read user-follow-read user-top-read user-read-private playlist-read-private user-read-playback-state user-follow-modify user-library-modify playlist-modify-public playlist-modify-private
Authentication 授權
授權的最終目的是獲取一個名為 access_token
的值,然後用這個 access_token
去獲取各種個樣的API資訊。
Spotify為了嚴格區分不同的用途和許可權,把這個 access_token
的獲取方法分為了三種流程,各自的許可權、存活期都不同。
三種流程特點如下:
Authorization Code Flow Client Credentials Flow Implicit Grant Flow
Flow-1: Authorization Code Flow
這是推薦的授權流程,可以獲得全部許可權,比較安全,且可以重新整理token。但是互動步驟多了一點,需要彈出頁面手動點選“授權”按鈕才行。
具體步驟:
- 向
/authorize
傳送GET請求,包括client_id
和redirect_uri
等 - Spotify彈出頁面,使用者手動登入並點選允許授權
- Spotify把頁面跳轉至自己設定的callback網址,並明文傳輸一個
Code
碼 - 用
Code
碼向/token
傳送POST請求,並在header中包括一個動態生成並base64編碼的Authorization
字串,格式為Authorization: Basic *<base64 encoded client_id:client_secret>*
- 從Spotify獲得
access_token
和refresh_token
- 在
access_token
過期後,用refresh_token
向/token
傳送POST請求,獲得新的access_token
。
測試過程中,我們是用Postman。好在Postman提供了最簡單的方法,一步到位:使用內建Oauth2.0設定。
設定方法是:
Get new access token access_token request token access_token Inherit auth from parent
完成後,每個頁面的Header或URL中,都會自動增加一個 access_token
值。
authentication
的值裡,已經預設加上了 Bearer
字首及後面的base64編碼字串。
注意:同名的引數如果以前存在,則會被覆蓋。內建oAuth 2.0的設定是灰色的,在這裡不可直接編輯。
Flow-2: Client Credentials Flow
這種流程只需要用Dashboard後臺中的 client_id
和 client_secret
可以直接獲取 access_token
。
SDK
spotipy
這個不好用,因為功能太少,文件不全,基本的Oauth還要自己手動解決,沒什麼現成的方法。
$ pip install spotipy --user
spotify.py
這個也構建不完全,基於async非同步,但是很難走通。文件也沒說明具體用法。
$ pip3 install spotify --user