devzone.org.ua/post/rssto-konvertatsiia-fidiv-u-rizni-formaty.md
2025-11-01 14:28:20 +02:00

9.1 KiB
Raw Permalink Blame History

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

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, але якщо він у вас окремим обліковим записом, то створіть його командою useradd -m rssto
  • sudo systemctl enable rssto - додати до авто-запуску при старті системи
  • sudo systemctl start rssto - запуск
  • sudo systemctl status rssto - перевірка статусу