2013-04-24 124 views
0

我想知道是否有方法從URL獲取網站的名稱。我知道你可以解析一個URL來獲得一個域名,但是由於網站名稱在代碼方面沒有標準化,所以我很懷疑。如何檢索網站名稱?

一個可以如何使用的例子是說我鏈接到紐約時報的一篇文章。我可以將文章標題鏈接到文章頁面。然後,我可能想要在文章標題旁邊顯示「紐約時報」。如果我能自動生成這將非常方便。

只是獲取頁面標題不會工作,因爲這通常會給你文章標題或,如果你要鏈接到其他類型的頁面,你可能會得到一些字符串,如「如何檢索網站名稱?堆棧溢出。」我只想獲得「堆棧溢出」部分。

任何想法?

+0

你可以嘗試獲取根文檔,例如標題'stackoverflow.com' – 2013-04-24 06:47:20

+0

所以你會解析從不同的主機'url'? – 2013-04-24 06:48:44

+0

你需要使用一個人。每個站點都有不同的表達方式,有些使用PHP無法讀取的圖像,有些使用元屬性,有些使用標題,無法通過腳本來確定。 – 2013-04-24 06:58:43

回答

0

您需要解析使用DOMDocument DOM樹:

<?php 
function GetTitle($url) 
{ 
    $dom = new DOMDocument; 
    @$dom->loadHTMLFile($url); // @ supresses warnings 

    // try to get meta application-name 
    foreach ($dom->getElementsByTagName("meta") as $meta) 
    { 
     $metaName = $meta->attributes->getNamedItem("name"); 
     if (strtolower($metaName->nodeValue) == "application-name") 
     { 
      $metaContent = $meta->attributes->getNamedItem("content"); 
      if ($metaContent != NULL) 
       return $metaContent->nodeValue; 
     } 
    } 

    // title fallback: 
    foreach ($dom->getElementsByTagName("title") as $title) 
     return $title->nodeValue; 

    return NULL; 
} 

print(GetTitle("http://www.nytimes.com/")); 
?> 

首先,GetTitle()尋找一個<meta name="application-name">標籤。如果找不到,它將回退並返回頁面標題。

此外,你應該傳遞基礎網址。 F.E.如果你有這樣的網址:http://stackoverflow.com/questions/16185145/how-to-retrieve-website-names/16185654#16185654,你應該使用parse_url剝奪一切,除了http://stackoverflow.com

$parsedUrl = parse_url($url); 
GetTitle($parsedUrl["scheme"] + "://" + $parsedUrl["host"]); 
+0

這看起來不錯。不過,我並不是最好的。我如何在'GetTitle($ url)'中包含'$ parsedUrl'? – 2013-04-25 00:42:43

+0

而且它也應該尋找''標籤? – 2013-04-25 03:03:26

+0

首先:代碼已經在答案中。第二:你可以這樣做,但我敢打賭,財產很少使用。 – 2013-04-25 04:36:09

0

如果你想解析URL,你可以試試這個功能:

$parsedUrl = parse_url($url); 
$host = $parsedUrl['host'] 
echo $host; 

這會給你一個關聯數組,其中host關鍵是你在找什麼。

參見:http://php.net/manual/en/function.parse-url.php

1

你可以嘗試申請-name屬性:

<meta name="application-name" content="The New York Times" /> 

<meta name="application-name" content="CNN"/> 

並非每個網站都會有這個,但你可以從這裏開始,檢查開圖形標籤(http://ogp.me)等

+0

如果更多的網站使用這個,它絕對是我的解決方案。我想知道採用率如何... – 2013-04-24 16:39:42

0

你調用「網站名稱」不是鏈接的一部分,它是該鏈接返回的HTML代碼的一部分。

如果您想獲取網站標題,您應該使用CURL檢索鏈接內容,然後解析返回的HTML以獲取該部分中標記的內容。

可能這會比你能得到的好處更加昂貴。