Делаем валидный RSS

28.11.2017  07:04

Погнали!

Начало обычное:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Заметки - web-разработка, создание сайтов, программирование. Блоговое.ру</title>
<link>http://www.blogovoe.ru/blog.html</link>
<description>Заметки о веб-дизайне,wap`е,web`е, SEO и программировании.</description>
<language>ru</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://www.blogovoe.ru/rss_blog/" type="application/rss+xml" />
<pubDate>Sun, 26 Nov 2017 10:14:12 +0400</pubDate>
<image>
<url>http://www.blogovoe.ru/img/i_am-96x96-bw.jpg</url>
<title>Заметки - web-разработка, создание сайтов, программирование. Блоговое.ру</title>
<link>http://www.blogovoe.ru/blog.html</link>
<width>96</width>
<height>96</height>
</image>

Запись будет выглядеть примерно так:
<item>
<title>RSS для турбо-страниц страниц Яндекса</title>
<guid>http://www.blogovoe.ru/blog/rss_dlya_turbo_stranits_yandex.html</guid>
<link>http://www.blogovoe.ru/blog/rss_dlya_turbo_stranits_yandex.html</link>
<pubDate>Sun, 26 Nov 2017 10:14:12 +0400</pubDate>
<category>Блог</category>
<description>Недавно Яндекс навернули говна сделали Turbo страницы для мобильной выдачи. Пользователям такие страницы будут показываться непосредственно на самом Яндексе без перехода на сайт. Т.к. на страницах разрешена реклама, то это тоже тр...</description>
</item>

А теперь интересности. description должно быть не длиннее 255 символов, мы, для гарантии обрежем по 230 символов:
$text_rss = strip_tags($text);
$text_rss = mb_substr($text_rss, 0, 230, "utf-8");//тупо обрежем без учёта окончаний слов


Конвертнём нежелательные символы:
function text_to_rss($txt){
	$txt = str_replace("&","& amp;",$txt);//пробелы после & надо убрать
	$txt = str_replace("<","& lt;",$txt);
	$txt = str_replace(">","& gt;",$txt);
	$txt = str_replace("'","& apos;",$txt);
	$txt = str_replace(""","& quot;",$txt);
	$txt = preg_replace("/(\n\r|\n|\r)+/uism", '', $txt);//вырежем все переводы строки, модификатор u — если текст в UTF
	return $txt;
}
$text_rss = text_to_rss($text_rss);


А т.к. у нас хз как обрезался текст, то валидатор будет ругаться на незакрытые скобочки в тексте. Проверим текст и добавим закрывающие скобки:
function rssValid($ch1,$ch2,$text){

	$c1 = substr_count($text,$ch1);
	$c2 = substr_count($text,$ch2);

	if ($c1 != $c2) {
		if ($c1 > $c2) {
			$end = $c1 - $c2;
			for($i = 0;$i<$end;$i++) {
				$text .= $ch2;
			}
		}
	}
	return $text;
}
$text_rss = rssValid("(",")",$text_rss);//обычные скобки
$text_rss = rssValid("{","}",$text_rss);//фигурные скобки
$text_rss .= "...";//добавим глубокомысленное многоточие в конце обрезанного текста


По-минимуму всё!

Пример готового RSS-канала.

Если вы дочитали до конца, но не понимаете зачем нужен RSS на сайте: для более быстрой индексации поисковыми системами. RSS поисковиками проверяется чаще сайта. Если в RSS что-то добавилось/поменялось — поисковый бот быстрее проиндексирует сайт.

Из смежной тематики: RSS для турбо-страниц страниц Яндекса.


перейти в Блог

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): PHP 25  web-программирование 41  молодым домохозяйкам 36  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)