我正在尝试使用PHP API呈现SoundCloud HTML5小部件,但每次运行该命令时,我认为应该返回小部件的HTML,我只是得到一个异常:
The requested URL responded with HTTP code 302
我意识到这是一个重定向。我不知道的是为什么我会得到这些,或者为了实际获取小部件HTML该怎么做。
关于API的文档说要使用PHP嵌入小部件,你应该这样做:
<?php
require_once 'Services/Soundcloud.php';
// create a client object with your app credentials
$client = new Services_Soundcloud('YOUR_CLIENT_ID', 'YOUR_CLIENT_SECRET');
// get a tracks oembed data
$track_url = 'http://soundcloud.com/forss/flickermood';
$embed_info = $client->get('/oembed', array('url' => $track_url));
// render the html for the player widget
print $embed_info['html'];
我正在运行:
// NB: Fully authorised SoundCloud API instance all working prior to this line
// $this->api refers to an authorised instance of Services_Soundcloud
try {
$widget = array_pop(
json_decode( $this->api->get('oembed', array('url' => $track_url)) )
);
print_r($widget);
} catch (Exception $e)
{
print_r($e->getMessage());
}
其中“track_url”实际上是我在应用程序中使用相同的API在应用程序中向SoundCloud请求轨道对象时返回的URL。
我实际上并不确定这个网址是否正确,因为我回来的跟踪对象在表单中给出了'uri':
[uri] => https://api.soundcloud.com/tracks/62556508
文档示例都有一个直接的http://soundcloud.com/username/track-permalink网址 - 但即使使用已知的公共路径路径,运行API oembed方法的尝试也会失败...我仍然会遇到302异常。
最后,提到在'get'命令中将“allow_redirects”设置为false,但是当我添加用于构建API的查询的参数时,这没有任何效果。我也尝试添加额外的cURL选项,但这也没有效果。
我确实在SoundCloud中启用了对该轨道的API访问。
有点把我的头撞到墙上。如果有人有任何指示我会非常感激听到他们。为了清楚起见,我可以通过我创建的API实例访问所有用户数据,注释等,因此它似乎工作正常。
答案 0 :(得分:2)
感谢您指出这一点。文档中有一个错误导致您误入歧途。对于那个很抱歉。我已经更新了文档来修复bug。这是更新的代码示例:
<?php
require_once 'Services/Soundcloud.php';
// create a client object with your app credentials
$client = new Services_Soundcloud('YOUR_CLIENT_ID', 'YOUR_CLIENT_SECRET');
$client->setCurlOptions(array(CURLOPT_FOLLOWLOCATION => 1));
// get a tracks oembed data
$track_url = 'http://soundcloud.com/forss/flickermood';
$embed_info = json_decode($client->get('oembed', array('url' => $track_url)));
// render the html for the player widget
print $embed_info->html;
请注意差异:
$client->get
的回复换自json_decode
stdClass
对象,而不是Array
,因此必须使用html
运算符访问->
属性。希望有所帮助。如果您仍然遇到问题,请随时发表评论,我会修改我的答案。