2010-02-16 24 views
0

如何從給定的blogspot.com網址獲取blogid? 我看着從它看起來像這樣使用Regex從PHP中的Blogspot.com解析BlogId

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.blogger.com/rsd.g?blogID=4899870735344410268" /> 

一個blogspot.com網頁的源代碼,我怎麼能分析該獲得數4899870735344410268

回答

2

使用DOMDocument解析文檔和然後使用它的方法來檢索想要的元素。

我無法強調這一點:從不使用正則表達式來解析HTML文檔。

function getBlogId($url) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    $page = curl_exec ($ch); 
    curl_close($ch); 

    $doc = new DOMDocument(); 
    @$doc->loadHTML($page); 

    $links = $doc->getElementsByTagName('link'); 

    foreach($links as $link) { 
    $rel = $link->attributes->getNamedItem('rel'); 

    if($rel && $rel->nodeValue == 'EditURI') { 
     $href = $link->attributes->getNamedItem('href')->nodeValue; 
     $query = parse_url($href, PHP_URL_QUERY); 

     if($query) { 
     $queryComp = array(); 
     parse_str($query, $queryComp); 

     if($queryComp['blogID']) { 
      return $queryComp['blogID']; 
     } 
     } 
    } 
    } 

    return false; 
} 

使用例:

$id = getBlogId('http://thehouseinmarrakesh.blogspot.com/'); 
echo $id; // 483911541311389592 
+0

好吧,這也將是很好,謝謝 – streetparade 2010-02-16 19:21:45

+0

好吧即時通訊等待你的例子:-) – streetparade 2010-02-16 19:25:05

+0

@streetparade:這個例子已經結束。 – 2010-02-16 19:28:43

0
$pageContents = file_get_contents('blospot_url'); 
preg_match('~<link rel="EditURI" type="application/rsd\+xml" title="RSD" href="http://www.blogger.com/rsd.g\?blogID=([0-9]+)" />~', $pageContents, $matches); 
echo $matches[1]; 
+2

-1:不要使用'的file_get_contents()'用URL。出於安全原因,「allow_url_fopen」推薦的設置處於關閉狀態。建議最佳實踐保持這種方式。 http://phpsec.org/projects/phpsecinfo/tests/allow_url_fopen.html – 2010-02-16 19:22:23

+2

此外,不要使用正則表達式解析HTML文檔。 – 2010-02-16 19:27:50

+0

我知道關於file_get_contents()。用它來簡化。 爲什麼不正則表達式? HTML可能是一團糟,甚至DOMDocument有時也無法處理它。 – 2010-02-16 19:50:21