Тема: экспорт новостей для яндекса

кто-нибудь знает как переделать rss шаблон, чтобы он устраивал требованиям яндекса, заранее спасибо

2

Re: экспорт новостей для яндекса

Читайте, пожалуйста, правила

  • 2.3. В теле сообщения (подпись и заголовок не являются телом сообщения!) должна быть указана версия скрипта: CuteNews.RU 2.5, Strawberry 1.1. и тип базы: textSQL, MySQL. Каждая версия имеет различия и при ответе это учитывается.
  • Признанный мастер чинпоко, а-ай ^_^

    Re: экспорт новостей для яндекса

    Strawberry 1.0.2 , думаю как организовать rss ленту для яндекса, чтобы не в ручную писать, а чтобы движок генерировал, подскажите?

    Re: экспорт новостей для яндекса

    Вощем я сам нашел способ. Может кому пригодиться. Чтобы сгенерировать rss для экспорта в яндекс новости, делаем следуещее
    слегка переписываем rss.php вот так

    <?php
    /**
     * @package Show
     * @access private
     */
    
    include_once 'head.php';
    
    add_filter('news-allow-commentform', 'comment_form');
    
    function comment_form(){return false;}
    
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="'.$echo['charset'].'" ?>';
    ?>
    
    <rss version="2.0" xmlns="http://backend.userland.com/rss2"
    xmlns:yandex="http://news.yandex.ru">
    <channel>
    
    <?
    if (!$id){
    ?>
    
    
    <title><?=$config['home_title']; ?></title>
    <link><?=$config['http_home_url']; ?></link>
    <description><?=$config['home_title']; ?></description>
    <image>
    <url>http://www.vip-rm.info/logo.gif</url>
    <title>Ваш заголоовк</title>
    <link>http://www.yoursite.com</link>
    </image>
    
    
    <?
    }
    ?>
    
    
    
    <?
    $template = 'rss';
    $number = 12;
    include $cutepath.'/show_news.php';
    ?>
    
    </channel>
    </rss>

    затем data/tpl/rss.tpl или в настройках подправляем шаблон rss таким образом

    <?php
    ///////////////////// TEMPLATE rss /////////////////////
    
    
    $template_active = '<item>
    <title>{title}</title>
    <link>{link=home/post}</link>
    <description>{short-story}</description>
    <pubDate>{date=r}</pubDate>
    <yandex:full-text>{full-story}</yandex:full-text>
    
    
    </item>';
    
    $template_full = '<title><![CDATA[{title}]]></title>
    <link>{link=home/post}</link>
    <description><![CDATA[{short-story}]]></description>';
    
    $template_comment = '<item>
    <author><![CDATA[{author}]]></author>
    <link>{link}#comment{comnum}</link>
    <description><![CDATA[{comment}]]></description>
    <pubDate>{date=r}</pubDate>
    </item>';
    
    $template_form = '';
    
    $template_prev_next = '';
    
    $template_cprev_next = '';
    
    $template_dateheader = '';
    
    
    ///////////////////// TEMPLATE rss /////////////////////
    ?>

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

    5

    Re: экспорт новостей для яндекса

    Нада использовать тег code.

    6

    Re: экспорт новостей для яндекса

    Хорошее решение, но я бы предложил не заменять стандартный rss.php и шаблон rss, а копировать как yarss.php и yarss - шаблон. А в urls.ini прописать для них правила.

    P.S. Ибо всё же rss.php следует заменять при апгрейде.

    Признанный мастер чинпоко, а-ай ^_^

    Re: экспорт новостей для яндекса

    согласен, не подумал сразу
    есть еще вопросик, а для чего необходим тег code?

    Re: экспорт новостей для яндекса

    А для других версий Cutenews и Strawberry это будет работать? Может тогда включить его в следующую версию?

    Re: экспорт новостей для яндекса

    вот файлы для 1.1.1
    rss.php

    <?php
    /**
     * @package Show
     * @access private
     */
    
    include_once 'head.php';
    
    // убирает форму
    add_filter('allow-comment-form', 'comment_form');
    
    function comment_form(){return false;}
    
    // запрещаем менять шаблон кроме как через переменную $template
    add_filter('unset-template', 'unset_template');
    
    function unset_template($files){
    
        $files[] = basename($_SERVER['PHP_SELF']);
    
    return $files;
    }
    
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="'.$config['charset'].'" ?>';
    ?>
    
    <rss version="2.0"
    xmlns="http://backend.userland.com/rss2"
    xmlns:yandex="http://news.yandex.ru"
    >
    <channel>
    <title>Голос Мордовии</title>
    <link>http://www.golos.vip-rm.info/</link>
    <description>Еженедельное аналитическое обозрение республики Мордовия.</description>
    <image>
    <url>http://www.vip-rm.info/logo.gif</url>
    <title>Голос Мордовии</title>
    <link>http://www.golos.vip-rm.info/</link>
    </image>
    
    
    <? if (!$id){ ?>
    <title><?=$config['home_title']; ?></title>
    <link><?=$config['http_home_url']; ?></link>
    <description><?=$config['home_title']; ?></description>
    <? } ?>
    <language>ru</language>
    <generator><?=$config['version_name'].' '.$config['version_id']; ?></generator>
    
    <?
    $template = 'RSS';
    $number = ($number ? $number : 12);
    $config['cnumber'] = 0;
    include root_directory.'/show_news.php';
    ?>
    
    </channel>
    </rss>

    а это active.tpl

    <item>
    <title><?=htmlspecialchars($tpl['post']['title']); ?></title>
    <description><?=htmlspecialchars($tpl['post']['short-story']); ?></description>
    <link><?=htmlspecialchars($tpl['post']['link']['post']); ?></link>
    <pubDate><?=date('r', $tpl['post']['_']['date']); ?></pubDate> 
     <yandex:full-text><?=htmlspecialchars($tpl['post']['full-story']); ?></yandex:full-text>
    
    <? if ($tpl['post']['category']['name']){ ?>
    <? foreach (explode(',', $tpl['post']['_']['category']) as $cat){ ?>
    <category><?=htmlspecialchars($categories[$cat]['name']); ?></category>
    <? } ?>
    <? } ?>
    </item>

    (меняем в админке в настройках шаблон rss краткая новость
    название сайта от балды)
    работает здесь http://news.vip-rm.info    http://vip-rm.info/news.xml  так выглядит в результате сам файл
    вообще, очень удобно, набрал новость и через 15 мин на яндексе, раньше экспортный файл писал вручную

    Отредактировано ara (30 Aug 2006 13:26:32)

    10

    Re: экспорт новостей для яндекса

    ara, напоминаю, для чего нужен тег code:

    Читайте, пожалуйста, правила

  • 2.4. Используйте тег CODE при оформлении кода.
  • Re: экспорт новостей для яндекса

    прошу прощения, исправляюсь

    12

    Re: экспорт новостей для яндекса

    Можно ли добавить, чтобы работал тег <enclosure>?
    Получается, что код для вставки рисунков стоит в теле сообщения. Как автоматически распознать путь и поставить его в <enclosure>?
    Strawberry версии 1.1.1

    Re: экспорт новостей для яндекса

    Получается, что код для вставки рисунков стоит в теле сообщения. Как автоматически распознать путь и поставить его в <enclosure>?

    Писать регулярное выражение.

    Есть такая штука как IceStrawberry 1.04 b. Можете юзать на свой страх и риск... или слямзить что-то. Мне фиолетово.

    14

    Re: экспорт новостей для яндекса

    Предложили использовать такой код:

    <?
    preg_match_all("/(<img )(.+?)( \/)?(>)/",$content, $images);
    
    foreach ($images[2] as $val)
    {
       if (preg_match("/(src=)('|\")(.+?)('|\")/",$val,$matches) == 1)
    
    if(!stristr($matches[3],"http://")) {
    $add= "http://site.com.ua";
    } else {
    $add = "";
    }
       $img = $add.$matches[3];
    
       $img_url = trim(htmlspecialchars($img));
       $img_info = parse_url($img);
    
       $size = @getimagesize($img);
       $mime = $size["mime"];
    
       $fsize = @filesize ("/home/site/www".$img_info["path"]);
    
    ?>
    <enclosure url="<?php echo $img_url ?>" length="<?=$fsize?>" type="<?=$mime?>" />
    <?
    }
    ?>

    Как внедрить его в strawberry?

    Re: экспорт новостей для яндекса

    Посмотрел код. Можно было лучше, но тоже должно работать. А засовывать его можно в шаблон \data\tpl\RSS\active.tpl

    Есть такая штука как IceStrawberry 1.04 b. Можете юзать на свой страх и риск... или слямзить что-то. Мне фиолетово.

    16

    Re: экспорт новостей для яндекса

    Вот мой файл active.tpl:

    <item>
    <title><?=htmlspecialchars($tpl['post']['title']); ?></title>
    <description><?=htmlspecialchars($tpl['post']['short-story']); ?></description>
    <link><?=htmlspecialchars($tpl['post']['link']['post']); ?></link>
    <pubDate><?=date('r', $tpl['post']['_']['date']); ?></pubDate> 
     <yandex:full-text><?=htmlspecialchars($tpl['post']['full-story']); ?></yandex:full-text>
    
    <category>Новости Восточного Донбасса</category>
    
    <?
    $content=($tpl['post']['full-story'] ? $tpl['post']['full-story'] : $tpl['post']['short-story']);
    
    preg_match_all("/(<img )(.+?)( \/)?(>)/",$content, $images);
    
    foreach ($images[2] as $val)
    {
       if (preg_match("/(src=)('|\")(.+?)('|\")/",$val,$matches) == 1)
    
    if(!stristr($matches[3],"http://")) {
    $add= "http://localhost";
    } else {
    $add = "";
    }
       $img = $add.$matches[3];
    
       $img_url = trim(htmlspecialchars($img));
       $img_info = parse_url($img);
    
       $size = @getimagesize($img);
       $mime = $size["mime"];
    
       $fsize = @filesize ("/home/site/www".$img_info["path"]);
    
    ?>
    <enclosure url="<?php echo $img_url ?>" length="<?=$fsize?>" type="<?=$mime?>" />
    <?
    }
    ?>
    </item>

    Код находит рисунок присваивает $val значение в виде srs="" alt=''' align='''и др атрибуты img но дальше нет результатов. Где может быть ошибка?

    16 часов, 44 минуты и 15 секунд спустя:

    Сделал так:

    <?
    $content=($tpl['post']['full-story'] ? $tpl['post']['full-story'] : $tpl['post']['short-story']);
    
    preg_match_all("/(<img )(.+?)( \/)?(>)/",$content, $images);
    
    foreach ($images[0] as $val)
    {
       preg_match("/('|\")(.+?)('|\")/",$val,$matches);
       $img_url = $matches[0];
       preg_match ("/(http...)(.+?)(....)('|\")/", $img_url, $im);
       $type="image/$im[3]";
    ?>
    <enclosure url=<?=$img_url ?> type="<?=$type ?>" />
    <?
    }
    ?>

    У меня все ссылки на фото прописаны начиная с http://...
    Не подойдет для тех, у кого пути для фото начинаются с папки, в которой установлен скрипт Strawberry например так:

    <img src="/news/data/upimages/sinoptic.png" alt="" border="0" >