Как получить Open Graph Protocol веб-страницы по php?

PHP имеет простую команду для получения метатегов веб-страницы (get_meta_tags), но это работает только для метатег с атрибутами имени. Тем не менее, Open Graph Protocol становится все более популярным в наши дни. Каков самый простой способ получить значения opg с веб-страницы. Например:

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

Основной способ, который я вижу, – получить страницу через cURL и проанализировать ее с помощью регулярного выражения. Есть идеи?

При анализе данных из HTML вам не следует использовать регулярное выражение. Взгляните на функцию запроса DOMXPath Query .

Теперь фактический код может быть:

[EDIT] Лучший запрос для 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); 

На самом деле просто и хорошо сделано:

Использование https://github.com/scottmac/opengraph

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

Вернется

Объект 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 ) 

Как насчет:

 preg_match_all('~<\s*meta\s+property="(og:[^"]+)"\s+content="([^"]*)~i', $str, $matches); 

Итак, да, возьмите страницу любым способом и проанализируйте с помощью регулярного выражения

В соответствии с этим методом вы получите массив ключей пары открываемых графических меток fabcebook.

  $url="http://fbcpictures.in"; $site_html= file_get_contents($url); $matches=null; preg_match_all('~<\s*meta\s+property="(og:[^"]+)"\s+content="([^"]*)~i', $site_html,$matches); $ogtags=array(); for($i=0;$i<count($matches[1]);$i++) { $ogtags[$matches[1][$i]]=$matches[2][$i]; } 

Вывод графических меток facebook

Чем больше XML ish-способом будет использовать XPath:

 $xml = simplexml_load_file('http://ogp.me/'); $xml->registerXPathNamespace('h', 'http://www.w3.org/1999/xhtml'); $result = array(); foreach ($xml->xpath('//h:meta[starts-with(@property, \'og:\')]') as $meta) { $result[(string)$meta['property']] = (string)$meta['content']; } print_r($result); 

К сожалению, регистрация пространства имен необходима, если документ HTML использует объявление пространства имен в <html> -tag.