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

Goo*_*bot 25 html php regex

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=""> 
Run Code Online (Sandbox Code Playgroud)

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

Gui*_*big 43

真的很简单,做得很好:

使用https://github.com/scottmac/opengph

$graph = OpenGraph::fetch('http://www.avessotv.com.br/bastidores-pantene-institute-experience-pg.html');
print_r($graph);
Run Code Online (Sandbox Code Playgroud)

将返回

OpenGraph对象

(
    [_values:OpenGraph:private] => Array
        (
            [type] => article
            [video] => http://www.avessotv.com.br/player/flowplayer/flowplayer-3.2.7.swf?config=%7B%27clip%27%3A%7B%27url%27%3A%27http%3A%2F%2Fwww.avessotv.com.br%2Fmedia%2Fprogramas%2Fpantene.flv%27%7D%7D
            [image] => /wp-content/thumbnails/9025.jpg
            [site_name] => Programa Avesso - Bastidores
            [title] => Bastidores “Pantene Institute Experience†P&G
            [url] => http://www.avessotv.com.br/bastidores-pantene-institute-experience-pg.html
            [description] => Confira os bastidores do Pantene Institute Experience, da Procter &#038; Gamble. www.pantene.com.br Mais imagens:
        )

    [_position:OpenGraph:private] => 0
)
Run Code Online (Sandbox Code Playgroud)

  • Github 用户 scottmac 似乎已经放弃了他的 OpenGraph 项目,但目前(2016 年初)有一个更新版本,其中包含修复程序,此处:https://github.com/AramZS/opengraph (2认同)

Tom*_*Tom 26

从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);
Run Code Online (Sandbox Code Playgroud)

代替 :

$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);
Run Code Online (Sandbox Code Playgroud)

  • 老兄,我们生活在一个不想要的世界里,到处都是不合适的html.在http://www.imdb.com/title/tt0120737/上查看您的代码 (3认同)