获取网站说明

时间:2013-05-22 20:59:18

标签: php

我正在尝试从提供的网址中提取各种数据,包括描述元信息:

$tags = get_meta_tags($_POST['url']);
echo $tags['description'];

这适用于某些网站,但不是全部。例如,如果我尝试http://twitter.com我什么都没得到,但谷歌搜索(或在Facebook中输入网址)会显示以下文字: -

  

即时连接到您最重要的内容。关注你的朋友,专家,最喜欢的名人和突发新闻。

这个文字在twitter页面的源代码中不存在 - 这是来自何处,我将如何掌握它?同样,我的代码也不会为http://bbc.com返回任何内容。

2 个答案:

答案 0 :(得分:1)

很抱歉,但问题的前提是错误的:

  

这个文字在推特页面的来源中不存在

是的确如此:

<meta name="description" content="Instantly connect to what&#39;s most important to you. Follow your friends, experts, favorite celebrities, and breaking news.">`
     

- twitter.com

var_dump(get_meta_tags("http://twitter.com"));

array(4) {
  ["description"]=>
  string(125) "Instantly connect to what&#39;s most important to you. Follow your friends, experts, favorite celebrities, and breaking news."
  ["msapplication-tileimage"]=>
  string(42) "//abs.twimg.com/favicons/win8-tile-144.png"
  ["msapplication-tilecolor"]=>
  string(7) "#00aced"
  ["swift-page-name"]=>
  string(5) "front"
}

答案 1 :(得分:1)

我认为您的托管服务器的IP不在任何GeoIP数据库中。

我只是把这段代码鞭打在一起:

function get_meta_tags_from_path($path)
{
    $tags = array();
    $source = file_get_contents($path);
    $count = preg_match_all(
        "|<meta[^>]+name=\"([^\"]*)\"[^>]" . "+content=\"([^\"]*)|i",
        $source, $matches, PREG_PATTERN_ORDER);
    for($i = 0; $i < $count; $i++)
        $tags[$matches[1][$i]] = $matches[2][$i];
    return $tags;
}

$tags = get_meta_tags_from_path('https://twitter.com/'));
$description = $tags['description'];

它正常,demonstrated here HOWEVER ,您还可以看到它显示荷兰元描述,因为服务器位于荷兰,位于已知的荷兰IP上。很可能是Twitter,如果无法通过Accept-language标签或GeoIP确定访问者的可能区域设置,则不会尝试提供本地化内容。在你的托管计算机上你运气不好,除非你使用cURL来提出一个包含正确Accept标题的请求来模拟一个真实的浏览器。