-- Leo's gemini proxy

-- Connecting to hugeping.tk:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

Бороздим интернет без браузера

by hugeping on 2021-02-08 08:53:07


После погружения в gemini и создания своей "капсулы" в нём, мне стало интересно сделать какие-то свои сервисы. Сначала, я прикрутил прогноз погоды по данным METAR-станций. Потом -- добавил поиск по Библии. И тут я понял, что формат gemini просто идеален для использования его как простого интерфейса для личных сервисов!


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


В Plan9 нет (и не может быть) современного браузера. Почему его не может быть, хорошо описано здесь: https://habr.com/ru/post/541196/ [1] Это сильно пересекается с моей заметкой о ненастоящей победе open source: ii://HZhphc84EsazyASVPck3 Поэтому, в Plan 9 я уже сталкивался с ситуациями, когда мне приходилось делать запросы к веб-ресурсам руками, чтобы авторизоваться, получить нужную информацию в удобном виде и т.д. Но каждый раз это была уникальная ситуация.


А что если совместить всё? Формат gemini -- как чистая выдача. Прямые запросы -- для получения той информации сети, которая нужна. Очищенная от тонн мусора. Оформление полученного инструмента как утилит командной строки, для применения их прямо в acme, а также в виде сервисов gemini! Это может быть интересно!


Есть ситуации, когда сайт предоставляет свой контент через rss. Здесь всё понятно. Но таких сайтов немного. Особенно тех, которые предоставляют в ленте статьи целиком. Есть ситуации, когда сайт отдаёт свои данные по общедоступному rest API. Но это тоже не является общей ситуацией и требует детального изучения этого API. Поэтому я начал с утилиты, которая бы делала GET запрос и вытаскивала из HTML только те узлы документа, которые мне нужны.


Написал, конечно же, на go: https://github.com/gl00my/clearweb/tree/master/htmlcut [2]


Утилита крайне простая! Мы просто задаём тип элемента, одно из ключевых свойств и режим поиска: regexp/совпадение/нахождение подстроки. Если какой-то узел попал в выборку, то в неё же попадёт и все вложенные элементы. Не смотря на свою примитивность, оказалось, что таких функций достаточно. Добавив режим отрицания логики и запуская утилиту в UNIX-конвеерах я смог получать дистиллированный текст статей из: живого журнала, хабра, stackoverflow...


У нас есть текст статьи, но читать его с html тегами невозможно. На github я нашёл утилиту html2gmi и оказалось, что она отлично работает!


Я почистил её от лишних мне функций, и немного поменял для нужного мне поведения: https://github.com/gl00my/clearweb/tree/master/htmlgmi [3]


В качестве примера работы утилит в связке, приведу пример чтения статьи на habr:


curl -s "$1" | htmlcut -val '(post\_full|comment\_\_message|user\-info\_inline)' -regexp | htmlgmi -m -n

А вот фрагмент выдачи для статьи, которую я упоминал выше:


Увидев вот эту публикацию [8] про браузерные войны, я хотел было написать альтернативное наблюдение за тем, как мы докатились до такой жизни. Но Дрю ДеВолт уже всё сказал за меня.

Начиная с первых войн между Netscape и IE, главным инструментом в конкурентной борьбе браузеров стала функциональность. Вот только стратегия неограниченного роста и расширения — совершенно безумная. Слишком долго мы позволяли ей продолжаться.

С помощью wget я скачал все 1217 спецификаций W3C [9], опубликованных на текущий момент 1. Существенная часть из них должна быть реализована в браузере, чтобы современный веб работал. Я подсчитал объём этих спецификаций. Как думаете, насколько сложен современный веб?

=> https://habr.com/ru/post/541180/ [8]
=> https://www.w3.org/TR/ [9] спецификаций W3C

Не знаю как у вас, а у меня при просмотре статьи в таком формате радостно щемит сердце.


Результат меня вдохновил! Я понял, что могу читать интернет прямо в acme! Просто запуская нужные скрипты. Или написав прокси-скрипт, который сам анализирует ссылки и обрабатывает выдачу.


Но сначала нужно было решить проблему с поиском. Мне нужно было искать в acme! Ну, или из консоли.


В gemini на капсуле Толстоевского gemini://rawtext.club/~tolstoevsky/ [4] я узнал о таком метапоисковике как searx, который использует в своей работе google, duckduckgo и так далее. При этом, он не собирает телеметрию. SearX показался мне очень удобным и для начала я просто прогнал его выдачу через свои утилиты:


curl -s -X POST -F 'q='"$q" -F 'category_general=1' -F 'pageno='"$page" https://search.fedi.life/search | htmlcut -val '(result.content|external.link|result.header)' -regexp | htmlgmi -l 0 -m -n

Результат понравился:

INSTEAD [1]
http://instead-hub.github.io
Instead | Definition of Instead by Merriam-Webster [2]

=> http://instead-hub.github.io [1].

Просто абзац текста, ссылка. Абзац текста, ссылка. Где то на этом моменте я начал плакать от умиления. Но парсинг HTML вывода это всё-таки грубо. Почитав про API SearX я узнал, что можно получать выдачу прямо в RSS! И написал ещё одну примитивную программу на go, которая делает всю работу:


https://github.com/gl00my/clearweb/tree/master/searx [5]


Итак, мечта сбылась. Я могу искать в интернете откуда угодно. Из консоли. Из acme. На сервере gemini. И мне не нужен браузер!


Теперь не составило труда оформить поисковик в виде gemini сервиса. Что я и сделал. gemini://hugeping.tk/searx [6]


Я немного увлёкся, и проксировал вывод выдачи на stackoverflow.com так, что теперь можно искать статьи и читать их не уходя из gemini.


Скрипт вывода статьи на stackoverflow получился таким:

curl -s "$1" | htmlcut -val '(js\-post\-body|answers\-subheader)' -regexp | htmlcut -val '(js\-filter)' -regexp -not | htmlgmi -l 0 -m -n

Узнавать нужные элементы вёрстки удобно в инспекторе Firefox.


Что дальше?


За бортом осталась OAuth авторизация. Она тоже может быть оформлена в виде небольших утилит, но пока я этим не занимался.


Главное открытие, которым я хотел поделиться в этой статье, состоит в том, что победить интернет можно и это не так сложно, как кажется на первый взгляд! Да, в выдаче большинства ресурсов находится 99% шлака, но вырезать %1 нужного контента -- посильная задача. И вдруг оказывается, что доступ к нужной информации в веб не обязательно предполагает запуск браузера и приём тонн мусора в свою голову. Эта мысль вдохновляет и поощряет на дальнейшие эксперименты.


> Но на вершине самой высокой и неприступной скалы сидят золотой и красный дракон. Кто это? А это банковские сайты и госуслуги. Удастся ли приручить и их? Пока страшно об этом даже думать, правда? :)


P.S. Edited: 2021-02-09 06:27:39


https://habr.com/ru/post/541196/ [1]

https://github.com/gl00my/clearweb/tree/master/htmlcut [2]

https://github.com/gl00my/clearweb/tree/master/htmlgmi [3]

gemini://rawtext.club/~tolstoevsky/ [4]

https://github.com/gl00my/clearweb/tree/master/searx [5]

gemini://hugeping.tk/searx [6]

-- Response ended

-- Page fetched on Fri Apr 19 07:57:52 2024