2012-09-19 94 views
-4
var $conn = false; 
    var $username = ""; 
    var $password = ""; 
    var $error = false; 

    function GetBetween($content,$start,$end){ 
    $r = explode($start, $content); 
    if (isset($r[1])){ 
     $r = explode($end, $r[1]); 
     return $r[0]; 
    } 
    return ''; 
    } 

    function get($url) 
    { 
     $this->conn = new Curl('youtube'); 

     $html = $this->conn->get($url); 

     if(strstr($html,'verify-age-thumb')) 
     { 
      $this->error = "Adult Video Detected"; 
      return false; 
     } 

     if(strstr($html,'das_captcha')) 
     { 
      $this->error = "Captcah Found please run on diffrent server"; 
      return false; 
     } 

    if(!preg_match('/encoded_fmt_stream_map.*/',$html,$match)) 
     { 
      $this->error = "Error Locating Download URL's"; 
      return false; 
     } 

     $fmt_url = substr(urldecode($match[0]), 1); 
     $urls = explode(',',$fmt_url); 
     $foundArray = array(); 

     foreach($urls as $url) 
     { 
     $url_end = strstr($url, "&quality"); 

     // $foundArray[] = $this->GetBetween($url, "&url=", "&type="); 
     $foundArray[substr(strstr($url_end, "&itag="), 6)] = substr((str_replace($url_end, "", $url)), 4); 

     } 

     $formats = array(
      '5'=>array('flv','Low Quality'), 
      '6'=>array('flv','Low Quality'), 
      '13'=>array('3gp','Low Quality'), 
      '17'=>array('3gp','Medium Quality'), 
      '18'=>array('mp4','High Quality (480p)'), 
      '22'=>array('mp4','High Quality (720p)'), 
      '34'=>array('flv','High Quality (320p)'), 
      '35'=>array('flv','High Quality (480p)'), 
      '36'=>array('3gp','High Quality'), 
      '37'=>array('mp4','High Quality (1080p)'), 
//   '43'=>array('webm',''), 
//   '44'=>array('webm',''), 
//   '45'=>array('webm',''), 
     ); 

     foreach ($formats as $format => $meta) { 
      if (isset($foundArray[$format])) { 
       $videos[] = array('ext' => $meta[0], 'type' => $meta[1], 'url' => urldecode($foundArray[$format])); 
      } 
     } 

     return ($videos); 
    } 

我正在解析YouTube(YT)的輸出,以便在我的網站上播放視頻。這個代碼一直工作到最近YT改變了他們的格式。理解和解析cURL響應

這個片段,我不理解的部分是從「的foreach($網址爲$ URL)」

我拿到他的分析數據來自捲曲請求返回。我寫了「GetBetween」fxn來選擇我想象中的相關代碼,但它仍然返回一個null數組。

有人可以解釋什麼是分配給「$ foundArray」。還有什麼是分配給「$ videos []」數組。 「$ meta [0]」和「$ meta [1]」是指數組的第一行,即「'5'=> array('flv','Low Quality')」或者前兩行陣列?

任何幫助你可以給予將不勝感激。 在此先感謝

+3

這不是複雜的不混淆... –

+0

拆開那條線,看看每個部分。 substr裏面有一個substr,裏面的一個返回是什麼?外面的人對此做了什麼? etc ... – sachleen

+0

'echo()'和'print_r()'是你的朋友。如果在程序遍歷該函數時顯示字符串/數組/對象,則會更好地瞭解正在發生的事情以及原因 –

回答

0

對於每一個在$網址URL的,它需要的URL的一部分&quality之前並將其分配給$foundArray[itag],其中itag是URL之後的部分&itag=(我認爲這是總是最後參數在URL中)。

對於$formats陣列的第一行,$meta[0]flv$meta[1]Low Quality。因此,foreach ($formats...)循環遍歷每種格式,查看其中一個URL是否具有等於格式編號的itag。如果找到匹配項,則會向格式信息和URL的解碼版本添加一行到$videos

因此,結果將會是$videos包含一個數組,其中每行包含擴展名,視頻質量以及該視頻版本的URL。