Извлечение Open Graph метаданных в PHP
Open Graph — это протокол, разработанный для интеграции с социальными сетями, такими как VK и др. Он позволяет веб-странице описать себя с помощью метатегов, что способствует улучшению отображения ссылок на страницу в социальных сетях.
Этот код написан на PHP и предназначен для получения HTML-контента с заданного URL и парсинга Open Graph метаданных. Он извлекает og:* метатеги из HTML и возвращает их в виде массива.
Разбор кода
<?php
function parseOpenGraphMeta(string $html): array
{
libxml_use_internal_errors(true); // Отключаем вывод ошибок при парсинге HTML для предотвращения вывода ошибок на экран
$doc = new DomDocument();
$doc->loadHTML($html); // Загружаем HTML-контент для последующего парсинга
$xpath = new DOMXPath($doc); // Инициализируем XPath для поиска элементов в HTML-документе
$query = '//*/meta[starts-with(@property, \'og:\')]'; // XPath-запрос для поиска всех meta-тегов с атрибутом "property" начинающимся на "og:"
$metas = $xpath->query($query); // Выполняем XPath-запрос, который возвращает список элементов meta с og-тегами
$og_meta = [];
foreach ($metas as $meta) { // Перебираем найденные og-теги
$property = $meta->getAttribute('property'); // Извлекаем значение атрибута property
$content = $meta->getAttribute('content'); // Извлекаем значение атрибута content
$og_meta[$property] = $content; // Добавляем og-метаданные в ассоциативный массив, где ключ — это свойство, а значение — содержимое
}
return $og_meta; // Возвращаем массив og-метаданных
}
function httpGet(string $url): string
{
// Настройки запроса HTTP GET
$options = [
'http' => [
'method' => 'GET',
'header' => [
// Устанавливаем User-Agent, чтобы запрос выглядел как от браузера
'User-Agent: ' . ($_SERVER['HTTP_USER_AGENT'] ?? 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'),
'Accept: text/html', // Устанавливаем Accept-заголовок
],
]
];
$context = stream_context_create($options); // Создаем контекст для HTTP-запроса с заданными опциями
$response = @file_get_contents($url, false, $context); // Выполняем GET-запрос
if ($response === false) { // Обрабатываем возможные ошибки
$error = error_get_last();
throw new Exception($error['message']); // Генерируем исключение с сообщением об ошибке
}
return $response; // Возвращаем HTML-ответ
}
$url = 'https://myrusakov.ru'; // URL для запроса
$res = httpGet($url); // Получаем HTML-контент с URL
$meta = parseOpenGraphMeta($res); // Извлекаем og-метаданные
print_r($meta); // Выводим массив og-метаданных
?>
Разделение на функции
Этот код состоит из двух основных функций:
-
parseOpenGraphMeta: Эта функция выполняет разбор HTML-контента, который передается в виде строки, и использует XPath для поиска всех meta-тегов, атрибут property которых начинается с og:. Возвращаемый массив содержит все найденные Open Graph метаданные.
-
httpGet: Эта функция отправляет HTTP GET-запрос к заданному URL и возвращает содержимое страницы. Она настраивает заголовки запроса, чтобы имитировать браузер, обрабатывает возможные ошибки и генерирует исключения в случае неудачного запроса.
Принцип работы и использование
- Укажите URL страницы, из которой нужно получить метаданные Open Graph.
- Функция httpGet отправляет запрос и получает HTML-код страницы.
- parseOpenGraphMeta анализирует HTML-контент, используя XPath-запросы, и находит Open Graph метаданные.
- В конце скрипт выводит результат в виде ассоциативного массива, где ключи — это атрибуты og:property, а значения — их контент.
Пример результата
Результат будет выглядеть как ассоциативный массив:
Array
(
[og:title] => Title of the Page
[og:description] => Description of the page for social networks
[og:image] => https://example.com/image.jpg
...
)
Этот код полезен для автоматического извлечения Open Graph метаданных из веб-страниц. Его можно использовать для создания превью-ссылок, анализа контента или интеграции с социальными сетями.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.