? 一篇文章玩轉(zhuǎn)世界最強(qiáng)音樂Spotify API操作

Spotify的API簡單分為兩個(gè)入口:

其中所有的授權(quán)相關(guān)驗(yàn)證都通過授權(quán)入口進(jìn)行茬末,而所有正常獲取數(shù)據(jù)的API請求都從API入口進(jìn)行。

Requests Rate Limit 請求限制次數(shù)

參考官網(wǎng):Authorization Guide
參考官方Github Issues:Getting higher usage rate limits

其中只說了不同請求方式的限制次數(shù)有不同,但是沒寫具體有多少:

  • Implicit Grant:次數(shù)最少艘蹋,不能刷新token,數(shù)量未知鸠按。Rate limits for requests are improved but there is no refresh token provided.
  • Client Credentials:次數(shù)較多一些,數(shù)量未知. The advantage here ... is that a higher rate limit is applied.
  • Authorization Code:次數(shù)最多钓猬,具體數(shù)量未知氛改。網(wǎng)友回答: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. 也就是說一個(gè)app大約100 requests/second帐萎,或6000 requests/minute

參考另一篇官網(wǎng)文檔:https://developer.spotify.com/web-api/user-guide/
"Rate limiting is applied on an application basis (based on client id), regardless of how many users are using it."
即無關(guān)多少個(gè)用戶胜卤,限制次數(shù)只是和每個(gè)app掛鉤的疆导。

Developer 創(chuàng)建開發(fā)者身份

前往Spotify開發(fā)者網(wǎng)址:https://developer.spotify.com/dashboard

image
image

登錄后點(diǎn)擊create a client id,生成一個(gè)專用的client_idclient_secret葛躏。

image
image

同時(shí)必須認(rèn)真設(shè)置Redirect URIs澈段,因?yàn)槿蘸笫跈?quán)驗(yàn)證時(shí)要完全匹配才行。

image
image

Scopes 權(quán)限選擇

在進(jìn)行授權(quán)申請之前舰攒,要先確定這個(gè)app需要哪些權(quán)限败富,確定好了再到授權(quán)過程中通過參數(shù)進(jìn)行聲明。

Spotify對權(quán)限進(jìn)行了詳細(xì)的分類摩窃,全部的權(quán)限如下:


image
image

參考官方:Authorization Scopes

在之后我們對/authorize頁面進(jìn)行GET申請授權(quán)時(shí)候兽叮,需要在URL里加入scope參數(shù),里面的值就是我們所選擇的一些權(quán)限申請猾愿。
每條權(quán)限名用空格分開

只讀型的常用權(quán)限有:

  • user-library-read
  • user-follow-read
  • user-top-read
  • user-read-private
  • playlist-read-private
  • user-read-playback-state

修改型的常用權(quán)限有:

  • 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 授權(quán)

授權(quán)的最終目的是獲取一個(gè)名為access_token的值鹦聪,然后用這個(gè)access_token去獲取各種個(gè)樣的API信息。

參考官方:Authorization Guide

Spotify為了嚴(yán)格區(qū)分不同的用途和權(quán)限蒂秘,把這個(gè)access_token的獲取方法分為了三種流程泽本,各自的權(quán)限、存活期都不同姻僧。

三種流程特點(diǎn)如下:

  • Authorization Code Flow: 授權(quán)碼规丽。主要方法,可刷新token撇贺。需要彈出網(wǎng)頁讓用戶登錄并點(diǎn)擊授權(quán)赌莺。
  • Client Credentials Flow: app級token。獲取非常簡單显熏。但不可獲取用戶資源雄嚣,也不可刷新。過期需再申請喘蟆。
  • Implicit Grant Flow: 臨時(shí)授權(quán)缓升。可獲取用戶資源蕴轨,不可刷新港谊。存活期比較短。
image
image

Flow-1: Authorization Code Flow

這是推薦的授權(quán)流程橙弱,可以獲得全部權(quán)限歧寺,比較安全燥狰,且可以刷新token。但是交互步驟多了一點(diǎn)斜筐,需要彈出頁面手動(dòng)點(diǎn)擊“授權(quán)”按鈕才行龙致。

具體步驟:

  1. /authorize發(fā)送GET請求,包括client_idredirect_uri
  2. Spotify彈出頁面顷链,用戶手動(dòng)登錄并點(diǎn)擊允許授權(quán)
  3. Spotify把頁面跳轉(zhuǎn)至自己設(shè)定的callback網(wǎng)址目代,并明文傳輸一個(gè)Code
  4. Code碼向/token發(fā)送POST請求,并在header中包括一個(gè)動(dòng)態(tài)生成并base64編碼的Authorization字符串嗤练,格式為Authorization: Basic *<base64 encoded client_id:client_secret>*
  5. 從Spotify獲得access_tokenrefresh_token
  6. access_token過期后榛了,用refresh_token/token發(fā)送POST請求,獲得新的access_token煞抬。

測試過程中霜大,我們是用Postman。好在Postman提供了最簡單的方法革答,一步到位:使用內(nèi)置Oauth2.0設(shè)置战坤。

