通过file_get_contents和preg_match获取og:image

时间:2013-07-20 22:59:27

标签: php preg-match metadata opengraph file-get-contents

我正在使用file_get_contents从任何网址获取og:image。

$fooURL = file_get_contents($URLVF['url']);


然后我过滤property = og:image以从页面获取图像,下面的代码与大多数网站一起使用

preg_match("/content='(.*?)' property='og:image'/", $fooURL, $fooImage);


但像www.howcast.com这样的网站有og:image的不同代码,如下所示

<meta content='http://attachments-mothership-production.s3.amazonaws.com/images/main-avatar.jpeg' property='og:image'>


为了得到上面代码的图像链接,我需要preg_match就像这样

preg_match('/property="og:image" content="(.*?)"/', $fooURL, $fooImage);


但是,当然如果我现在使用上面的代码,那么唯一可以使用的网站是howcast,其他网站都不会返回任何内容

任何想法如何使代码可以使用任何类型的方法编写元代码或任何其他方式来平滑地获取图像链接

1 个答案:

答案 0 :(得分:2)

使用DOMDocument和XPath作为@str的示例建议:

$html = <<<LOD
<html><head>
<meta content='http://attachments-mothership-production.s3.amazonaws.com/images/main-avatar.jpeg' property='og:image'>
</head><body></body></html>
LOD;

$doc = new DOMDocument();
@$doc->loadHTML($html);
// or @$doc->loadHTMLFile($URLVF['url']);
$xpath = new DOMXPath($doc);
$metaContentAttributeNodes = $xpath->query("/html/head/meta[@property='og:image']/@content");
foreach($metaContentAttributeNodes as $metaContentAttributeNode) {
    echo $metaContentAttributeNode->nodeValue . "<br/>";
}