# Бороздим интернет без браузера #2
hugeping(ping,1) — All
2021-02-14 17:30:21


В прошлый раз я погорячился, когда сказал, что раздача контента по RSS -- редкость. Конечно, не редкость. Если посмотреть на исходный код главных страниц многих веб-ресурсов, то очень часто можно найти заветную ссылку с типом application/rss+xml. Я начал с простой утилиты на go, которая бы забирала rss ленту и выводила её в формате gemini разметки. Утилита rss2gmi лежит там же, где и остальные утилиты: https://github.com/gl00my/clearweb/tree/master/rss2gmi

Я испытал её на некоторых ресурсах и понял, что придётся усложнять. Например, некоторые сайты отдают ленту в которой в полях description находится html-разметка. Кроме того, вместо UTF-8 могут использоваться другие кодировки.

После небольших доработок я успешно испытал rss2gmi на:

* linux.org.ru - https://www.linux.org.ru/section-rss.jsp?section=1
* opennt.ru - https://www.opennet.ru/opennews/opennews_all_noadv.rss
* hype.retroscene.org - https://hype.retroscene.org/rss/index/
* форуме ifiction.ru - https://forum.ifiction.ru/extern.php?action=active&type=RSS
* interfax.ru - https://www.interfax.ru/rss.asp
* hugeping.tk - http://hugeping.tk/echo/all/rss


Но была ещё одна проблема. В acme окно всегда прокручивается в конец вывода. Поэтому, после запуска скрипта показывающего ленту, нужно было отматывать текст назад. А это -- неудобно! Решение, конечно, лежало на поверхности. Добавить опцию -r для реверсного показа ленты. После добавления этой опции, просмотр лент стал именно таким, каким я его хотел видеть. Например, для просмотра новостей opennet я просто запускаю скрипт opennet из acme и вижу что-то вроде:

## Выпуск Wine 6.2, Wine staging 6.2 и Proton 5.13-6 [38]

Состоялся экспериментальный выпуск открытой реализации WinAPI - Wine 6.2. С момента выпуска версии 6.1 был закрыт 51 отчёт об ошибках и внесено 329 изменений.

=> https://www.opennet.ru/opennews/art.shtml?num=54570 [38]

Если новость меня интересует, я нажимаю на ссылке и открывается браузер. Удобно! И в большинстве случаев -- никакого браузера! И никакой читалки RSS на qt или gtk. А в Plan9 это вообще единственный возможный способ для меня.

Сегодня многие пользуются для почты веб интерфейсом gmail/mail.ru и другими. Но это, конечно, не наш путь. Несколько последних лет я использую gnus в emacs. Забор почты может осуществляться mpop/imapsync. При этом письма просто помещаются в каталог в формате Maildir. Отправка -- msmtp. Для поиска нужных сообщений я использую mu. Mu позволяет делать выборку нужных сообщений и показывать их прямо из Maildir. И конечно, с помощью mu можно автоматизировать показ нужных писем прямо в acme!

Например, мне нужно следить за рабочим багтрекером. Я нажимаю на "кнопку" bugs в acme и получаю список последних ошибок! В теле писем есть ссылки. Я могу нажать на нужную и перейти к нужному багу. Скрип выглядит просто:

mu find from:Mantis --fields "l" -s "d" | tail -n $num | while read f; do mu view --nocolor "$f";done

Твиттер и mastadon я читаю скриптами, которые вызывают bti и toot -- консольные клиенты твиттера и мастадона.

Поиск, новости, чтение почты и твиттера... И всё это не выходя из acme. Жизнь налаживается! Acme -- действительно мощный интерфейс, легко настраиваемый под собственные задачи. И он очень помогает в борьбе с shit-вебом.

# Re: Бороздим интернет без браузера #2
johnbrown(ping,9) — hugeping
2021-02-14 18:13:39


feed43.com создает рсс любой страницы, иногда даже лучше, чем родной. Серверный аналог (не проверял) https://github.com/shafihuzaib/hfeeds

Вообще, рсс много где есть: на гитхабе, хабре, яндексе.

# Re: Бороздим интернет без браузера #2
vvs(ping,12) — johnbrown
2021-02-14 22:59:39


johnbrown> Вообще, рсс много где есть: на гитхабе, хабре, яндексе.

И хочется в рай, да грехи не пускают... Если бы они еще и работали, цены бы им не было. А вот попробуйте найти RSS URL для PR и issues на гитхабе. Ан нету :(

Да, всегда можно использовать сторонние клиенты, API или сервисы, но они имеют привычку ломаться. Впрочем, как и поддержка RSS на самих серверах: сегодня есть, завтра глючит, послезавтра сдохла :(

Но голь на выдумки хитра, конечно :)

# Re: Бороздим интернет без браузера #2
hugeping(ping,1) — hugeping
2021-02-18 08:06:45


Не буду пилить самостоятельный пост. Просто напишу, что именно я доделал за последние дни.

# reddit

Оказалось, что reddit предоставляет доступ к постам и комментариям через atom feed. Просто добавляем к url .rss и получаем данные без мусора. Мимо такого я пройти не мог, поэтому:

- добавлена утилита atom2rss;
- утилита rss2gmi теперь умеет читать данные из stdin.

Правда, довольно быстро выяснилось, что меня начали рубить за большое количество запросов (хотя их было немного). Смена User-Agent помогла:

# читаем реддит plan9
curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" https://www.reddit.com/r/plan9/.rss | atom2rss | rss2gmi -h -r

# Доработки rss2gmi

Улучшил внешний вывод в тех случаях, когда контент представляет из себя html код. Теперь текст выдачи выглядит более аккуратно! Кроме того, добавил параметр -n -- задать число записей, которые хотим показать. Всё это позволило удобным образом делать сводки новостей сразу с нескольких ресурсов, например:

rss2gmi -n 1 https://www.opennet.ru/opennews/opennews_all_noadv.rss
rss2gmi -n 1 -h https://www.linux.org.ru/section-rss.jsp?section=1
rss2gmi -n 1 http://hugeping.tk/echo/all/rss
rss2gmi -h -n 1  https://hype.retroscene.org/rss/index/
rss2gmi -h -n 1 'https://forum.ifiction.ru/extern.php?action=active&type=RSS'

# Выводы

Просто удивительно, что когда я некоторое время назад искал простые консольные rss-читалки, я находил только безумные комбайны. Или библиотеки, с множеством слоёв абстракций. Но на go писать такие вещи настолько просто, что буквально за пару вечеров можно сделать инструмент под себя и пользоваться им с комфортом.