一尘不染

如何通过php获取网页的开放图谱协议?

php

PHP有一个简单的命令来获取网页的元标记(get_meta_tags),但这仅适用于具有名称属性的元标记。但是,开放图谱协议最近变得越来越流行。从网页获取opg值的最简单方法是什么。例如:

<meta property="og:url" content=""> 
<meta property="og:title" content=""> 
<meta property="og:description" content=""> 
<meta property="og:type" content="">

我看到的基本方法是通过cURL获取页面并使用正则表达式进行解析。任何的想法?


阅读 304

收藏
2020-05-29

共1个答案

一尘不染

从HTML解析数据时,您实际上不应该使用正则表达式。看一下DOMXPath
Query函数

现在,实际代码可能是:

[编辑] Stefan Gehrig为XPath提供了更好的查询,因此代码可以简化为:

libxml_use_internal_errors(true); // Yeah if you are so worried about using @ with warnings
$doc = new DomDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$query = '//*/meta[starts-with(@property, \'og:\')]';
$metas = $xpath->query($query);
$rmetas = array();
foreach ($metas as $meta) {
    $property = $meta->getAttribute('property');
    $content = $meta->getAttribute('content');
    $rmetas[$property] = $content;
}
var_dump($rmetas);

代替 :

$doc = new DomDocument();
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$query = '//*/meta';
$metas = $xpath->query($query);
$rmetas = array();
foreach ($metas as $meta) {
    $property = $meta->getAttribute('property');
    $content = $meta->getAttribute('content');
    if(!empty($property) && preg_match('#^og:#', $property)) {
        $rmetas[$property] = $content;
    }
}
var_dump($rmetas);
2020-05-29