Экспортный файл для яндекс новостей

Для сайтов, публикующих новости, часто бывает необходимо создать экспортный файл для Яндекс новостей.

Делал ли кто-нибудь что-либо подобное для сайта на livestreet? Поделитесь опытом, пожалуйста — как сделать это вручную, ибо модуля не нашёл.

Может кто-нибудь даже напишет такой модуль… — он был бы полезен очень и очень многим!!!

Такие модули есть для Джумлы, Водрпресс, Друпал, ИнстантСМС и мн.др. СМС. Но для Ливстрит такового не нашёл.

Как я понимаю, Яндекс новости требуют немного переделанный под них RSS в формате xml, который надо положить в корневую директорию, например, а потом выслать им ссылку на него (пример: site.ru/yarss.xml). Весь вопрос в том, как это сделать и с чего начать.

С этого момента чуть подробнее — привожу выдержку из письма(я послал ссылку на свой обычный rss, как то site.ru/rss, мне ответили следующее):

«Кроме стандартных элементов RSS 2.0, для экспорта Данных используется специальный элемент <yandex:full-text>, который должен содержать полный текст сообщения. Этот элемент является обязательным. Полный текст сообщения необходим для индексирования поисковым роботом, корректной кластеризации и поиска. На страницах Яндекс.Новостей он размещаться не будет. В полном тексте не должны содержаться: название источника, дата и время сообщения, ФИО автора, а также контактная информация и любая другая информация, которая повторяется в каждом сообщении.

Просим Вас включить Ваш логотип в экспортный файл, как это указано в „Тех.требованиях“:
»В Яндекс.Новостях также используется входящий в элемент , который должен
содержать ссылку на графический файл с изображением логотипа издания. Эта ссылка дается во
вложенном элементе , название (будет написано в html-атрибуте alt) – в (необходимо
еще раз повторить название издания), URL издания – в . Логотип должен быть в формате .gif,
без анимации. Размер логотипа – 100 пикселей по максимальной стороне".

Вот какие требования они ещё предъявляют:

Сам файл с техническими требованиями в формате PDF можно посмотреть/скачать здесь

Пример экспортного файла находится здесь — расширение odt, но программа ворд открывает его легко. Или здесь в расширении docx.

25 комментариев

avatar
Помогите создать плз.
avatar
Позабавила фраза:
он был бы полезен очень и очень многим!!!
если бы он так был бы интересен сообществу, то уже был бы в каталоге.
avatar
Это ваше мнение.

Моё мнение — попадание в ленту яндекс новостей даёт неплохие возможности, но не все об этом знают.

А то, что был бы полезен — не был бы полезен, не делали бы соответствующие модули для широкого перечня различных CMS
avatar
ваш скрипт по ссылке «ИнстантСМС» вроде как универсален, ему следует лишь скормить адрес рсс-канала и все
  • xyz
  • 0
avatar
В принципе да, буду пытаться.
avatar
Не получается. И дело, я думаю, в этой строке:

003 $feedURL = «site.ru/rss/content/2/feed.rss»;

Вряд ли у всех этот адрес одинаков…

Вот полный текст скрипта:

<?php

$feedURL = "http://newsstreet.ru/rss/content/2/feed.rss";

$channelTitle = "Новости, авторские переводы статей иностранной зарубежной прессы, обзоры иностранных зарубежных СМИ, 
личные и тематические блоги, комментарии, обсуждения, аналитика, новостной форум";
$channelDescription = "Новости, авторские переводы статей иностранной зарубежной прессы, обзоры иностранных зарубежных СМИ, 
личные и тематические блоги, комментарии, обсуждения, аналитика, новостной форум";
$channelImage = 'http://newsstreet.ru/site.gif';

$feed = file_get_contents($feedURL);

$dom = new domDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($feed);
if (!$dom)
{
    echo "Error parsing original feed\n";
    exit;
}

$rss = $dom->getElementsByTagName('rss')->item(0);
$channel = $rss->getElementsByTagName('channel')->item(0);
$title = $channel->getElementsByTagName('title')->item(0);
if ($title->hasChildNodes()) { $title->removeChild($title->firstChild); }
$title->appendChild(new DOMText($channelTitle));

$description = $channel->getElementsByTagName('description')->item(0);
if ($description->hasChildNodes()) { $description->removeChild($description->firstChild); }
$description->appendChild(new DOMText($channelDescription));

$firstItem = $channel->getElementsByTagName('item')->item(0);

$image = $dom->createElement('image');
$imageUrl = $dom->createElement('url');
$imageUrl->appendChild(new DOMText($channelImage));
$imageAlt = $dom->createElement('title');
$imageAlt->appendChild(new DOMText($channelTitle));
$imageLink = $dom->createElement('link');
$imageLink->appendChild(new DOMText($feedURL));
$image->appendChild($imageUrl);
$image->appendChild($imageAlt);
$image->appendChild($imageLink);
$channel->insertBefore($image, $firstItem);

