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

Суть задачи: есть xml, отдаваемый для Яндекс.Новости, необходимо из него получить содержимое тега <yandex:full-text> при помощи 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");
    }
}
?>

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

Ссылки

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

  • Помидор

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

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

  • Помидор

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

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

  • Скрипт был написан не для воровства контента, а для синхронизации новостей между проектов посредством RSS

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