5

在我的应用程序中,我想将 Soundcloud API 与我自己的 Soundcloud 用户一起使用。Soundcloud API 身份验证过程涉及将用户重定向到 Soundcloud 主页,登录并授权应用程序,以便该页面可以使用该用户的 API。

我想自动化整个过程,因为我自己的用户是唯一通过身份验证的用户。那可能吗?

到目前为止,这是我的代码:

    $soundcloud = new \Services_Soundcloud(
        '**',
        '**',
        'http://**'
    );

    $authorizeUrl = $soundcloud->getAuthorizeUrl();

    $accessToken = $soundcloud->accessToken();

    try {
        $me = json_decode($soundcloud->get('me'), true);
    } catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
        exit($e->getMessage());
    }

但是该行$accessToken = $soundcloud->accessToken();抛出异常:

The requested URL responded with HTTP code 401.
500 Internal Server Error - Services_Soundcloud_Invalid_Http_Response_Code_Exception 
4

3 回答 3

4

大家好,

在这里我将分享我使用 Soundcloud API (PHP) 的经验

请参阅我的问题:链接

Recently I started to work with Sound cloud API (PHP) and I decided to use PHP API by

https://github.com/mptre/php-soundcloud.

But When I was trying to get access token from Sound cloud server by this code:
// Get access token
try {
    $accessToken = $soundcloud->accessToken($_GET['code']);
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
    exit($e->getMessage());
}

我检查了 $_GET['code'] 值。但奇怪的是 $_GET['code'] 中没有任何内容,这是空白的。Soundcloud 正在返回“请求的 URL 以 HTTP 代码 0 响应”错误。那个时候我在 WAMP 本地主机上测试 Soundcloud。

Goggling 的分配我找到了解决“请求的 URL 响应 HTTP 代码 0”问题的解决方案。我已经下载了“cacert.pem”文件并将其放入我们的演示项目文件夹中(在 Services/Soundcloud/ 中)。然后在我在“类 Services_Soundcloud”中添加了一些代码之后

function protected function _request($url, $curlOptions = array()).
// My code in side function
$curlPath = realpath(getcwd().'\Services\cacert.pem');         
$curlSSLSertificate = str_replace("\\", DIRECTORY_SEPARATOR, $curlPath);        
curl_setopt($ch, CURLOPT_CAINFO, $curlSSLSertificate);

保存“类 Services_Soundcloud”文件并移至实时服务器。将我的项目从 WAMP 移动到 Live 服务器后,我开始再次检查它。当我打开我的 index.php 时,它要求我登录

在此处输入图像描述

I use my Facebook account to login.

在此处输入图像描述

after login it was asking to connect with Soundcloud

在此处输入图像描述

连接一切顺利后,我得到了我的信息

$me = json_decode($soundcloud->get('me'));

但是开始出现一个新问题,那就是我的访问令牌一次又一次地过期。然后我使用会话:D

// code for access token
$code = $_GET['code'];
// Get access token
try {
    if(!isset($_SESSION['token'])){
        $accessToken = $soundcloud->accessToken($code);
        $_SESSION['token'] = $accessToken['access_token'];
    }else{
        $soundcloud->setAccessToken($_SESSION['token']);
    }   
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
    exit($e->getMessage());
}

现在一切都很棒。我可以获取我的所有详细信息,从 SC 服务器跟踪所有内容

希望它可以帮助您与 Soundcloud API 干杯!!!!:)

于 2013-01-31T14:08:41.333 回答
1

我正在寻找同样的东西,但根据soundcloud 的 api(检查Authenticating without the SoundCloud Connect Screen段落):

// this example is not supported by the PHP SDK

..并且 Javascript 也不支持。

我尝试过使用 python 进行身份验证:

# create client object with app and user credentials
client = soundcloud.Client(client_id='YOUR_CLIENT_ID',
                           client_secret='YOUR_CLIENT_SECRET',
                           username='YOUR_USERNAME',
                           password='YOUR_PASSWORD')

..然后上传python方法:

# upload audio file
track = client.post('/tracks', track={
    'title': 'This is my sound',
    'asset_data': open('file.mp3', 'rb')
})

它工作得很好。

所以,现在,你有两种方法:

  1. 使用另一种语言,Python 或 Ruby(实际支持此功能的唯一 2 个 sdk)或使用小型 python/ruby 脚本作为此特殊需求的桥梁;
  2. 将此功能添加到 PHP SDK(我正在尝试快速完成它,如果我成功了,我会分享;)
于 2012-05-28T09:50:20.947 回答
0

它在 Python 和 Ruby SDK 中的实现背后并没有什么魔力。发生的事情是使用以下参数POST发送请求:http://api.soundcloud.com/oauth2/token

   client_id='YOUR_CLIENT_ID'
   client_secret='YOUR_CLIENT_SECRET'
   username='YOUR_USERNAME'
   password='YOUR_PASSWORD'

Content-Type: application/x-www-form-urlencoded

响应正文包含access_token, 可用于进一步授权您的请求。因此,您GET对端点的请求/me将如下所示/me?oauth_token=YOUR_ACCESS_TOKEN&client_id=YOUR_CLIENT_ID:(我相信,client_id这里是多余的,但他们所有的应用程序都在不断添加它)。

这是我为演示创建的 Postman Doc:https ://documenter.getpostman.com/view/3651572/soundcloud/7TT5oD9

于 2018-02-01T20:01:22.863 回答