2010-09-09 18 views
5

SoundCloud API'yi entegre ettiğim bir müzik sitesi oluşturuyorum.PHP ile SoundCloud'da çalma listesi oluşturma

Şimdi çalışma zamanında bir oynatma listesi oluşturmak ve bu parça listesine parça eklemek istiyorum.

Kodum takip ediyor:

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; 
    } 

} 

ve

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

Ama herhangi çalma listesi oluşturma değil.

+0

Github'daki belgeleri okudunuz mu? http://wiki.github.com/soundcloud/api/ – RobertPitt

+0

Evet ve denemedim ama başarı bulamadım – rajanikant

+0

Evet bu kod formunu doldurdu – rajanikant

cevap

-1

Sınıfınız (sınıf Soundcloud) bir şey uzatmamalı mıdır?

-1

Sınıfınız aslında bir oynatma listesi dosyası oluşturmamalıdır? XSPF'yi duydunuz mu?