$toDelete = array();
$items = $channel->getElementsByTagName('item');
for ($i = 0; $i < $items->length; $i++)
{
    $item = $items->item($i);

    $date = $item->getElementsByTagName('pubDate')->item(0)->textContent;
    $timediff = time() - strtotime($date);
    if ($timediff > 60*60*24*8)
    {
        $toDelete[] = $item;
    }
    else
    {
        $link = $item->getElementsByTagName('link')->item(0);
        $pdalink = $dom->createElement('pdalink');
        $pdalink->appendChild(new DOMText($link->textContent));
        $item->insertBefore($pdalink, $link);

        $item->removeChild($item->getElementsByTagName('category')->item(0));
        $item->removeChild($item->getElementsByTagName('author')->item(0));


        $pageContent = file_get_contents($link->textContent);

        if (preg_match("/class=\"con_text\"/", $pageContent, $matches, PREG_OFFSET_CAPTURE))
        {
            if (preg_match("/<p/", $pageContent, $matches, PREG_OFFSET_CAPTURE, $matches[0][1]))
            {
                $h3Found = preg_match("/<h3>Похожие статьи:/", $pageContent, $h3matches, PREG_OFFSET_CAPTURE, $matches[0][1]);
                $divendFound = preg_match("/\/div/", $pageContent, $divendmatches, PREG_OFFSET_CAPTURE, $matches[0][1]);
                if ($h3Found)
                {
                    $end = min($h3matches[0][1], $divendmatches[0][1]);
                }
                else
                {
                    $end = $divendmatches[0][1];
                }

                $fulltext = iconv('cp1251', 'utf8', strip_tags(substr($pageContent, $matches[0][1], $end - $matches[0][1])));
                #$fulltext = html_entity_decode($fulltext);

                $fulltexttag = $dom->createElement('yandex:full-text');
                $fulltexttag->appendChild(new DOMText($fulltext));
                $item->appendChild($fulltexttag);

#            print "==================\n";
#            print $fulltext;
#            print "==================\n";
#            break;
            }
        }
    }
}

foreach ($toDelete as $item)
{
    $channel->removeChild($item);
}

$dom->encoding = 'utf-8';
$yarss = $dom->saveXML();
file_put_contents('yarss.xml', $yarss);

 echo "Всё ок"?>
avatar
Вот на этой странице — оригинал/образец скрипта.
avatar
вы так и не нашли решения? У меня тоже ничего не вышло.
avatar
Нет, не нашёл. И даже не знаю, с какой стороны подступиться…

Зато для всех известных СМS есть такие модули, кроме Livestreet…
avatar
Livestreet — это не CMS
avatar
CMS — система управления контентом (содержимым). Так что Ливстрит в т.ч. и CMS
avatar
вынужден констатировать, что ты не понимаешь, что такое CMS
avatar
LiveStreet — это CMS.
avatar
С тем же успехом можно называть CMS какой-нибудь форум. Сравни содержимое русскойзычной и англоязычной статьи и заодно убедись в своей неправоте и вопиющей неграмотности русскоязычных вики-авторов. Очередной пример того, почему в приличном обществе всегда было стыдно в качестве аргумента давать ссылку на русскую вики.

У систем управления содержимым есть ряд признаков и возможностей, которыми ЛС на данный момент не обладает.
avatar
Ну если WordPress и Joomla — CMS, то и Ливстрит тоже.

А по поводу расширенных возможностей — так для этого модули и плагины есть.

В англоязычной википедии нет ливстрит, зато есть джумла и вордпресс. Так по-вашей логике они тоже не CMS, наверное.

ПРосто вики англ. не знает ливстрит. Но можно внести правку в Википедию.
avatar
Упоминание в статье конкретных продуктов не является необходимым условием для признания их относящимися к определённому типу программ. Классификация осуществляется по функциональным признакам: если они присутствуют в продукте, значит он относится к CMS. Не присутствуют — не относится.

В частности, в Livestreet не реализованы документооборот и ролевой доступ, что не позволяет называть наш любимый движок CMS.

Тем не менее, Максим назвал сайт livestreetcms не потому, что LS в данный момент является системой управления контентом а из соображений установить определённую цель, к которой стремится разработка продукта.
avatar
Может в Joomla есть документооборот? Или в WordPress?
avatar
есть и там и там
avatar
Конечно, все вокруг дебилы. И тот кто назвал этот сайт, видимо:



У систем управления содержимым есть ряд признаков и возможностей

Может, хватит уже? ЛС позволяет управлять содержимым контента html-страниц, которые видит пользователь? Позволяет! Значит, это CMS. Всё меняется, CMS — не исключение. Кто знает, какие они будут через десять лет, но функция останется прежней — управление содержимым веб-страниц.
avatar
У термина CMS есть вполне определённое значение, которое значительно шире, чем простое редактирование страниц. Никого не собираюсь переубеждать, хочешь быть неграмотным — будь им.
avatar
топики создавать/редактировать позволяет? позволяет. топик = контент. что-то не так, нет? про документооборот и ролевой доступ, посмеялся. CMS имеет ввиду управление любым контентом, а не все эти ваши роли, документы, медиа-контент и прочую периферию.
avatar
Есть общепринятый термин со своим определённым значением. Можно называть CMS хоть форумы, хоть чаты с интернет-магазинами — объективно значение термина от этого не поменяется, как бы тебе этого не хотелось.

Неправильное употребление этого термина — распространённая ошибка, также, как употребление слов «портал», «стартап» и других.
avatar
как бы тебе этого не хотелось.
мне это не хотелось и не нужно. выяснять каким наборов букв называть движок, это сильно… «завидую», что вы такой грамотный
avatar
Кто-нибудь хочет высказаться по существу вопроса?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.