RSS лента за десять минут. Делаем свой RSS-канал

Электроника 23.06.2019
Электроника

Форматов для представления данных. Расшифровка этой аббревиатуры для разных версий выглядела по-разному:

  • R ich S ite S ummary (RSS 0.9x) - обогащённая сводка сайта;
  • R DF S ite S ummary (RSS 0.9 и 1.0) - сводка сайта с применением инфраструктуры описания ресурсов;
  • R eally S imple S yndication (RSS 2.x) - очень простой сбор информации.

Общий смысл всех этих вариантов сводится к тому, что RSS - это способ публикации (трансляции) и распространения информации с сайта. Синдикация веб-контента означает быстрое распространение информации, благодаря одновременному размещению сразу в нескольких источниках.

В основном RSS-ленты используют для аннотаций, анонсирования свежей информации на сайтах: новостей, новых публикаций, обновлений и изменений.

История создания формата RSS

Впервые технологию RSS применила в конце 90-х компания Netscape для раздачи новостей на своем портале Netcenter. Первой открытой официальной версией RSS стала версия 0.90. К 2000 году формат получил широкое распространение и разделился на два разных стандарта - RSS 1.0, основанный на стандартах XML и RDF организации W3C, и RSS 0.92, основанный на версии формата от Netscape 0.91. Последняя версия формата RSS - 2.0 является дальнейшим развитием этой ветки (кстати, автор этой версии Дейв Вайнер и придумал свою расшифровку аббревиатуры - Really Simple Syndication).

В 2006 году вступил в борьбу с RSS вступил конкурирующий формат - Atom, продвигаемый компанией Google.

Терминология

Вы можете встретить в сети различные обозначения для новостного потока в формате RSS: RSS-лента, RSS-фид, RSS-поток, RSS-канал. Все эти термины обозначают одно и то же.

В чем удобство RSS-лент для посетителей сайтов

Существуют специальные программы-агрегаторы, которые позволяют собирать информацию множества RSS-лент из разных источников. Эти программы способны не только автоматически получать данные в формате RSS, но и обрабатывать их: сортировать, фильтровать и приводить к максимально удобному для чтения виду. Такими агрегаторами ("читалками") снабжены все популярные браузеры. Существуют также агрегаторы в Web - это специальные сайты для сбора и отображения RSS-каналов (примеры - Яндекс.Лента , Google Reader).

Используя программы-агрегаторы, пользователи имеют возможность подписываться на новости любимых сайтов и блогов и просматривать их, не обходя сами сайты-источники. Это позволяет колоссально экономить время, особенно если таких излюбленных ресурсов у читателя много. Открыв RSS-агрегатор, вы практически мгновенно узнаете, какие сайты обновились с момента последней вашей сессии работы с ним и имеете возможность бегло просмотреть заголовки с тем, чтобы решить, какие них стоят того, чтобы посетить сайт-источник для чтения полной версии новости, статьи или иного свежего материала.

Просмотр новостей в формате RSS позволяет также экономить трафик, поскольку этот формат гораздо "легче", чем страницы обычных сайтов из-за отсутствия графической оболочки, рекламы и т.п.

Как подписаться на RSS-ленту сайта

Современные браузеры умеют самостоятельно определять наличие RSS-потоков на сайтах, и, обнаружив их при посещении сайта, сразу предлагают пользователю диалог для подписки на RSS-фид. Кроме того, на сайтах, транслирующих RSS-потоки, как правило, имеются специальные иконки - чаще всего оранжевого прямоугольника, с расходящимися волнами внутри. Стандартная RSS-иконка выглядит приблизительно так: или так , но дизайн такой иконки может варьировать как угодно, в зависимости от фантазии и эксцентричности вебмастера. Кликнув на такую иконку, вы подписываетесь на RSS-рассылку сайта.

Зачем RSS-лента нужна сайту

Исходя из вышеизложенного вы, надеюсь, уже поняли, что современному сайту, особенно часто обновляющемуся, не обойтись без своей RSS-ленты (фида). Если вы заинтересованы в повышении посещаемости вашего сайта и удерживании внимания постоянных посетителей (клиентов), пренебрегать таким полезным инструментом не стоит.

Определенную пользу RSS-лента приносит и в плане продвижения сайта, поскольку тиражирование этой ленты на других ресурсах способствуют увеличению количества ссылок на сайт-источник RSS-потока.

Кроме того, есть мнение, что сайты, содержащие RSS-фиды, могут ранжироваться выше засчет того, что имеют в лице RSS-лент а) высокотаргетированный, б) узкотематический, в) часто обновляемый материал. Наличие RSS-потока способствует более частому посещению сайта поисковыми роботами, то есть такой сайт чаще индексируется и новая информация обнаруживается поисковиками раньше. Кроме того, этот фактор увеличивает шансы на попадание в индекс поисковых систем.

