Вот код, который я использую на данный момент
$file = array_rand($files);
$filename = "http://example.com/".$files[$file];
echo $filename;
libxml_use_internal_errors(true);
$c = file_get_contents($filename);
$d = new DomDocument();
$d->loadHTML($c);
$xp = new domxpath($d);
foreach ($xp->query("//meta[@name='og:title']") as $el) {
echo $el->getAttribute("content");
}
foreach ($xp->query("//meta[@name='og:image']") as $el) {
echo $el->getAttribute("content");
}
$ filename имеет правильное значение URL, но не отображает содержимое og: image и og: title?
РЕДАКТИРОВАТЬ
Это типичная организация моих веб-страниц
<?php require_once("headertop.php")?>
<meta property="og:image" content="url" />
<meta property="og:title" content="content here." />
<meta property="og:description" content="description here." />
<title>Page title</title>
<?php require_once("headerbottom.php")?>
РЕДАКТИРОВАТЬ 2
From one answer I understood this. I have to use
$rootNamespace = $d->lookupNamespaceUri($d->namespaceURI);
$xpath->registerNamespace('og', $rootNamespace);
а затем использовать
<meta property="og:image" content="url" />
Я прав?
Это должно работать просто отлично:
<?php
$html = new DOMDocument();
@$html->loadHTML(file_get_contents('http://www.imdb.com/title/tt0117500/'));
foreach($html->getElementsByTagName('meta') as $meta) {
if(strpos($meta->getAttribute('property'), 'og') !==false) {
echo $meta->getAttribute('content') . '<br/>';
}
}
?>
«ОГ» является Пространство имен, и таким образом это не собирается тянуться таким способом. Вам нужно определить это пространство имен для вашего объекта DOMXPath:
http://php.net/manual/en/domxpath.registernamespace.php
Изменить: Вот пример, который я создал вместе, используя домашнюю страницу VICE. Я вытащил пространство имен Facebook OpenGraph XML со своего сайта разработчиков.
<?php
error_reporting(E_ERROR);
$html = file_get_contents("http://www.vice.com/");
$doc = new DomDocument();
$doc->loadHTML($html);
$xp = new DOMXPath($doc);
$xp->registerNamespace('og', 'http://ogp.me/ns#');
print_r($xp->query("//meta[@name='og:title']")->item(0)->getAttribute('content'));