From 110d7109a7e2c43bafaed0426a89cea6718eaadf Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 19 Feb 2022 12:25:02 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=BE=D0=BB=D0=BD=D0=BE=D1=81=D1=82=D1=8C?= =?utf8?q?=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5=D1=88=D1=91=D0=BB=20=D0=BD?= =?utf8?q?=D0=B0=20go.stargrave.org/feeder?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit https://www.feeder.stargrave.org/WARCs.html С момента создания b10a0aa678fd8759885c9af0d9abba7bafd88efb своего новостного агрегатора, нашлось много мелочей и косяков и особенностей: * вряд ли кто-то удивится что некоторые XML-ки вообще невалидны. Причём совсем (типа ). Но, видимо, авторам это сообщают и через полдня ошибки пропадают * бывают feed-ы в которых содержимое новости (content) меняется *каждый* раз при скачивании feed. Я перешёл на хэш от title+content как идентификатор уникальный, но это не будет работать, так как tracking информация каждый раз меняет этот хэш. Дата поста в этих feed-ах аналогична равна now банально. Но, повезло что хотя бы GUID там присутствует и действительно уникально идентифицирует пост. В итоге я проверяю уникальны ли GUID-ы и, если да, то использую их, в противном случае хэш от title+content (у кого-то title нет, у кого-то он повторяется). Вот это уже работает надёжно * updated дата самого feed-а может быть меньше чем дата его постов. Поэтому нужно брать дату последнего поста * бывает что информация об авторах присутствует, но равна пустой строке * удалил пять feed-ов потому что они отдают 403 если видят curl-овый User-Agent. Я сейчас отправляю go.stargrave.org-feeder/0.1.0, но никакого почтения тем кто не даёт использовать curl -- не достойны упоминания или чтения Много ещё всяких мелочей поправил и исправил. Всё работает просто прекрасно теперь! Newsboat я полностью удалил. Остался urls файл, генерируемый linksexp (df5af37e96c74dedf26d1a2614cb2fe79a7f52ba), который продолжаю использовать для urls2feeds.zsh, ибо этот список регулярно меняется (что-то появляется, что-то исчезает, где-то меняются адреса и домены). В Mutt на клавише "o" в режиме pager открывается urlview с ссылками из X-URL и X-Enclosure, по аналогии "o" клавише в Newsboat. Максимальное кол-во элементов feed-а можно изменять конкретно для каждого feed-а: echo 50 > feeds/FEED/max. Ноль будет означать без ограничений. Появилась приятная возможность пересохранять новость в другой ящик, чтобы почитать в будущем. Это же всё же полноценная почтовая система. Большой плюс по сравнению с Newsboat. Полностью избавился от redo зависимости в проекте. Зависимостей в задачах было 1.5 штуки, и то через промежуточную искусственную цель. Для распараллеливания используется GNU parallel, у которого клёвый progress bar (--bar) показывающий сколько выполнено и сколько осталось задач. redo тут всё же переусложнение. Не то чтобы я это когда буду использовать, но в качестве доказательства что это не сложно сделать: написал ./feeds-encs.zsh для скачивания enclosures (ссылки на аудиофайлы в podcast-ах например) из новых новостей. GNU wget уже этим занимается. И аналогично ./feeds-warcs.zsh скачивает все link-и из новостей как страницы с реквизитами (все необходимые картинки, CSS-ки для просмотра HTML-ки) в WARC файлы. Это позволяет не только скачать feed-ы, но и всё на что они ссылаются и читать это дальше в offline, используя например tofuproxy как WARC броузер: for w (feeds/*/warcs/*.warc) print $w:a > path/to/tofuproxy/fifos/add-warcs В общем, очень доволен получившимся результатом! Я думал будет куда геморройнее и менее удобно использовать MUA чем Newsboat, в котором keybinding-и стали так привычны. Плюс это всё работает значительно быстрее в целом: запуск newsboat занимал секунд 20, при этом он жутко тёк по памяти (6e2b2c02747ad3c1ac0a5e39e18e616b3b0bb680) и неслабо её ел (сотни мегабайт). -- 2.50.0