首頁 >web前端 >js教程 >如何在JavaScript SDK裡使用SoundCloud API的圖文程式碼詳解

如何在JavaScript SDK裡使用SoundCloud API的圖文程式碼詳解

黄舟
黄舟原創
2017-03-08 14:41:582291瀏覽

SoundCloud開發了一款可被開發者使用的API,這款API能讓開發者獲得他們想要的幾乎任何資料。但是該API的用法有些混亂,特別是對初學者來說,因為此時的SoundCloud API開發文件和文件範例使用的都是SDK(軟體開發工具箱)的不同版本。

SoundCloud API和SoundCloud SDK有什麼差別呢?從根本上說,SoundCloud API是一個URL的集合,它給開發者提供了從SoundCloud伺服器獲取資料的權限,而SoundCloud SDK是為查詢SoundCloud API提前寫好的庫(或客戶端)。如果想了解更多關於這方面的內容,點擊以下連結:http://www.php.cn/

在這個教學裡,我們將學到如何存取SoundCloud API和如何簡化使用SoundCloud SDK的流程。我們將從SoundCloud上學習如何設定SoundCloud SDK,然後接著編寫JavaScript程式碼來取得SoundCloud數據,播放音訊和更多SoundCloud提供的功能。

入門指南

了解HTTP和API的概念和運作方式對你學習本教學將會有幫助。如果你想了解更多關於API的資訊,我推薦你看看:An Introduction to APIs(對API的一個介紹。連結位址:http://www.php.cn/)。同時知道一點關於非同步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頁面,該頁面用作我們的主頁。我們在這個頁面上3f1c4e4b6b16bbbd69b2ee476dc4f83a標籤的屬性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頁面裡的3f1c4e4b6b16bbbd69b2ee476dc4f83a標籤的src裡包含進去的SDK位址是SoundCloud的伺服器位址。你也可以把SDK下載下來,然後像下面這樣引用:

<script src="sdk.js"></script>

可以透過下面的方法步驟測試一下SoundCloud的SDK是否在你的網頁中被正確載入:

  • 用瀏覽器開啟這個頁面(建議使用Google的Chrome瀏覽器)。

  • 在瀏覽器裡開啟開發者控制台(在GoogleChrome瀏覽器裡開啟開發者控制台的快速鍵是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帳號。注意:你不用為了這個目的創建一個獨立的帳戶。你可以用同一個帳戶來為你的個人目的使用。

  • 點選註冊一個新應用程式按鈕。
    Screenshot of the SoundCloud application dashboard

  • 給你的app一個名字,然後點擊複選框接受SoundCloud的開發者政策條款。
    Screenshot of choosing a name for the SoundCloud App

    #
  • 点击那个大大的”注册”按钮,来完成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(&#39;https://soundcloud.com/username/complete-url-to-the-track&#39;, {maxheight: 200, auto_play: false}, function(res) {
  $("#player").html(res.html);
});

我们分段来看它:

  • 首先在该方法的第一个参数里,我们给了一个完整的我们想要播放的跟踪URL。

  • 该方法的第二个参数是可选参数,在这个参数里,我们可以为播放器设置一些选项。

  • 第三个参数是一个回调函数,在这个回调函数里,我们将我们页面里的(id为player)的一个元素的内容用该播放器(res.html)的HTML代码替换。

这个跟踪路径可以用来在一个网站里嵌入一首歌或者一首音乐。

实现用户登录

为了实现用户登录功能,我们需要有一个回调URL来达到验证授权的目的。这是OAuth协议的要求。如果你想了解OAuth协议,这里有一个OAuth协议的简单解释:OAuth 2 Simplified(链接地址:http://www.php.cn/)。因此让我们在app设置里添加一个名为”callback.html”的回调URL,这个callback.html我们接下来就会创建。

OAuth协议介绍链接地址: http://www.php.cn/

创建回调页

在一个用户登录后,弹出式窗口会重定向到该文件。在我们的例子中,我们把该文件定义为”callback.html”,并且该文件和我们的主页(index.html)保存在相同的目录里。这个文件就是在我们的app设置里我们需要在回调字段里给定的文件。

Screenshot of setting the redirect URL

我们需要在回调文件里使用的代码在开发文档里有提供。然而,开发文档有点过时,因此我们需要稍微调整一下来满足现在的开发需要标准。

你可以根据你个人的喜好来调整它的通知和设计,但是现在,我们使它越简单越好:

<!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上创建了一个演示站点。

让我们看看这两个文件。在index.html里,有四个重要的p元素,它们在用户完成登录后将会填满用户的数据:

<main>

    <p id="ui">
        <h2>Welcome <span></span></h2>
        <img id="avatar" />
        <p id="description"></p>
    </p>

    <!-- TRACKS -->
    <p id="tracklist">
        <h3>Your Tracks:</h3>
        <ul></ul>
    </p>
    <!-- PLAYLISTS -->
    <p id="playlists">
        <h3>Your Playlists:</h3>
        <ul></ul>
    </p>

    <p id="player"></p>

</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://www.php.cn/),并且查看官方的SoundCloud文档来学习更多关于这个强大的API的可以使用的方法。

我希望从你那里听到你用SoundCloud SDK构建的应用的信息(或者正计划构建的应用的信息)。请让我看见你们的评论!

作者介绍:

Mustaghees Butt

Mustaghees Butt 是一名Web开发人员和作家

Mustaghees是一名自由的Web设计师和开发者,他有时也写些文章和教程。

他的兴趣包括计算机科学(包括机器人技术,AI人工智能和网络技术)和文学艺术。

以上是如何在JavaScript SDK裡使用SoundCloud API的圖文程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn