RSS ленты для Poole

Плагин feeds.py для генератора сайтов Poole формирует произвольные RSS-ленты со страницами сайта.  Пример подключения и настройки (файл macros.py):

from plugins.feeds import *
BASE_URL = "http://example.com"
STOP_LABELS = ["draft", "hidden"]

RSS-ленты описываются с помощью файлов с расширением .feed с таким содержимым:

title: My podcast
description: A podcast about a static website developer's life.
language: ru-RU
link: /podcast/
labels: podcast, audio
limit: 1000

Файл input/podcast.feed с таким содержимым создаст файл output/podcast.xml с валидной RSS-лентой.  Если у страницы есть свойство image, то его содержимое будет выдано в качестве вложения, например:

title: Фотография слона
image: files/elephant.jpg
---
Купил слона, фотография во вложении.

Настройка

Используемые глобальные константы:

  • BASE_URL, содержит адрес главной страницы сайта.  При отсутствии этой константы ленты не создаются.
  • STOP_LABELS, содержит список меток для исключения страниц из лент.  Сюда можно добавить, например, «draft» и «hidden».
  • DEFAULT_LANGUAGE, содержит код языка для лент, не содержащих явного указания на него.

Используемые свойства страниц:

  • title: заголовок записи.
  • date: дата публикации.
  • image: если содержит имя существующего файла, то этот файл становится вложением.

Свойства лент (из файлов с расширением .feed):

  • title: заголовок ленты.
  • description: описание ленты.
  • link: ссылка на главную страницу ленты (обычно это архив записей).
  • with_bodies: значение «no» отключает вывод содержимого записи (description).
  • labels: метки, которые должны содержать записи для попадания в ленту.
  • limit: количество выводимых записей (по умолчанию равно 100).
  • language: язык записей ленты.  В ленту попадут только записи на этом языке.
  • hub: может содержать URL хаба PuSH.

Для произвольного изменения заголовков эпизодов можно в файле macros.md использовать специальную функцию:

def format_feed_item_title(page):
    return page["title"] + u"!"

Важные особенности

  • Встроенные в код страницы объекты (embed, iframe) удаляются, в соответствии с рекомендацией валидатора.
  • Ссылки на картинки становятся полными и абсолютными, так что они работают даже в самых тупых агрегаторах.
  • В свойство lastBuildDate ленты уходит дата публикации самой свежей записи из этой ленты.
  • Ко всем ссылкам на записи добавляется «?from=rss» для удобства отслеживания источников захода.