Верх страницы
Обложка к записи Как распарсить <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, Symfony, SuiteCRM.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Помидор
Помидор
10 лет назад
Ответить на  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

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