我正在尝试从提供的网址中提取各种数据,包括描述元信息:
$tags = get_meta_tags($_POST['url']);
echo $tags['description'];
这适用于某些网站,但不是全部。例如,如果我尝试http://twitter.com我什么都没得到,但谷歌搜索(或在Facebook中输入网址)会显示以下文字: -
即时连接到您最重要的内容。关注你的朋友,专家,最喜欢的名人和突发新闻。
这个文字在twitter页面的源代码中不存在 - 这是来自何处,我将如何掌握它?同样,我的代码也不会为http://bbc.com返回任何内容。
答案 0 :(得分:1)
很抱歉,但问题的前提是错误的:
这个文字在推特页面的来源中不存在
是的确如此:
<meta name="description" content="Instantly connect to what'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'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
标题的请求来模拟一个真实的浏览器。