RSS-ленты и SEO

SEO-специалисты предупреждают о негативных последствиях, которые может иметь наличие RSS-фида на сайте (блоге).

Во-первых, было замечено, что нередко поисковики раньше индексируют контент RSS-лент на других сайтах, нежели на источнике, транслирующем фид. И считают первоисточниками именно эти сайты, а авторский сайт еще и получает от поисковиков "по шапке" за "дублированный контент". Особенно это касается блогов, в которых в ленту выносится не только заголовок и краткая аннотации, а посты целиком. Таким образом, ваш контент быстро становится "неуникальным" и "бесполезным для людей", с точки зрения поисковиков. Почему так происходит, спросите вы, ведь лента содержит ссылки на источник новостей? А потому, что сайты, которые грабят ваш контент (rss-каталоги, социальные закладки) в большинстве своем "жирнее", чем ваш сайт, то есть трастовость вашего ресурса никак не сравнима с трастовостью раскрученного сервиса.

Как следствие описанного явления, транслированные потоки часто сдвигают первоисточник вниз в .

Во-вторых, не стоит обольщаться, что грабилки вашей ленты в обязательном порядке будет ставить ссылку на источник: многие нагло вырезают такие ссылки или засовывают их в noindex, nofollow или в яваскрипты.

В-третьих, точно так же не стоит рассчитывать, что с сайтов-воров к вам будут по ссылкам приходить посетители: многие из них ограничатся чтением новости там, где они ее обнаружили. А если учесть часто встречающийся пункт номер 2 (отсутствие прямой ссылки на вас), то перспектива повышения посещаемости засчет таких ресурсов становится и вовсе призрачной.

В-четвертых, формат XML весьма удобен для . Создав собственную RSS-ленту, вы достаточно быстро обнаружите, что ее содержимое беззастенчиво "дерут" создатели сателлитов, сплогов и прочей web-нечисти, еще более способствуя тому, чтобы ваш контент был сочтен поисковиками неуникальным и бесполезным.

Вывод, однако, не в том, чтобы отказаться от RSS полностью. RSS-лента нужна вашим постоянным посетителям! А вот спешить добавлять вашу ленту сразу после создания в различные RSS-каталоги совсем не стоит.

Как создать свою RSS-ленту. Элементы RSS-канала

Ряд движков и CMS уже имеет встроенные модули публикации RSS-потока. Если вы пользуетесь таким, вам не нужно ломать голову над этом вопросом. Эта глава для тех, кто хочет писать свою RSS-ленту вручную или интересуется спецификацией формата RSS.

Чтобы завести свою RSS-ленту, для начала необходимо создать документ в стандарте XML 1.0. То есть файл RSS-ленты должен начинаться со строки

Другой ключевой момент - собственно элемент rss с указанием версии:

Внутри тэга rss размещается тэг . В нем и содержится вся информация. Сначала указывается информация о самом канале, а затем - сам новостной поток. Вот как это выглядит в общем случае:




Заголовок ленты
http://www.ссылка на сайт
Краткое описание канала
Дата последнего изменения в канале*


Заголовок новости или статьи № 1
Ссылка на полный текст новости или статьи №1
Текст новости № 1 (длина произвольная)


Заголовок новости или статьи № 2
Ссылка на полный текст новости или статьи №2
Текст новости № 2 (длина произвольная)


