2013-04-24 65 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以获取该部分中标记的内容。

可能这会比你能得到的好处更加昂贵。