設(shè)置方法是:

  • 在Collection上右鍵點(diǎn)開Edit
  • 選擇Authentication
  • Type選擇Oauth 2.0
  • Add to根據(jù)需求選擇把認(rèn)證添加到headers還是url
  • 點(diǎn)擊Get new access token,添加token flow
  • Token name填上url或header中的參數(shù)的指定名稱蝗碎,一般為access_token湖笨。
  • Grant type上選擇Authentication Code
  • 填入所有相關(guān)內(nèi)容,注意callback必須與spotify后臺(tái)中設(shè)置一致
  • 點(diǎn)擊request token
  • 然后Postman會(huì)彈出一個(gè)頁面蹦骑,需要你登錄Spotify并點(diǎn)擊允許授權(quán)。只需這一次臀防,以后每次Postman都會(huì)幫你登錄了
  • 然后Postman就會(huì)生成一個(gè)全局的access_token
  • 之后每個(gè)頁面的Authentication欄眠菇,都直接選擇Inherit auth from parent繼承自父級即可自動(dòng)完成驗(yàn)證。
image
image
image
image

完成后袱衷,每個(gè)頁面的Header或URL中捎废,都會(huì)自動(dòng)增加一個(gè)access_token值。

image
image

authentication的值里致燥,已經(jīng)默認(rèn)加上了Bearer前綴及后面的base64編碼字符串登疗。
注意:同名的參數(shù)如果以前存在,則會(huì)被覆蓋嫌蚤。內(nèi)置oAuth 2.0的設(shè)置是灰色的辐益,在這里不可直接編輯。

Flow-2: Client Credentials Flow

這種流程只需要用Dashboard后臺(tái)中的client_idclient_secret可以直接獲取access_token脱吱。

SDK

spotipy

這個(gè)不好用智政,因?yàn)楣δ芴伲臋n不全箱蝠,基本的Oauth還要自己手動(dòng)解決续捂,沒什么現(xiàn)成的方法垦垂。

$ pip install spotipy --user

spotify.py

這個(gè)也構(gòu)建不完全,基于async異步牙瓢,但是很難走通劫拗。文檔也沒說明具體用法。

$ pip3 install spotify --user
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矾克,一起剝皮案震驚了整個(gè)濱河市杨幼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌聂渊,老刑警劉巖差购,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汉嗽,居然都是意外死亡欲逃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門饼暑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稳析,“玉大人,你說我怎么就攤上這事弓叛≌镁樱” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵撰筷,是天一觀的道長陈惰。 經(jīng)常有香客問我,道長毕籽,這世上最難降的妖魔是什么抬闯? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮关筒,結(jié)果婚禮上溶握,老公的妹妹穿的比我還像新娘。我一直安慰自己蒸播,他們只是感情好睡榆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袍榆,像睡著了一般胀屿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜡塌,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天碉纳,我揣著相機(jī)與錄音,去河邊找鬼馏艾。 笑死劳曹,一個(gè)胖子當(dāng)著我的面吹牛奴愉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铁孵,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼锭硼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜕劝?” 一聲冷哼從身側(cè)響起檀头,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岖沛,沒想到半個(gè)月后暑始,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婴削,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年廊镜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唉俗。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗤朴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虫溜,到底是詐尸還是另有隱情雹姊,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布衡楞,位于F島的核電站吱雏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寺酪。R本人自食惡果不足惜坎背,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寄雀。 院中可真熱鬧,春花似錦陨献、人聲如沸盒犹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽急膀。三九已至,卻和暖如春龄捡,著一層夾襖步出監(jiān)牢的瞬間卓嫂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工聘殖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晨雳,地道東北人行瑞。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像餐禁,于是被迫代替她去往敵國和親血久。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本文以一種簡化的格式描述OAuth 2.0 帮非,以幫助開發(fā)人員和服務(wù)提供者實(shí)現(xiàn)該協(xié)議氧吐。 The OAuth 2 sp...
    TooYummyToThrow閱讀 4,175評論 1 11
  • OAuth 2.0 vs OpenId Connect OAuth 2.0 OAuth 2.0是一個(gè)委托協(xié)議, 它...
    xtddw閱讀 3,002評論 0 1
  • 1. 引言 如果你開車去酒店赴宴,你經(jīng)常會(huì)苦于找不到停車位而耽誤很多時(shí)間末盔。是否有好辦法可以避免這個(gè)問題呢筑舅?有的,聽...
    上山砍柴閱讀 571評論 0 0
  • 我們曾經(jīng)都有夢想陨舱,還不止一個(gè)翠拣,我想成為一名舞蹈家,登上更大的舞臺(tái)隅忿,鮮花掌聲心剥,眾星捧月。 我想當(dāng)一名演員背桐,中學(xué)畢業(yè)了...
    林四月閱讀 269評論 0 1
  • HTML 中存在一些格式化文本的標(biāo)簽优烧,它們可以被直接使用,而不用再去寫樣式進(jìn)行調(diào)整链峭。 一畦娄、文本格式化 HTML 使...
    虞錦雯閱讀 554評論 0 0