Обязательными элементами канала являются title, link и description. В элементе все элементы, по большому счету, являются необязательными, но, по крайней мере, или <description> должен присутствовать.</p> <p>* Даты в RSS-канале обязательно должны быть в формате RFC 2822 ! Например, Tue, 18 May 2010 07:30:00 +0300. Если вы затрудняетесь с <a href="/kak-s-nulya-mozhno-raskrutit-svoi-kanal-na-youtube-podpischiki-vs.html">правильным оформлением</a> даты или не хотите делать это вручную, воспользуйтесь нашим онлайн-конвертером даты и времени в формат RFC 2822 .</p> <h3>Необязательные элементы RSS-канала</h3> <p>Вы можете внести <a href="/kak-zaregistrirovatsya-v-skaipe-s-uch-tnoi-zapisyu-kak-sozdat-v.html">дополнительную информацию</a> о канале, сайте-источнике или авторе канала.</p> <p><b>language </b> <br> Язык, на котором написан канал. Позволяет сборщикам, например, объединять на одной странице все сайты на одном языке. Перечень <a href="/kak-naiti-oblast-opredeleniya-funkcii-primery-reshenii-oblast.html">допустимых значений</a> этого элемента лежит .<br><i><b>Пример: </b> </i> ru-ru</p> <p><b>managingEditor </b><br> <a href="/elektronnaya-pochta-i-tvoi-mobilnyi-kak-uznat-svoi-elektronnyi.html">Электронный адрес</a> человека, ответственного за редакторский текст. <br><i><b>Пример: </b> </i> </p> <p><b>webMaster </b><br> Адрес <a href="/ustanovit-novuyu-elektronnuyu-pochtu-chto-nuzhno-dlya-obshcheniya-po-elektronnoi.html">электронной почты</a> человека, ответственного за <a href="/detektor-lzhi-kto-izobrel-kak-rabotaet-kak-obmanut-detektor.html">технические аспекты</a> канала.<br> (rss_tech@gmail.com (Vasily Petrov)</p> <p><b>pubDate </b><br> Дата публикации текста в канале Дата и время в RSS соответствуют спецификации RFC 822 , за исключением того, что год может представляться двумя или четырьмя цифрами (последнее предпочтительно). <br><i><b>Пример: </b> </i> (Sat, 07 Sep 2002 00:00:01 GMT)</p> <p><b>lastBuildDate </b><br> Время последнего изменения содержимого канала. <br><i><b>Пример: </b> </i> (Sat, 07 Sep 2002 09:42:31 GMT)</p> <p><b>cloud </b><br> Указывает веб-сервис, поддерживающий интерфейс rssCloud, реализующий подписку на обновления канала. . <br><i><b>Пример: </b> </i></p><p> <cloud domain="ccc.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/></p> <p>(В этом примере для запроса уведомления нужно отправить сообщение XML-RPC на ccc.com , порт 80, путь /RPC2 . Вызываемая процедура - myCloud.rssPleaseNotify.)</p> <p><b>ttl </b><br> Время жизни - количество минут, на которые канал может кешироваться перед обновлением с ресурса. <br><i><b>Пример: </b> </i> (<ttl>60</ttl>)</p> <p><b>image </b><br> Изображение (в <a href="/uznat-razmer-obekta-v-fotoshope-kak-izmenit-razmer-izobrazheniya-v.html">формате GIF</a>, JPEG или PNG), которое может отображаться с каналом.</p> <p>Максимальная ширина - 144 (по умолчанию - 88). <br> <a href="/maksimalnaya-gromkost-i-vysota-zvuka-zvukoizolyaciya-tipichnye-oshibki-i.html">Максимальная высота</a> - 400 (по умолчанию - 31).</p> <p>Элемент <item> также может содержать <a href="/kak-v-html-sdelat-vyravnivanie-po-shirine-osnovy-css-vyravnivanie-shrifta-i.html">дополнительные элементы</a>, такие как:</p> <p><b>author </b><br> Адрес электронной почты автора сообщения. Актуально, например, для RSS-лент онлайн-СМИ, в которых у каждой статьи - свой автор. Формат элемента:</p> <p><author>rsseditor@gmail.com (Andrew Petrov)</author></p> <p><b>comments </b><br> URL страницы для комментариев, относящихся к сообщению. Формат элемента:</p> <p><comments>http://domain.com/article4403.php#comments</comments></p> <p><b>enclosure </b><br> Описывает медиа-объект, прикрепленный к сообщению. Имеет 3 обязательных атрибута: url (адрес приложения), length (размер приложения в байтах) и type (тип приложения MIME). Пример:</p> <p><enclosure url="http://www.domain.com/111.mp3" length="15200000" type="audio/mpeg" /></p> <p><b>source </b><br> Название RSS-канала, из которого получено сообщение, полученное из его <title> . Имеет обязательный атрибут URL (ссылка на источник).</p> <p><source url="http://domain.org/rss.xml"> Kapitoshka"s channel </source></p> <h3>Проверка RSS-ленты на соответствие стандарту</h3> <p>Итак, вы изготовили собственную RSS-ленту. Для того, чтобы убедиться, что вы все сделали правильно, советую воспользоваться услугами онлайн-валидаторов, например, Feed Validator или RSS Validator.</p> <h3>Организация подписки на RSS-ленту</h3> <p>Чтобы организовать возможность подписки на вашу RSS-ленту, необходимо сделать 2 вещи:</p> <p>2. Вставить между тегами <head> и </head> <a href="/kak-pereiti-na-sleduyushchuyu-stroku-v-telefone-kak-pereiti-na.html">следующую строку</a>:</p> <p>Этот шаг необходим для того, чтобы сообщить браузерам о наличии RSS-ленты - как вы помните, в уважающих себя браузерах есть свои rss-читалки.</p> <p>Кстати, обнаруженную браузером на сайте RSS-ленту можно просмотреть, кликнув на специальную иконку в меню. В Mozilla она находится в адресной строке, в IE - в <a href="/chto-mozhno-propisyvat-v-komandnoi-stroke-cmd-komandnaya-stroka-windows.html">командной строке</a>:</p> <p><img src='https://i0.wp.com/earninguide.biz/webmaster/img/rssbr2.gif' width="100%" loading=lazy></p><p>Кстати, как вариант, вы можете дать под RSS-кнопкой ссылку не на саму новостную ленту, а на фид в гуглевском сервисе Feedburner.com . Предварительно, конечно, нужно там зарегистрироваться и добавить свою ленту. Преимущества "зажигания" вашего фида в том, что сервис FeedBurner позволяет владельцам сайтов предоставлять информацию своим подписчикам в наиболее удобном формате, а также дает полную <a href="/metod-kolichestvennoi-ocenki-informacii-statisticheskii-semanticheskii.html">статистическую информацию</a> о посетителях и подписчиках фида, и позволяет зарабатывать на своем фиде (с помощью ).</p> <p>Есть у этого ресурса <a href="/lenty-rss-iz-gruppy-vkontakte-avtoposting-iz-rss-v-socialnye.html">RSS лента</a> последних изменений. Но вот беда - лента изменений самая минимальная. Там указано только кем, когда и какая страница редактировалась. Нет <a href="/zakon-o-pive-poslednie-izmeneniya-polnoe-naimenovanie-na-russkom-yazyke.html">полных изменений</a> и нет GUID у элементов ленты, поэтому некоторые <a href="/rss-klienty-programmy-dlya-chteniya-rss-lent.html">RSS клиенты</a> (например, Google Reader) не показывают большую часть новостей, считая их одинаковыми.<br><br> Для преобразования ленты в свой, удобный формат, выбор пал на такой специализированный инструмент, как Yahoo Pipes . Но тут постигла неудача. Для получения изменений странички, wiki строго требовала наличия cookie с именем «wikit_e» в http запросе, а научить Yahoo Pipes отсылать куки не получилось. Фокус с <a href="/http---cherez---testirovanie-post-zaprosov-protestirovat--.html">HTTP запросом</a> GET и параметром в виде "?COOKIE=" так же не проходил.<br> В итоге, выбор пал на более гибкий инструмент - Google Apps Script . В итоге получился вот такой скрипт:<br> // Эта функция будет выполняться автоматически, при вызова скрипта как веб-приложения function doGet() { // Задаем URL исходной RSS ленты var feed = "http://wiki.tcl.tk/rss.xml"; // Определяем ID для доступа к кэшу var id = Utilities.base64Encode(feed); // Определяем кэш и пробуем забрать уже собранную ленту из него var cache = CacheService.getPublicCache(); var rss = cache.get(id); // Если в кэше лента не сохранена - переходим к ее созданию if (rss == null) { // Получаем данные RSS ленты в виде XML var data = UrlFetchApp.fetch(feed).getContentText(); var doc = Xml.parse(data); // Выбираем канал var channel = doc.getElement().getElement("channel"); // Выбираем название канала, ссылку, описание ленты var title = channel.getElement("title").getText(); var link = channel.getElement("link").getText(); var desc = channel.getElement("description").getText(); var guid, date; // Начинаем создавать свою RSS ленту, заполняем название, ссылку и описание rss = "<rss version="2.0">"; rss += "<channel>" rss += "<title>" + title + "\n"; rss += "" + link + "\n"; rss += "" + desc + "\n"; // Выбираем все элементы ленты и последовательно проходим по каждому var items = channel.getElements("item"); for (var i in items) { item = items[i]; // Выбираем из ленты заголовок, ссылку, дату новости, описание title = item.getElement("title").getText(); link = item.getElement("link").getText(); // Ссылка должна указывать на diff странички link = link.replace(/\/(\d+)$/, "/_/diff?N=$1#diff0"); date = item.getElement("pubDate").getText(); desc = item.getElement("description").getText(); // Формируем GUID для элемента ленты guid = Utilities.base64Encode(link + date); // Скачиваем diff страницы, используя при этом Cookie "wikit_e" как "rss" var fullpage = UrlFetchApp.fetch(link, {"headers":{"Cookie":"wikit_e=rss"}}).getContentText(); // Вырезаем из страницы только body var matched = fullpage.match(/]*>([\w\W]*)<\/body>/i); // Вырезаем заголовки и подвал страницы matched = matched.replace(/