Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Soundcloud API(PHP)返回;无效授权”;_Php_Api_Upload_Soundcloud - Fatal编程技术网

Soundcloud API(PHP)返回;无效授权”;

Soundcloud API(PHP)返回;无效授权”;,php,api,upload,soundcloud,Php,Api,Upload,Soundcloud,我们正在使用下面的代码尝试通过PHP将曲目从WordPress站点上传到SoundCloud。在运行此脚本之前,我们的服务器上已经有MP3曲目 function upload_soundcloud() { //App credentials. Create one at http://soundcloud.com/you/apps define('API_URL', 'https://api.soundcloud.com'); define('CLIENT_ID', '

我们正在使用下面的代码尝试通过PHP将曲目从WordPress站点上传到SoundCloud。在运行此脚本之前,我们的服务器上已经有MP3曲目

function upload_soundcloud()
{

    //App credentials. Create one at http://soundcloud.com/you/apps
    define('API_URL', 'https://api.soundcloud.com');
    define('CLIENT_ID', '$client_id');
    define('CLIENT_SECRET', '$client_secret');

    //User credentials
    define('EMAIL', '$email');
    define('PASSWORD', '$password');

    //Path to MP3 file to upload
    define('FILE', ABSPATH . '/wp-content/uploads/path/to/file.mp3');

    class SoundcloudAPI {
        private $url;
        private $clientID;
        private $secret;
        private $accessToken;

        public function __construct($url, $clientID, $secret) {
            $this->url = $url;
            $this->clientID = $clientID;
            $this->secret = $secret;
        }

        public function auth($username, $password) {
            $url = $this->url . '/oauth2/token';
            $data = array(
                'client_id' => $this->clientID,
                'client_secret' => $this->secret,
                'grant_type' => 'password',
                'username' => $username,
                'password' => $password
            );

            $result = $this->request($url, $data, 'POST');
            $this->accessToken = $result->access_token;
            return $result;
        }

        public function upload($title, $path) {
            $url = $this->url . '/tracks';
            $data = array(
                'oauth_token' => $this->accessToken,
                'track[title]' => $title,
                'track[asset_data]' => new CurlFile(realpath($path), 'audio/mpeg'),
            );

            $result = $this->request($url, $data, 'POST');
            return $result;
        }

        private function request($url, $data, $method) {
            $curl = curl_init();
            if ($method === 'POST') {
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            } else {
                $url .= '?' . http_build_query($data);
            }
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
            $result = json_decode(curl_exec($curl));
            curl_close($curl);

            return $result;
        }
    }

    $soundCloud = new SoundcloudAPI(API_URL, CLIENT_ID, CLIENT_SECRET);
    $resultAuth = $soundCloud->auth(EMAIL, PASSWORD);
    $resultUpload = $soundCloud->upload('Test', FILE);

    echo '<pre>';
    print_r($resultAuth);
    print_r($resultUpload);
    echo '</pre>';

}

有人知道为什么会这样吗?(最奇怪的是,它实际上在两天前工作,但后来停止工作,我感觉自己快疯了)。

尝试在请求之间保存访问令牌和刷新令牌(例如,在本地文件或数据库中)并重用它。使用用户名和密码时,速率限制似乎仅在
/oauth2/token
端点上

访问令牌过期后,您可以使用刷新令牌通过向
/oauth2/token
发出请求来获取一个新的令牌:

“授权类型”:“刷新令牌”,
“客户id”:,
“客户机密”:,
“刷新令牌”:

尝试在请求之间保存访问令牌和刷新令牌(例如,在本地文件或数据库中)并重用它。使用用户名和密码时,速率限制似乎仅在
/oauth2/token
端点上

访问令牌过期后,您可以使用刷新令牌通过向
/oauth2/token
发出请求来获取一个新的令牌:

“授权类型”:“刷新令牌”,
“客户id”:,
“客户机密”:,
“刷新令牌”:


为什么要在函数中定义类?在函数外部定义它,在函数内部创建一个实例并使用它。当您想使用oAuth登录,并且您有客户机id和客户机机密时,授权类型应该是授权代码而不是密码,更多信息感谢回复人员,似乎只是SoundCloud API出了问题或特定令牌出了问题,因为现在(3天后)代码又正常工作了……在短时间内完成了10多次请求之后,我们也遇到了这个错误。似乎是利率限制。@DMalan我可以证实同样的事情。调用upload API可以正常工作,最多上传4-5次,然后我开始获得“无效授权”,24小时后才恢复正常。因此,通过API上传曲目时,似乎有某种24小时限制。这使得它在很多情况下都是无用的。其他人能证实这一点吗?为什么要在函数中定义类?在函数外部定义它,在函数内部创建一个实例并使用它。当您想使用oAuth登录,并且您有客户机id和客户机机密时,授权类型应该是授权代码而不是密码,更多信息感谢回复人员,似乎只是SoundCloud API出了问题或特定令牌出了问题,因为现在(3天后)代码又正常工作了……在短时间内完成了10多次请求之后,我们也遇到了这个错误。似乎是利率限制。@DMalan我可以证实同样的事情。调用upload API可以正常工作,最多上传4-5次,然后我开始获得“无效授权”,24小时后才恢复正常。因此,通过API上传曲目时,似乎有某种24小时限制。这使得它在很多情况下都是无用的。其他人能证实这一点吗?我不敢相信我不知道这一点,非常感谢,我今天将尝试它!它似乎起了作用——现在我已经通过请求一个未过期的令牌并将其保存到数据库中/从数据库中检索它,然后重新使用该令牌,使我们的工作变得更加轻松;谢谢你的帮助!美好的您是如何请求一个非过期令牌的?它看起来是这样的:'client\u id'=>'CLIENTID','client\u secret'=>'CLIENTSECRET','grant\u type'=>'password','username'=>'username','password'=>'password',scope'=>'非过期'我不敢相信我不知道这个,非常感谢,我今天会尝试它!它似乎起了作用——现在我已经通过请求一个未过期的令牌并将其保存到数据库中/从数据库中检索它,然后重新使用该令牌,使我们的工作变得更加轻松;谢谢你的帮助!美好的您是如何请求非过期令牌的?它看起来是这样的:“客户端id”=>“客户端id”=>“客户端机密”=>“客户端机密”、“授予类型”=>“密码”、“用户名”=>“用户名”、“密码”=>“密码”、“作用域”=>“非过期”
stdClass Object
(
    [error] => invalid_grant
)
'grant_type': 'refresh_token',
'client_id': <your client id>,
'client_secret': <your client secret>,
'refresh_token': <previous refresh token>