2010-09-09 14 views
5

Estoy creando un sitio web de música en el que he integrado SoundCloud API.Crear lista de reproducción en SoundCloud con PHP

Ahora quiero crear una lista de reproducción en tiempo de ejecución y adjuntar pistas a esa lista de reproducción.

Mi código es el siguiente:

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 = "\r\n"; 
     $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; 
    } 

} 

y

$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); 

Pero no es la creación de cualquier lista de reproducción.

+0

¿Has leído los documentos en github? http://wiki.github.com/soundcloud/api/ – RobertPitt

+0

sí y probado pero no tiene éxito – rajanikant

+0

sí, este código es de su – rajanikant

Respuesta

-1

¿No debería su clase (clase Soundcloud) extender algo?

-1

¿No debería su clase en realidad generar un archivo de lista de reproducción? ¿Has oído hablar de XSPF?

Cuestiones relacionadas