私は何時間も研究してきましたが、うまくいくには運がありませんでした。基本的に私はユーザーがこのようにsoundcloud urlを置くことができるcmsを持っています " https://soundcloud.com/cade-turner/cade-turner-symphony-of-light "、そしてページは表示することができます埋め込みiframe。しばらくの間api docsを赤にしましたが、関連するものを見つけることができませんでした。この投稿 ここ は話をしましたが、私は答えを完全に理解できず、 oEmbed および oEmbed 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 +'&color=ff6600&auto_play=false&show_artwork=true"></iframe>');//the iframe is copied from soundcloud embed codes
}
);
選択したトラックの埋め込みコードは次のとおりです。
<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/101276036&color=ff6600&auto_play=false&show_artwork=true"></iframe>
固有のものはトラック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を生成して保存できます。
これは、クライアント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);
私は似たようなものを探していて、これが本当に役立つと思いました:
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);
});
これは私が書いた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ページのURLに設定する必要があります。
例えば:
<div class="sc-embed" sc_url="http://soundcloud.com/forss/flickermood"></div>
複数のプレーヤーを挿入するには、<div>
の値が異なる複数のsc_url
を使用します。
次に示すように、JavaScriptのparams
変数を変更して、プレーヤーオプションを有効または無効にできます。 https://developers.soundcloud.com/docs/oembed#introduction
上記と同じ問題が発生しました。機能しなくなった古い埋め込みコードがあり、残念ながら私はHTMLのみに制限されています。これ以上の答えを見てもうまくいきません。だから、私は何かを試してみて、それが機能するかどうかを確認することにしました。実際に変換する必要はもうありません。古いURLをそのまま使用できます。これが私のための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>
読みやすくするために上記のエンターを追加しましたが、コードは1行にする必要があります
これは、カスタム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.15
で機能し、custom BBCode mod
は解析されていない等しいコンテンツとして設定されます。
私は、jQueryを使用せずに、JavaScriptでこの方法を実行しました。
var formData = new FormData();
formData.append("format", "json");
formData.append("url", "http://soundcloud.com/forss/flickermood");
fetch('http://soundcloud.com/oembed', {
method: 'POST',
body: formData
}).then(function (response) {
console.log(response);
});