如何通过soundcloud.com网址获取Soundcloud嵌入代码

时间:2014-01-01 15:44:39

标签: javascript php soundcloud

我一直在研究几个小时没有运气才能让它奏效。基本上我有一个cms,用户可以在其中放置soundcloud url,如“https://soundcloud.com/cade-turner/cade-turner-symphony-of-light”,然后页面可以显示嵌入的iframe。我已经将api文档发送了一段时间,但找不到任何相关内容。这篇文章here已经谈过,但我只是不太明白答案,我检查了oEmbedoEmbed reference但找不到合适的例子。还有人提示吗?

编辑: 感谢Jacob的回答,我终于设法通过使用ajax来实现。

var trackUrl = 'THE_URL';
var Client_ID = 'CLIENT_ID';//you have to register in soundcound developer first in order to get this id 
$.get(//make an ajax request
    'http://api.soundcloud.com/resolve.json?url=' + trackUrl + '&client_id=' + Client_ID, 
    function (result) {//returns json, we only need id in this case
        $(".videowrapper, .exhibitions-image, iframe").replaceWith('<iframe width="100%" height="100%" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/' + result.id +'&amp;color=ff6600&amp;auto_play=false&amp;show_artwork=true"></iframe>');//the iframe is copied from soundcloud embed codes
    }
);

8 个答案:

答案 0 :(得分:24)

我在我的代码片段中找到了这个用于您的目的,即使无需注册客户端ID。

//Get the SoundCloud URL
$url="https://soundcloud.com/epitaph-records/this-wild-life-history";
//Get the JSON data of song details with embed code from SoundCloud oEmbed
$getValues=file_get_contents('http://soundcloud.com/oembed?format=js&url='.$url.'&iframe=true');
//Clean the Json to decode
$decodeiFrame=substr($getValues, 1, -2);
//json decode to convert it as an array
$jsonObj = json_decode($decodeiFrame);

//Change the height of the embed player if you want else uncomment below line
// echo $jsonObj->html;
//Print the embed player to the page
echo str_replace('height="400"', 'height="140"', $jsonObj->html);

答案 1 :(得分:11)

对于您选择的曲目,嵌入代码如下:

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/101276036&amp;color=ff6600&amp;auto_play=false&amp;show_artwork=true"></iframe>

唯一独有的是Track ID,在这种情况下是101276036

因此,当您只有URL时,您的真正问题是尝试查找跟踪ID,而Soundcloud API提供了一个名为resolve的方法来执行此操作。

require_once 'Services/Soundcloud.php';
$client = new Services_Soundcloud('YOUR_CLIENT_ID');
$track_url = 'https://soundcloud.com/cade-turner/cade-turner-symphony-of-light'; // Track URL
$track = json_decode($client->get('resolve', array('url' => $track_url)));
$track->id; // 101276036 (the Track ID)

然后,您可以存储此ID,或生成并存储您要显示的HTML。

答案 2 :(得分:9)

我正在寻找类似的东西,发现这真的很有帮助:

https://developers.soundcloud.com/docs/oembed#introduction

试试这个CURL命令:

curl "http://soundcloud.com/oembed" -d 'format=json' -d 'url=http://soundcloud.com/forss/flickermood'

或者这个jQuery ajax请求:

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://soundcloud.com/oembed",
  "method": "POST",
  "headers": {},
  "data": {
    "format": "json",
    "url": "http://soundcloud.com/forss/flickermood"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

答案 3 :(得分:1)

这是我写的基于jQuery的Javascript解决方案。

它不需要客户端ID。

确保包含jQuery,并将其添加到文档的<head>

<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function(event) {
    (function ($) {
        $.fn.scembed = function(){
        var datasource  = 'http://soundcloud.com/oembed';
        return this.each(function () {
            var container = $(this);
            var mediasource = $(container).attr("sc_url");
            var params = 'url=' + mediasource + '&format=json&iframe=true&maxwidth=480&maxheight=120&auto_play=false&show_comments=false';
            $.ajaxopts = $.extend($.ajaxopts, {
                                url: datasource,
                                data: params,
                                dataType: 'json',
                                success: function (data, status, raw) {
                                    $(container).html(data.html);
                                },
                                error: function (data, e1, e2) {
                                    $(container).html("Can't retrieve player for " + mediasource);
                                },
                            });
            $.ajax($.ajaxopts);
            });
        };
    })(jQuery);

    $(function(){
        $("div.sc-embed").scembed();
    });
});
</script>

要将Soundcloud播放器插入页面,请创建<div>,为其指定一个sc-embed类,并为其指定一个名为sc_url的属性,该属性应设置为Soundcloud页面。

例如:

<div class="sc-embed" sc_url="http://soundcloud.com/forss/flickermood"></div>

要插入多个玩家,请使用<div>的不同值的多个sc_url

您可以更改Javascript中的params变量,以启用或停用此处列出的播放器选项:https://developers.soundcloud.com/docs/oembed#introduction

答案 4 :(得分:1)

我遇到了与上述相同的问题。我有旧的嵌入代码,这些代码不再起作用,对我而言,不幸的是,我仅限于HTML。看到上面的答案对我来说是行不通的。所以我决定,我将尝试一些东西,看看它是否有效,哦,我的,它确实有效!您不再需要实际转换内容。您可以只使用旧的网址。这是给我的HTML代码:

<iframe width="100%" height="300" scrolling="no" frameborder="no" allow="autoplay"
src="https://w.soundcloud.com/player/?url=https%3A//soundcloud.com/LPChip/internal-meganism
&color=%23ff5500&auto_play=false&hide_related=false
&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true">
</iframe>

我在上面添加了enter使其可读,但应该是一行代码。

原因是我在具有自定义BBCode模式的论坛上运行了此代码,我希望在此模式下提供以下支持:[soundcloud=Artist]song[/soundcloud]

在上述情况下,这是[soundcloud=LPChip]Internal-meganism[/soundcloud]

BBCode的实际html如下:

<iframe width="100%" height="300" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//soundcloud.com/{option1}/{content}&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe>

这适用于SMF 2.0.15custom BBCode mod,并设置为未解析的相等内容。

演示:https://nifflas.lp1.nl/index.php?topic=6630.0

答案 5 :(得分:1)

我不确定之前是否有人尝试过,但目前(2021 年 2 月)正在将基本 soundcloud 链接传递到 iframe 链接的 ?url 参数中。 “官方”嵌入代码使用另一个 ID,但常规链接也可以正常工作(目前)。

例如,这个指向 soundcloud 的链接可以嵌入为 https://soundcloud.com/anton-jarvis-206182017/loves-philosophy-by-percy-bysshe-shelley

<iframe width="100%" height="300" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//soundcloud.com/anton-jarvis-206182017/loves-philosophy-by-percy-bysshe-shelley&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe>

感谢@lpchip 的回答,他的回答激发了我的尝试

答案 6 :(得分:0)

我已经在JavaScript中以这种方式完成了此操作,而没有使用jQuery:

import multiprocessing
import os

def send_email():
    print("send email")

def main():
    for i in range(30):
        if i % 10 == 0:
            p = multiprocessing.Process(target=send_email)
            p.start()
            print("ID of process p: {}".format(p.pid))
            p.join()

if __name__ == "__main__":
    print("ID of main process: {}".format(os.getpid()))
    main()

答案 7 :(得分:0)

这是带有CURL的PHP​​示例

// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://soundcloud.com/oembed');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "format=json&url=http://soundcloud.com/forss/flickermood");

$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);