Верх страницы
Обложка к записи Как распарсить <yandex:full-text>
Время для прочтения: 0 мин. 1 сек.

Как распарсить <yandex:full-text>

Суть задачи: есть xml, отдаваемый для Яндекс.Новости, необходимо из него получить содержимое тега при помощи SimpleXML. Трудность возникает из-за использования в данном случае пространства имен (namespace).

Решение, на самом деле, простое, главное хорошо прочитать мануал:


<?php
// Создать контекст и получить XML с сайта
$path = 'http://inforos.ru/yandex.xml';
$ctx = stream_context_create( array(
	'http' => array( 'timeout' => 6 )
) );
$file = file_get_contents( $path, 0, $ctx );
if ( $file ) {
    // Распарсить полученный XML
    $rss = simplexml_load_string( $file );
    foreach ( $rss->channel->item as $item ){
        $namespaces = $item->getNameSpaces( true );
        $yandex = $item->children( $namespaces[ 'yandex' ] );
        $full_text = (string) $yandex->{'full-text'};
        echo ( $full_text );
        echo ( "\n\n<hr />\n\n" );
    }
}
?>

Пример можно посмотреть у меня в песочнице.

Ссылки

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, Opencart, DLE, Laravel, Moonshine, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

7 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
12 лет назад

Как правило, самое главное в этом деле — синомизировать текст. В противном случае мы просто увеличиваем вес тому же Яндексу

Помидор
Помидор
9 лет назад

Приветствую.
А подскажите, можно ли адаптировать под яндекс формат плагин-агрегатор FeedWordPress?
Плагин прекрасно понимает стандартный RSS, но отказывается принимать фид для новостей Яндекс, в частности полный текст там заключен в тег

mihdan
9 лет назад
Ответить на  Помидор

Само собой можно, в чем у вас возникла проблема?

Помидор
Помидор
9 лет назад

FeedWordPress позволяет публиковать материалы из указанного RSS-фида стороннего сайта. И если в фиде есть полный текст, то парсится он, если нет, то только описание с заголовком. А сегодня многие новостные сайты используют нестандартные форматы, заточенные под агрегатор Яндекс.новостей (например svopi.ru/rss.xml), где полный текст размещен в блоке , который не стандартен для RSS и, соответственно, не виден. Нашел решение авторов по созданию кастомного шаблона (http://codex.wordpress.org/Customizing_Feeds), но сам в PHP вообще не соображаю. Может подскажете, куда этот кусок кода вставлять?

mihdan
9 лет назад
Ответить на  Помидор

Очевидно, что внутри плагина FeedWordPress. Покажите ваши попытки, например, на codepen, github

Помидор
Помидор
9 лет назад
Ответить на  mihdan

Автор пишет (http://codex.wordpress.org/Customizing_Feeds), что можно создать свой шаблон используя remove_all_actions и load_template, расширив существующий шаблон для RSS2.

Тут (https://github.com/WordPress/WordPress/blob/master/wp-includes/feed-rss2.php) я нашел шаблон РСС2, можете подсказать, что туда добавить, чтобы парсер понимал ?

Предыдущая запись

Давайте дружить
в Телеграме

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы