Рассмотрел ещё один генератор френдленты, написанный mtve - rssagr

Проект существенно менее зрелый, чем rawdog, но несколько приятных особенностей есть.

Плюсы:

  1. Компактный скрипт с минимумом внешних зависимостей. Легко модифицировать и развивать
  2. Ротирует старые записи в отдельные HTML-файлы (у rawdog аналогичная функциональность достигается плагином)
  3. Держит список фидов отдельно от прочей конфигурации (каковой пока вообще не имеет)

Минусы:

  1. Не имеет никакого шаблонизатора. Не генерирует ссылку на css.
  2. Ссылки на предыдущие куски ленты генерируются независимо от их наличия
  3. Как и rawdog при добавлении большого количества фидов одновременно, не располагает свежескачанные записи в порядке написания
  4. Не имеет никакого интерфейса добавления, который бы избавлял пользователя от ручного поиска ссылки на фид (rawdog хоть из командной строки умеет скачивать html и парсить его в поисках <link rel="alternate">
  5. Не разделяет публичные данные (сгенерированный html) и внутренние (кэш состояния потоков). Я, конечно, могу доступ к этому кэшу ограничить средствами файловой системы и web-сервера, но подход rawdog, у которого есть недоступная по web директория для локального состояния и конфигурации, мне чем-то нравится больше.
  6. Всё-таки непонятно, чем автора не устроили имодуль XML::RSS, XML::RSSLite, XML::Feed и прочие несть им числа.
  7. При регулярном использовании ротирует страницу целиком, даже если с момента предыдущего апдайта появилось 1-2 новых сообщения.

Что бы можно сделать: 1. Прикрутить шаблонный движок (от HTML::Template, чтобы использовать общий шаблон страницы и css с блогом ikiwiki). 2. Для хранения списка фидов использовать не плоский текстовый файл, а foaf. Раз уж оно лежит там же где раздаваемые html. 3. Поправить алгоритм сортировки.

Но пока у меня rawdog работает, это имеет меньший приоритет чем древовидные комментарии и корректная работа почтовой нотификации.

по минусам:

  1. шаблоны и css - да, нету.
  2. ссылки на предыдущие html файлы - да, сэкономил на коде.
  3. порядок записей - я думал над порядком, остановился на принятом в ЖЖ..
  4. угадать ссылку на фид из чужой страницы - как выяснилось, иногда это задача не решаема, но можно добавить.
  5. сокрытие данных - да, это предполагается решать правами на файлы и конфигурацией сервера, так как этот referrer увидят при переходах. Во внутренних данных ничего секретного не хранится. Если кто-то открывает свои сгенерированные html, то очевидно для него не является секретом список фидов.
  6. модули из CPAN - вот это самое интересное, предыдущая версия работала через XML::RSS, но: a) большой процент фидов с интересной информацией нарушают стандарты, b) модули на CPAN или не работают, или тянут неадекватную кучу зависимостей, или меняют API от версии к версии, в результате ничего стабильного из них сделать не получается.
  7. не очень понял проблему - раньше я запускал по крону раз в сутки, сейчас вообще запускаю руками, всего у меня 4 группы фидов (4 каталога) 1200+100+200+200.

по вещам которые можно сделать:

  1. вынести шаблоны – можно, т.к сейчас они по сути внутри кода (<<HTML).
  2. хранить фиды не в текстом файле, а в foag/opml - не unix-way, но да, можно.
  3. поменять порядок - например в строке 200 поменять push на unshift.
vitus : comment 2
Вск 30 Дек 2012 19:45:57

порядок записей - я думал над порядком, остановился на принятом в ЖЖ..

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

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

Не надо ничего угадывать. Есть стандарт, как её там прописано. Если добавляемый блог не соблюдает стандарт, вот тогда юзеру придется руками добавлять.

не очень понял проблему - раньше я запускал по крону раз в сутки, сейчас вообще запускаю руками, всего у меня 4 группы фидов (4 каталога) 1200+100+200+200.

Ну правильно. Проблема возникает, когда агрегатор запускается по крону раз в час и вообще чаще, чем юзер в ленту заглядывает. И когда в этой ленте фидов МАЛО. Тогда приходишь и видишь в ленте две записи. Потому что с предыдущего запуска их добавилось ровно столько.

mtve [frox25.no-ip.org] : comment 3
Вск 30 Дек 2012 20:23:10

порядок записей - ага, понял проблему. да, после добавления нового фида в первый прогон попадут все его записи.

иногда это ещё происходит если владелец фида меняет движок, или добавляет какую-нибудь рекламу.

для этого предусмотрены ссылки "v" на следующую запись, "^" на предыдущую и "V" на следующий фид (поэтому и порядок внутри вывода фида выбран обратный хронологическому).

проблема в RSS и вообще в системе блогов в том, что это слишком "человечный" контент, всё течёт, всё меняется, у каждого свои предпочтения к написанию и чтению.

в идеале бы конечно хотелось какую-нибудь хорошо стандартизированную и работающую p2p систему с автоматической доставкой статей и комментариев по сети "друзей", цифровыми подписями, килл-файлами (точнее scoring'ом). прямо так и видится сущность "пользователь/блог" с публичным ключём, цепочкой основных постов и деревьями комментариев (всё версионное), web-интерфейс с аяксом, никто не забыт, ничто не забыто. надо наверное опять попробовать http://diasporaproject.org/ посмотреть.

vitus : comment 4
Вск 30 Дек 2012 22:29:45

По-моему, не стоит надеяться на

хорошо стандартизированную и работающую p2p систему

Крупные игроки вроде ЖЖ и фейсбука категорически не заинтересованы в этой самой хорошо работающей системе, они заинтересованы в vendor lock-in. А пользователи в большинстве своём конформисты.

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

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

mtve [frox25.no-ip.org] : comment 5
Втр 29 Янв 2013 12:25:59
сорри за поздний коммент, ещё есть некая http://retroshare.sourceforge.net/
vitus : comment 6
Срд 30 Янв 2013 10:38:50

сорри за поздний коммент, ещё есть некая http://retroshare.sourceforge.net/

Это фигня какая-то. Заявленная функциональность - instant messenger, а не социальная сеть. Для instant messenger есть xmpp. Который вполне себе децентрализован. Но имеет и крупные сервера вроде google.com.