从外部网站获取标题和元标记

2022-08-30 08:59:28

我想尝试弄清楚如何获得

<title>A common title</title>
<meta name="keywords" content="Keywords blabla" />
<meta name="description" content="This is the description" />

即使它按任何顺序排列,我也听说过PHP Simple HTML DOM Parser,但我真的不想使用它。除了使用 PHP Simple HTML DOM Parser 之外,是否有可能的解决方案。

preg_match如果它是无效的HTML,将无法做到这一点?

cURL可以用preg_match做这样的事情吗?

Facebook做了类似的事情,但它通过使用以下方法正确使用:

<meta property="og:description" content="Description blabla" />

我想要这样的东西,这样当有人发布链接时,它应该检索标题和元标记。如果没有元标记,那么它就会被忽略,或者用户可以自己设置它(但我稍后会自己设置)。


答案 1

这是它应该的方式:

function file_get_contents_curl($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

$html = file_get_contents_curl("http://example.com/");

//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');

//get and display what you need:
$title = $nodes->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
    $meta = $metas->item($i);
    if($meta->getAttribute('name') == 'description')
        $description = $meta->getAttribute('content');
    if($meta->getAttribute('name') == 'keywords')
        $keywords = $meta->getAttribute('content');
}

echo "Title: $title". '<br/><br/>';
echo "Description: $description". '<br/><br/>';
echo "Keywords: $keywords";

答案 2
<?php
// Assuming the above tags are at www.example.com
$tags = get_meta_tags('http://www.example.com/');

// Notice how the keys are all lowercase now, and
// how . was replaced by _ in the key.
echo $tags['author'];       // name
echo $tags['keywords'];     // php documentation
echo $tags['description'];  // a php manual
echo $tags['geo_position']; // 49.33;-86.59
?>

推荐