English 中文(简体)
Create playlist in SoundCloud with PHP
原标题:

I am creating a music website on which i have integrated SoundCloud API.

Now I want to create a playlist at run time and attach tracks to that playlist.

My code is following:

class Soundcloud {

    const VERSION =  1.1 ;

    public static $urls = array(
         api  =>  http://api.soundcloud.com/ ,
         oauth  => array(
             access  =>  http://api.soundcloud.com/oauth/access_token ,
             authorize  =>  http://soundcloud.com/oauth/authorize ,
             request  =>  http://api.soundcloud.com/oauth/request_token 
        )
    );

    function __construct($consumer_key, $consumer_secret, $oauth_token = null, $oauth_token_secret = null) {
        $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
        $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);

        if (!empty($oauth_token) && !empty($oauth_token_secret)) {
            $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
        } else {
            $this->token = null;
        }
    }

    function get_authorize_url($token) {
        if (is_array($token)) {
            $token = $token[ oauth_token ];
        }


        return $this->_get_url( authorize ) .  ?oauth_token=  . $token;
    }

    function get_request_token($oauth_callback) {
        $request = $this->request(
            $this->_get_url( request ),
             POST ,
            array( oauth_callback  => $oauth_callback)
        );
        $token = $this->_parse_response($request);

        $this->token = new OAuthConsumer(
            $token[ oauth_token ],
            $token[ oauth_token_secret ]
        );

        return $token;
    }

    function get_access_token($token) {
        $response = $this->request(
            $this->_get_url( access ),
             POST ,
            array( oauth_verifier  => $token)
        );
        $token = $this->_parse_response($response);
        $this->token = new OAuthConsumer(
            $token[ oauth_token ],
            $token[ oauth_token_secret ]
        );

        return $token;
    }

    function upload_track($post_data, $asset_data_mime = null, $artwork_data_mime = null) {
        $body =   ;
        $boundary =  ---------------------------  . md5(rand());
        $crlf = "
";
        $headers = array(
             Content-Type  =>  multipart/form-data; boundary=  . $boundary,
             Content-Length  => 0
        );

        foreach ($post_data as $key => $val) {
            if (in_array($key, array( track[asset_data] ,  track[artwork_data] ))) {
                $body .=  --  . $boundary . $crlf;
                $body .=  Content-Disposition: form-data; name="  . $key .  "; filename="  . basename($val) .  "  . $crlf;
                $body .=  Content-Type:   . (($key ==  track[asset_data] ) ? $asset_data_mime : $artwork_data_mime) . $crlf;
                $body .= $crlf;
                $body .= file_get_contents($val) . $crlf;
            } else {
                $body .=  --  . $boundary . $crlf;
                $body .=  Content-Disposition: form-data; name="  . $key . "  . $crlf;
                $body .= $crlf;
                $body .= $val . $crlf;
            }
        }

        $body .=  --  . $boundary .  --  . $crlf;
        $headers[ Content-Length ] += strlen($body);

        return $this->request( tracks ,  POST , $body, $headers);
    }

    function request($resource, $method =  GET , $args = array(), $headers = null) {

        if (!preg_match( /http:/// , $resource)) {
            $url = self::$urls[ api ] . $resource;
        } else {
            $url = $resource;
        }

        if (stristr($headers[ Content-Type ],  multipart/form-data )) {
            $body = false;
        } elseif (stristr($headers[ Content-Type ],  application/xml )) {
            $body = false;
        } else {
            $body = true;
        }

        $request = OAuthRequest::from_consumer_and_token(
            $this->consumer,
            $this->token,
            $method,
            $url,
            ($body === true) ? $args : null
        );
        $request->sign_request($this->sha1_method, $this->consumer, $this->token);

        return $this->_curl(
            $request->get_normalized_http_url(),
            $request,
            $args,
            $headers
        );
    }

    private function _build_header($headers) {
        $h = array();

        if (count($headers) > 0) {
            foreach ($headers as $key => $val) {
                $h[] = $key .  :   . $val;
            }

            return $h;
        } else {
            return $headers;
        }
    }

    private function _curl($url, $request, $post_data = null, $headers = null) {
        $ch = curl_init();
        $mime = (stristr($headers[ Content-Type ],  multipart/form-data )) ? true : false;
        $headers[ User-Agent ] = (isset($headers[ User-Agent ]))
            ? $headers[ User-Agent ]
            :  PHP SoundCloud/  . self::VERSION;
        $headers[ Content-Length ] = (isset($headers[ Content-Length ]))
            ? $headers[ Content-Length ]
            : 0;
        $headers = (is_array($headers)) ? $this->_build_header($headers) : array();
        $options = array(
            CURLOPT_URL => $url,
            CURLOPT_HEADER => false,
            CURLOPT_RETURNTRANSFER => true
        );

        if (in_array($request->get_normalized_http_method(), array( DELETE ,  PUT ))) {
            $options[CURLOPT_CUSTOMREQUEST] = $request->get_normalized_http_method();
            $options[CURLOPT_POSTFIELDS] =   ;
        }

        if (is_array($post_data) && count($post_data) > 0 || $mime === true) {
            $options[CURLOPT_POSTFIELDS] = (is_array($post_data) && count($post_data) == 1)
                ? ((isset($post_data[key($post_data)])) ? $post_data[key($post_data)] : $post_data)
                : $post_data;
            $options[CURLOPT_POST] = true;
        }

        $headers[] = $request->to_header();
        $options[CURLOPT_HTTPHEADER] = $headers;

        curl_setopt_array($ch, $options);

        $response = curl_exec($ch);
        $this->http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        curl_close($ch);

        return $response;
    }

    private function _get_url($type) {
        return (array_key_exists($type, self::$urls[ oauth ]))
            ? self::$urls[ oauth ][$type]
            : false;
    }

    private function _parse_response($response) {
        parse_str($response, $output);

        return (count($output) > 0) ? $output : false;
    }

}

and

 $soundcloud = new Soundcloud(
        $consumer_key,
        $consumer_secret,
        $_SESSION[ oauth_access_token ],
        $_SESSION[ oauth_access_token_secret ]
    );

$post_data1 = array( playlist[title] => This is my set  );
 $headers = array( Content-Type  =>  application/xml );
 $soundcloud->request( playlists ,  POST , $post_data1,$headers);

But it s not creating any playlist.

问题回答

Shouldn t your class (class Soundcloud) extend something?

Shouldn t your class actually generate a playlist file? Have you heard of XSPF?





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签