Тема: экспорт новостей для яндекса
кто-нибудь знает как переделать rss шаблон, чтобы он устраивал требованиям яндекса, заранее спасибо
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
кто-нибудь знает как переделать rss шаблон, чтобы он устраивал требованиям яндекса, заранее спасибо
2.3. В теле сообщения (подпись и заголовок не являются телом сообщения!) должна быть указана версия скрипта: CuteNews.RU 2.5, Strawberry 1.1. и тип базы: textSQL, MySQL. Каждая версия имеет различия и при ответе это учитывается.
Strawberry 1.0.2 , думаю как организовать rss ленту для яндекса, чтобы не в ручную писать, а чтобы движок генерировал, подскажите?
Вощем я сам нашел способ. Может кому пригодиться. Чтобы сгенерировать 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
и
Хорошее решение, но я бы предложил не заменять стандартный rss.php и шаблон rss, а копировать как yarss.php и yarss - шаблон. А в urls.ini прописать для них правила.
P.S. Ибо всё же rss.php следует заменять при апгрейде.
согласен, не подумал сразу
есть еще вопросик, а для чего необходим тег code?
А для других версий Cutenews и Strawberry это будет работать? Может тогда включить его в следующую версию?
вот файлы для 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)
Можно ли добавить, чтобы работал тег <enclosure>?
Получается, что код для вставки рисунков стоит в теле сообщения. Как автоматически распознать путь и поставить его в <enclosure>?
Strawberry версии 1.1.1
Получается, что код для вставки рисунков стоит в теле сообщения. Как автоматически распознать путь и поставить его в <enclosure>?
Писать регулярное выражение.
Предложили использовать такой код:
<?
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?
Посмотрел код. Можно было лучше, но тоже должно работать. А засовывать его можно в шаблон \data\tpl\RSS\active.tpl
Вот мой файл 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" > Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться