rssto: конвертація фідів у різні формати
Днями, мене знову зацікавила тема RSS додатку для браузера, але нічого путнього для себе не знайшов. Звісно, є різні розширення і програми, але в мене є ряд вимог для них:
- мінімалізм - мені не потрібен комбайн з вбудованим браузером, а лише список заголовків з певного сайту
- приватність - сучасні рішення мало приділяють уваги цьому питанню і часто пропускають сторонні запити навіть при використанні проксі
- агрегація - можливість читати новини в зручних для мене форматах
Будучи розробником, мені простіше написати власну реалізацію аніж шукати існуючу і виявляти в ній недоліки. Забігаючи на перед скажу, що подібних прототипів у мене багато (пошукати можна по відповідному тегу в репозиторіях YGGverse), але rssto - це останній з них, тим паче що сьогодні я випустив для нього оновлення 0.2
rssto - CLI утиліта конвертації RSS фідів з оцією кравлера, що дозволяє слідкувати за різними RSS фідами і зберігати їх у заданому форматі, зокрема HTML або Gemtext.
Іншими словами, дана програма читає фід по URL та зберігає його сутності у статичний файл згідно патерну, звідки його потім можна відкрити зручною для себе програмою. Особисто я користуюсь протоколом Gemini, точніше Nex, при чому експортовані дані знаходяться на локальному сервері Yggdrasil. На зображенні до цього матеріалу - зображена саме така конфігурація (на базі браузеру Yoda), тому ви бачите саме такі UI та URL, сама ж утиліта rssto - просто форматує заданий XML фід у статичний файл, із заданими налаштуваннями експорту.
Встановлення
Програма написана мовою Rust, тому тут все стандартно:
git clone https://github.com/YGGverse/rssto.git cd rssto cargo build --release sudo install target/release/rssto /usr/local/bin/rssto
Налаштування
Я спеціально навів приклад встановлення з репозиторію, тому що версія 0.2 ще не опублікована в стабільних релізах на crates.io. По цій же причині, не буду детально описувати усі доступні опції (можна подивитись з `rssto --help`), але в цілому розповім про базові принципи конфігурації.
Файл конфігурації
Перше, що потрібно зробити - це створити файл конфігурації, який потрібен для запуску rssto. Актуальний приклад конфігурації доступний в репозиторії:
# якщо дана опція вказана, rssto працюватиме як фоновий демон а не разовий конвертор, # тобто оновлюватиме фіди із заданим інтервалом в секундах update = 60 # налаштування каналу для імпорту даних [[feed]] # URL шлях до фіду, як на прикладі url = "https://assets.censor.net/rss/censor.net/rss_uk_news.xml" # куди зберігати експортовані дані storage = "./public/censor.net/rss_uk_news" # у яких форматах експортувати дані # ці теки є в репозиторії, ви можете вказати на базі них власні патерни, використовуючи макроси templates = ["./template/html","./template/gmi"] # обмежити кількість сутностей в каналі (стандартно стільки, скільки є у фіді) list_items_limit = 20 # формати часу для відповідних макросів, залежатимуть від вашої локалі pub_date_format = "%Y/%m/%d %H:%M:%S %z" last_build_date_format = "%Y/%m/%d %H:%M:%S %z" time_generated_format = "%Y/%m/%d %H:%M:%S %z" # додайте інші канали по аналогії #[[feed]]
Опція "templates" дозволяє використовувати свої шаблони для експорту але тут важливо зберігати поточну структуру їх файлової системи, утім можна довільно змінювати сам вміст шаблонів. Нище наводжу перелік макросів що підтримуються даною версією:
index
- {last_build_date} - час генерації статичної версії фіду (програмою)
- {items} - список сутностей каналу, кожну з яких відформатовано за шаблоном "index/item"
index/item
Systemd
Програмою rssto можна користуватись як конвертором, але особисто в мене вона працює на фоні, постійно оновлюючи фіди з інтервалом в одну годину (update = 3600).
Щоб запустити її на фоні, створімо новий сервіс:
#/etc/systemd/system/rssto.service [Unit] After=network-online.target Wants=network-online.target [Service] Type=simple User=rssto Group=rssto # розкоментуйте та вкажіть актуальний рівень дебагу # опція "NO_COLOR" вимикає ANSI сутності для запису журналу у файл # Environment="RUST_LOG=DEBUG" # Environment="NO_COLOR=1" ExecStart=/usr/local/bin/rssto -c /path/to/config.toml # якщо не використовується, можна вказати null StandardOutput=file:///home/rssto/debug.log StandardError=file:///home/rssto/error.log [Install] WantedBy=multi-user.target
- значення "User" і "Group" та шляхів у мене вказані як користувач створеного мною сервера [Nexy](https://github.com/YGGverse/nexy), але якщо він у вас окремим обліковим записом, то створіть його командою `useradd -m rssto`
- `sudo systemctl enable rssto` - додати до авто-запуску при старті системи
- `sudo systemctl start rssto` - запуск
- `sudo systemctl status rssto` - перевірка статусу