2013-09-26 94 views
0

我想獲取Youtube URL的視頻ID,但通常URL在共享時會壓縮爲Tiny URL。獲取一個Tiny URL的真實URL並將其作爲PHP變量存儲

例如,我有一個腳本,系統會根據它的視頻ID Youtube視頻的縮略圖=

<?php $vlog = "OeqlkEymQ94"; ?> 
<img src="http://img.youtube.com/vi/<?=$vlog;?>/0.jpg" alt="" /> 

這是很容易得到,當我從提取的URL是

http://www.youtube.com/watch?v=OeqlkEymQ94 

但有時URL是一個微小的URL,所以我必須弄清楚如何返回真實的URL,以便我可以使用它。

http://tinyurl.com/kmx9zt6 

是否可以通過PHP來檢索URL的真實URL?

+3

你可以使用'CURLOPT_FOLLOWLOCATION = TRUE'的CURL,然後解析響應頭。 – Mark

+0

@Marcel,將其設置爲true將使cURL自動跟隨該重定向,並且只傳遞最終結果 - 它應該是false,以便獲得第一個請求的結果,該結果將包含響應中的位置標頭... – CBroe

+0

的確如此,但有人可能會爭論這是否是通緝令。對我來說,你會想要跟隨所有的重定向,就像瀏覽器一樣。雖然我看到你的觀點。 – Mark

回答

1

你可以使用get_headers()cURLLocation頭:

function getFullURL($url) { 
    $headers = get_headers($url); 
    $headers = array_reverse($headers); 
    foreach($headers as $header) { 
     if (strpos($header, 'Location: ') === FALSE) { 
      $url = str_replace('Location: ', '', $header); 
      break; 
     } 
    }  
    return $url; 
} 

用法:

echo getFullURL('http://tinyurl.com/kmx9zt6'); 

注:這是要點here略加修改的版本。

0

以供將來參考,我用了一個簡單得多的功能,因爲我的小網址的人始終要解決,以Youtube和標題幾乎都是一樣的:

function getFullURL($url) { 
    $headers = get_headers($url); 
    $url = $headers[4]; //This is the location part of the array 
    $url = str_replace('Location: ', '', $url); 
    $url = str_replace('location: ', '', $url); //in my case the location was lowercase, but it can't hurt to have both 
    return $url; 
} 

用法 -

echo getFullURL('http://tinyurl.com/kmx9zt6'); 
相關問題