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 & 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]; }
Чем больше 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.