在你的网站上使用 Grooveshark 流媒体 API 播放音乐

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为你的旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

Grooveshark 是一个用于收听音乐的网络应用程序。 你可以在那里搜索和播放几乎任何歌曲。 通过帐户,你可以收藏歌曲、创建播放列表、进行社交活动,你懂得。 也许不太为人知的是,Grooveshark 拥有 API,它允许你将音乐播放到自己的网站上。 这将是一个教程和示例代码,向你展示如何做到这一点。

这是计划

要求

首先,你必须 申请 API 密钥这不是免费的 API。 我不确定确切的成本,所以我建议直接申请,解释你想做什么,他们会与你联系并告知成本。 对于流量高的网站,他们有时会提供托管一个支持 Grooveshark 的广告作为一种选择。

有了它,我们将使用以下技术

  1. jQuery (Ajax 等)
  2. SWFObject (嵌入 Flash)
  3. Grooveshark 流媒体 APIPHP API 包装器
  4. Tinysong APIPHP API 包装器

1. 将 Grooveshark Flash (SWF) 嵌入页面

Grooveshark 播放器是一个(不可见的)Flash 嵌入。 加载到页面后,你可以通过 JavaScript 控制它。 将其嵌入页面就像这样

  ...

  <script src="swfobject/swfobject.js"></script>
</head>

<body>

  <div id="player"></div>
  <script>
  swfobject.embedSWF("http://grooveshark.com/APIPlayer.swf", "player", "300", "300", "9.0.0", "", {}, {allowScriptAccess: "always"}, {id:"groovesharkPlayer", name:"groovesharkPlayer"}, function(e) {

    var element = e.ref;

    if (element) {

      setTimeout(function() {
        window.player = element;
        window.player.setVolume(99);
        }, 1500);

      } else {

        // Couldn't load player
        // Play sad trombone

      }

    });
    </script>

为了确保它不可见

#groovesharkPlayer {
	position: absolute;
	top: -9999px;
	left: -9999px;
}

2. 拥有一个 songGetter.php

这是我们的本地文件,我们的页面将通过 Ajax 调用它来请求 Grooveshark 的流媒体信息。 本质上,该文件加载 API 包装器,然后使用其方法获取我们需要传递给 SWF 以开始播放音乐的信息。

<?php

    session_start();

    // Make sure to validate and cleanse this and stuff.
    $songID = $_POST['song'];

    // Load up API wrapper
    require("gsAPI.php");
    $gsapi = new gsAPI('API-USERNAME', 'API-KEY');
    gsAPI::$headers = array("X-Client-IP: " . $_SERVER['REMOTE_ADDR']);

    // Session caching stuff
    if (isset($_SESSION['gsSession']) && !empty($_SESSION['gsSession'])) {
        $gsapi->setSession($_SESSION['gsSession']);
    } else {
        $_SESSION['gsSession'] = $gsapi->startSession();
    }
    if (!$_SESSION['gsSession']) {
        die("noSession");
    }
    if (isset($_SESSION['gsCountry']) && !empty($_SESSION['gsCountry'])) {
        $gsapi->setCountry($_SESSION['gsCountry']);
    } else {
        $_SESSION['gsCountry'] = $gsapi->getCountry();
    }
    if (!$_SESSION['gsCountry']) {
        die("noCountry");
    }

    // Make request to Grooveshark and return data as JSON
    $streamInfo = $gsapi->getStreamKeyStreamServer($songID, false);
    echo json_encode($streamInfo);
    
?>

3. 从点击播放歌曲

假设我们页面上有一个链接,点击它,我们希望播放一首歌。

<a href="#" data-songid="23391593">Play This Song</a>

因此,使用 jQuery,我们将监听该点击,并触发一个自定义函数。 我们将把歌曲 ID 传递给该自定义函数,该歌曲 ID 将从该链接的 HTML5 数据属性中获取。

var doc = $(document);
	
doc.on("click", "a[data-songid]", function(e) {
  e.preventDefault();	
  playSong($(this).data("songid"));
});

而我们的自定义函数 playSong 只是一个针对我们设置的 songGetter.php 文件的 Ajax 请求

function playSong(songID) {
	$.ajax({
	  url: "api/songGetter.php",
	  type: "POST",
	  data: {
	  	song: songID
	  },
	  success: function(response) {
	    var responseData = $.parseJSON(response);
	    window.player.playStreamKey(responseData.StreamKey, responseData.StreamServerHostname, responseData.StreamServerID);
	  }
	});
}

太棒了。

演示

你可以看到这一切在行动

查看演示

演示还包括 TinySong API 功能。 这是至关重要的部分,因为它提供了 Grooveshark 需要识别特定歌曲的歌曲 ID。 结合使用这两个 API 来创建搜索和播放功能非常容易,尽管此演示没有该功能,因为它需要一个对互联网开放的 songGetter.php 文件。 此实时演示中的特定 songGetter.php 文件被锁定为仅用于演示页面上的那些歌曲。

所有这些都可以在 GitHub 上找到

法律问题

如果你将歌曲的音频文件直接上传到你的服务器并使用它在你的网站上播放音乐,如果该音乐受版权保护,你可能会遇到麻烦。 这是一种避免这样做的方法,但仍然可以播放该音乐。 我不是律师,但由于你没有分发音乐,而分发音乐的公司支付了版税,我认为你是安全的。 如果有人对此了解更多,请随时在下面的评论中分享。