在JavaScript SDK裡使用SoundCloud API
本文由碼農網 – 唐李川原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
SoundCloud開發出了一款可被開發者使用的API,這款API能使開發者獲得他們想要的幾乎任何資料。但是該API的用法有些混亂,特別是對初學者來說,因為此時的SoundCloud API開發文件和文件示例使用的都是SDK(軟體開發工具箱)的不同版本。
SoundCloud介紹連結地址: http://baike.sogou.com/v128528573.htm
SoundCloud API和SoundCloud SDK之間有什麼區別呢?從根本上說,SoundCloud API是一個URL的集合,它給開發者提供了從SoundCloud伺服器獲取資料的許可權,而SoundCloud SDK是為查詢SoundCloud API提前寫好的庫(或者客戶端)。如果想了解更多關於這方面的內容,點選以下連結:http://stackoverflow.com/questions/834763/difference-between-an-api-and-sdk
在這個教程裡,我們將學到如何訪問SoundCloud API和如何簡化使用SoundCloud SDK的過程。我們將從SoundCloud上學習如何設定SoundCloud SDK,然後接著編寫JavaScript程式碼來獲取SoundCloud資料,播放音訊和更多SoundCloud提供的功能。
入門指南
Promises介紹連結地址: http://www.oschina.net/translate/what-is-the-point-of-promises?print
瞭解HTTP和API的概念和工作方式對你學習本教程將會有幫助。如果你想了解更多關於API的資訊,我推薦你看看:An Introduction to APIs(對API的一個介紹。連結地址:https://zapier.com/learn/apis/)。同時知道一點關於非同步JavaScript,promises和回撥函式對你學習本教程也是有幫助的。在本文我們的程式碼示例中使用了jQuery,所以如果你瞭解jQuery的基本知識,那麼你閱讀本文的程式碼示例就不會那麼痛苦。
為了使用JavaScript來開始查詢SoundClound API,我們需要下載由SoundClound提供的JavaScript SDK。就像在文章開頭提到的,這裡共有兩個不同的SDK版本可以使用。
使用哪個版本的SDK呢?
這兩個版本的SDK的主要不同之處在於當一個非同步請求產生並將請求傳送給SoundClound API時它們返回資料的方式不同。最新版本的SDK返回的是一個Promise,而另一個版本的SDK需要把一個回撥函式作為一個引數返回。
我注意到一個問題,隨著文件使用的SDK版本,在該版本的SDK使用者登入功能介面上似乎有一個問題,這個問題就是彈出的登入視窗不會自動關閉。
因此,為了簡單起見,並且因為老版本SDK更穩定,我們將在文章示例中使用老版本的SDK來貫穿本教程。此版本的SDK將需要為客戶端的非同步請求返回一個回撥函式。
使用SoundCloud API
設定一個基本的HTML文件
我們建立一個基本的HTML頁面,該頁面用作我們的主頁。我們在這個頁面上<script>標籤的屬性src裡包含進了SDK的地址,這樣我們就可以使用SDK的功能了。
<!DOCTYPE html> <html> <head> <title>Include SDK - Using SoundCloud API</title> <script src="//connect.soundcloud.com/sdk.js"></script> </head> <body></body> </html>
注意:我們在HTML頁面裡的<script>標籤的src裡包含進去的SDK地址是SoundCloud的伺服器地址。你也可以把SDK下載下來,然後像下面這樣引用:
<script src="sdk.js"></script>
可以通過下面的方法步驟測試一下SoundCloud的SDK是否在你的網頁中被正確載入:
- 用瀏覽器開啟這個頁面(建議使用谷歌的Chrome瀏覽器)。
- 在瀏覽器裡開啟開發者控制檯(在谷歌Chrome瀏覽器裡開啟開發者控制檯的快捷鍵是Ctrl+Shift+J)。
- 在開發者控制檯裡輸入SC,然後按Enter鍵。SC就是剛剛我們在HTML頁面裡包含的SDK建立的一個JavaScript物件。
如果出現了未知的錯誤,那就說明SoundCloud的SDK沒有被正確載入。試著重新整理一下,同時確定你的SDK檔案(也就是sdk.js檔案)的路徑是正確的。
註冊一個SoundCloud App
去註冊一個SoundCloud app,你需要做的就是擁有一個SoundCloud賬戶。如果你還沒有一個SoundClound賬戶,就去建立一個。通過註冊一個app,SoundCloud伺服器就能夠驗證我們的請求,這樣其他人就不可能以我們的名義來傳送一個請求了。
注意:如果我們不準備在我們自己的網站中使用SoundClound使用者登入功能,我們可以跳過這一步。這將在下面的部分解釋。
- 開啟SoundClound app頁面。在這個頁面上所有我們已經建立好的app都會被列出來。確保你登入了你的SoundCloud賬戶。注意:你不用為了這個目的建立一個獨立的賬戶。你可以用同一個賬戶來為你的個人目的使用。
- 點選註冊一個新應用按鈕。
- 給你的app起一個名字,然後點選核取方塊接受SoundCloud的開發者政策條款。
- 點選那個大大的”註冊”按鈕,來完成app的註冊。
在我們成功註冊之後,註冊頁面將直接跳轉到我們剛剛建立好的app設定頁面。在app設定頁面上,我們將看到我們的app客戶端ID,這個ID將會被用來驗證授權我們的請求。我們可以關掉該頁面,然後現在開始回撥欄位了。我們之後會用到這個客戶端ID的。
初始化客戶端
通過”初始化客戶端”,那也就是意味著我們使客戶端準備好在它和SoundCloud API之間做資料的交換。我們可以在我們之前建立的基本HTML文件裡來做初始化客戶端的工作,或者在一個內部js檔案裡來做初始化客戶端的工作。
JavaScript語法是這樣做的:
SC.initialize({ client_id: "CLIENT_ID", redirect_uri: "CALLBACK_URL" });
讓我們分段來看它:
- 上面程式碼中的CLIENT_ID會在我們註冊app的時候提供給我們。
- 上面程式碼中的CALLBACK_URL是callback.html的URL,這個callback.html是使用者登入後一個HTML檔案的稱呼。我們很快就會建立它。
在初始化完成之後,現在我們可以準備查詢SoundCloud API了。讓我們看看在那之前我們可以做的一些例子。
示例
如果我們開啟瀏覽器的控制檯並輸入”SC.”,然後與SC物件有關的方法就會列出來。SC.get(uri,callback)就是其中一個方法,這個方法用來向SoundCloud API產生GET請求。
獲得一份跟蹤列表
為了獲得跟蹤的隨機列表,我們可以使用SC.get()方法,像下面這樣:
SC.get("/tracks", function(response) { for (var i = 0; i < response.length; i++) { $("ul").append("<li>" + response[i].title + "</li>"); } });
上面的程式碼是幹什麼的,它是用來查詢/tracks端點並且在查詢完端點後返回一個回撥函式的。響應資料是儲存在回撥響應引數裡的,它是一個有著很多屬性的JavaScript物件陣列,title屬性就是眾多屬性中的一個。我們可以在程式碼裡寫:console.log(response[0])來在控制檯日誌輸出響應資料的第一個,而不用迴圈遍歷所有的物件和物件所對應的屬性。然後,我們就會知道哪些屬性我們可以使用。
注意:在這個程式碼示例中,我們在初始化的時候並沒有指定一個回撥URL。這是因為我們指定不指定都不重要。不管怎樣我們的程式碼都會執行。但是一旦我們實現了使用者登入功能,這就是必須的而且很重要了,因為當你指定一個回撥URL後,其他人就不可能使用我們的Client ID。
嵌入一段跟蹤程式碼
SC物件提供了其他的方法:SC.oEmbed(url,options,callback)。該方法把SoundCloud播放器嵌入我們的網站,並且允許我們播放我們選擇的軌跡。
SC.oEmbed('https://soundcloud.com/username/complete-url-to-the-track', {maxheight: 200, auto_play: false}, function(res) { $("#player").html(res.html); });
我們分段來看它:
- 首先在該方法的第一個引數裡,我們給了一個完整的我們想要播放的跟蹤URL。
- 該方法的第二個引數是可選引數,在這個引數裡,我們可以為播放器設定一些選項。如果想了解更多,點選下面連結:https://developers.soundcloud.com/docs/api/reference#oembed
- 第三個引數是一個回撥函式,在這個回撥函式裡,我們將我們頁面裡的(id為player)的一個元素的內容用該播放器(res.html)的HTML程式碼替換。
這個跟蹤路徑可以用來在一個網站裡嵌入一首歌或者一首音樂。
實現使用者登入
為了實現使用者登入功能,我們需要有一個回撥URL來達到驗證授權的目的。這是OAuth協議的要求。如果你想了解OAuth協議,這裡有一個OAuth協議的簡單解釋:OAuth 2 Simplified(連結地址:https://aaronparecki.com/2012/07/29/2/oauth2-simplified)。因此讓我們在app設定裡新增一個名為”callback.html”的回撥URL,這個callback.html我們接下來就會建立。
OAuth協議介紹連結地址: http://menglimengwai.iteye.com/blog/496250
建立回撥頁
在一個使用者登入後,彈出式視窗會重定向到該檔案。在我們的例子中,我們把該檔案定義為”callback.html”,並且該檔案和我們的主頁(index.html)儲存在相同的目錄裡。這個檔案就是在我們的app設定裡我們需要在回撥欄位裡給定的檔案。
我們需要在回撥檔案裡使用的程式碼在開發文件裡有提供。然而,開發文件有點過時,因此我們需要稍微調整一下來滿足現在的開發需要標準。
你可以根據你個人的喜好來調整它的通知和設計,但是現在,我們使它越簡單越好:
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Connect with SoundCloud</title> </head> <body> <h4>This popup should automatically close in a few seconds</h4> <script> document.onload = function () { window.opener.setTimeout(window.opener.SC.connectCallback, 1); } </script> </body> </html>
使用者登入
SC.connect(callback)就是實現使用者登入功能的方法。它通過開啟一個彈窗式的視窗,提醒使用者登入他們的SoundCloud賬戶。基本的使用方法如下:
SC.connect(function () { console.log("User has logged in"); });
如下是更有趣的示例:
SC.connect(function () { SC.get("/me", function (response) { console.log("Welcome" + response.username); }); });
讓我們分段來看它:
- 在使用者完成登入以後,使用者登入頁面將會被重定向到我們之前建立的callback.html頁面。
- 然後隨著我們閱讀完callback.html裡的程式碼,彈出式視窗會自動關閉。
- 在那之後,我們的回撥函式將獲得回撥,該回撥是在SC.get()方法裡通過一個GET請求到”/me”端點獲得的。
- 當GET請求完成時,上述程式碼的回撥函式就會執行,然後在控制檯會輸出一條歡迎登陸的資訊。
注意:請求”/me”返回的是當前登陸使用者的資料。因此,在使用者登入之前請求該URL將產生一個錯誤的資訊。
處理使用者資料
一旦使用者登入完成,有很多事情我們可以做。為了演示一些功能,我在GitHub上建立了一個演示站點。你可以點選這裡檢視原始碼: https://github.com/sitepoint-editors/SC_API,並且可以點選這裡看看它的執行效果: http://mustagheesbutt.github.io/SC_API/。
讓我們看看這兩個檔案。在index.html裡,有四個重要的div元素,它們在使用者完成登入後將會填滿使用者的資料:
<main> <div id="ui"> <h2>Welcome <span></span></h2> <img id="avatar" /> <div id="description"></div> </div> <!-- TRACKS --> <div id="tracklist"> <h3>Your Tracks:</h3> <ul></ul> </div> <!-- PLAYLISTS --> <div id="playlists"> <h3>Your Playlists:</h3> <ul></ul> </div> <div id="player"></div> </main>
第二個最重要的檔案是script.js:所有的奇蹟都發生在這個檔案裡。大部分程式碼我們都很熟悉,但是我們還是快速地看看:
// Initialization of SDK SC.initialize({ client_id: "21832d295e3463208d2ed0371ae08791", redirect_uri: "http://mustagheesbutt.github.io/SC_API/callback.html" });
首先初始化我們的app。注意,這次我們用redirect_uri指定了我們的callback.html頁面。這個URL或者URI必須和我們在app設定裡指定的一致。
// Login handler var user_perma; $("#login").click(function () { SC.connect(function () { SC.get("/me", function (me) { user_perma = me.permalink; setUI(me.username, me.avatar_url, me.description); }); if (SC.isConnected) { $("header, main").addClass("loggedIn"); } getTracks(); getPlaylists(); }); });
然後我們給標籤id為login的button新增一個點選事件控制程式碼。當該按鈕被點選時,將會在點選事件程式碼裡執行SC.connect(callback)程式碼,該程式碼執行後,將會彈出一個視窗提示使用者登入。
當使用者登入完成後,彈出的視窗會關閉。然後SC.connect()裡的回撥函式就會執行。在回撥函式裡,我們對”/me”端點發起一個GET請求,而”/me”端點返回當前登入使用者物件。在剛才我們發起的GET請求回撥裡,我們在變數user_perma裡儲存使用者的永久連結,該引數是在全域性範圍定義的,所以我們之後可以使用它。
setUI()方法,getTracks()方法和getPlaylists()方法的功能分別是,設定UI,列出使用者的跟蹤記錄和列出每個使用者的播放列表。這些功能在同一個檔案裡已經被定義了。
//找點東西播放 function play(uri) { url = "http://soundcloud.com/" + user_perma + "/" + uri; SC.oEmbed(url, {maxheight: 200}, function (resp) { $("#player").html(resp.html); }); } //當一個播放軌跡或者一個播放列表被檢查時,使用’play()’函式播放 $("ul").on("click", function (e) { var title = e.target.innerHTML; if ( tracks.hasOwnProperty(title) ) { play(tracks[title]); } else if (playlists.hasOwnProperty(title)) { play("sets/" + playlists[title]); } });
當任何跟蹤路徑或者播放列表名被點選,play()方法就會執行,該方法會為點選的跟蹤路徑或者播放列表名通過SC.oEmbed()方法來在我們的頁面中嵌入一個音訊播放器。
我們能通過程式碼做很多事情,例如獲取使用者型別或者更新使用者的資訊,獲取使用者的頭像,接下來執行程式碼看看SoundCloud伺服器返回的資訊裡使用者是誰和他們的愛好是什麼。
總結
- 如果老版本的SDK的使用者登入功能可以使用,請使用老版本的SDK。因為老版本的SDK穩定,並且返回的資料使用回撥函式返回。
- 如果老版本的使用者登入功能不可用,可以使用SDK的新版本。新版本的SDK使用promises來返回資料。
- 通過一個簡單的GET請求就能訪問SoundCloud API獲取到資料。
- 使用者特有的資料可以通過”/me”端點獲取,但是隻有在使用者使用他們的SoundCloud賬戶登入我們的網站的情況下才有效。
從客戶端查詢一個API是一個很強大的工具,因為它在複雜的後端儲存了我們的資訊。SDK使我們的程式設計生活變得簡單很多。在學習了它的基礎用法後,我們甚至可以編寫出更加強大的和使用者更加友好的web應用。點選檢視一些示例(連結地址: http://codepen.io/search/pens?q=soundcloud&limit=all&type=type-pens),並且檢視官方的SoundCloud文件來學習更多關於這個強大的API的可以使用的方法。
我希望從你那裡聽到你用SoundCloud SDK構建的應用的資訊(或者正計劃構建的應用的資訊)。請讓我看見你們的評論!
作者介紹:
Mustaghees Butt 是一名Web開發人員和作家
Mustaghees是一名自由的Web設計師和開發者,他有時也寫些文章和教程。
他的興趣包括電腦科學(包括機器人技術,AI人工智慧和網路技術)和文學藝術。
譯文連結:http://www.codeceo.com/article/javascript-sdk-soundcloud-api.html
英文原文:Using the SoundCloud API with the JavaScript SDK
翻譯作者:碼農網 – 唐李川
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 使用基於 WebRTC 的 JavaScript API 在瀏覽器環境裡呼叫本機攝像頭WebJavaScriptAPI瀏覽器
- API 和 SDKAPI
- API-SDKAPI
- 在 SAP BTP 平臺 Neo 環境裡使用 SAP Cloud SDK 建立應用Cloud
- SAP Marketing Cloud Restful API SDK 使用案例分享CloudRESTAPI
- 在SAP雲平臺的API portal裡建立和管理APIAPI
- 在 Flutter 裡使用 StreamFlutter
- 在React裡使用”Vuex”ReactVue
- 在Fragment裡使用viewpagerFragmentViewpager
- SAP Spartacus 裡 對 isPlatformBrowser API 的使用PlatformAPI
- 使用swc rust api轉換javascriptRustAPIJavaScript
- 在JavaScript函數語言程式設計裡使用Map和Reduce方法JavaScript函數程式設計
- 在 Arch Linux 中使用 .NET Core SDKLinux
- SDK和API的區別?API
- 短視訊SDK,直播SDK,美顏SDK_提供開放API介面API
- SAP Cloud SDK for JavaScript 概述CloudJavaScript
- JavaScript SDK 設計指南JavaScript
- JavaScript 在 Promise.then 方法裡返回新的 PromiseJavaScriptPromise
- javascript字串常用api使用匯總(二)JavaScript字串API
- 在HTML中使用JavaScriptHTMLJavaScript
- 瀏覽器SVG的Javascript SDK庫: Ample SDK瀏覽器SVGJavaScript
- Operator-sdk 在 KaiwuDB 容器雲中的使用AI
- 在瀏覽器裡使用SAPGUI瀏覽器GUI
- 在GAE裡面使用JSTLJS
- SAP Cloud SDK for JavaScript 的搭建和使用方法介紹CloudJavaScript
- Web API美狐萌顏sdk 的使用分為三個流程WebAPI
- 在 JavaScript 中使用 C 程式JavaScript
- 在SAP BW中使用javascriptJavaScript
- 如何使用struts,在客戶端的jsp裡面有類似javascript的alert功能?如何使用struts,在客戶端的jsp裡面有類似javascri客戶端JSJavaScript
- 如何使用struts,在客戶端的jsp裡面有類似javascript的alert功能?客戶端JSJavaScript
- 在瀏覽器裡使用SAPGUI裡的SE80瀏覽器GUI
- JavaScript Promise APIJavaScriptPromiseAPI
- [擴充套件分享] 多多客 API SDK套件API
- 【擴充套件分享】多多客 API SDK套件API
- RocketMQ 5.0 API 與 SDK 的演進MQAPI
- 高德地圖 API 介面封裝 SDK地圖API封裝
- 在EJB裡如何使用retry機制?
- 【Android SDK】在命令列管理Android SDKAndroid命令列