Преамбула Для отслеживания RSS удобно использовать так называемые программы-агрегаторы.
Также на данный момент набрали популярность онлайн-агрегаторы, такие как Google Reader. Но бывают случаи, когда их функционал избыточен, например, если вам нужно мониторить определенный канал в течение суток или нескольких дней и нет желания засорять свои агрегаторы временными ссылками.
Вот и мне понадобился такой инструмент. Инструмент должен был решать следующие задачи: - уведомлять об обновлениях - возможность быстрого перехода по ссылке - не хранить данные, сессии и т.п.
Вот что произошло в результате:
О том, как это сделать, читайте ниже.
Консоль
Первое, что мне удалось найти, это rsstail. rsstail — консольная программа, позволяющая отслеживать обновления ленты в режиме реального времени.Эта программа выполняет свои функции на все сто, но, как оказалось, переключаться на консоль и искать последние записи неудобно.
Графическое приложение
Далее последовала попытка подойти с другой стороны — найти простейшие графические ридеры.Результат этих поисков показал, что большинство даже самых простых ридеров являются полноценными агрегаторами и их функционал слишком избыточен для такой простой задачи, как отслеживание одного канала.
Объединение графики и консоли
Попробуем прикрепить к rsstail какой-нибудь модуль графических уведомлений (трей).Пытался: — notify-send (не подходит, т.к.
события мыши не обрабатываются) - gtrayicon (работает как триггер: включается/выключается, после запуска нельзя изменить всплывающую подсказку) — zenity (была попытка использовать ключ --notification, но этот режим пока не до конца реализован) На этом поиски закончились; задача получить простую фид-ридер оказалась не такой простой.
Давайте напишем сценарий!
Ну здесь у нас почти нет границ! Весь код я постарался закомментировать, чтобы не составило труда разобраться и переделать под себя.
Поместите значок сообщения в трее
Теги: #linux #настройка Linux #ruby #ubuntu #rss #feeds #rsstail #tray#!/usr/bin/env ruby #scriptname: libs/rsstray.rb require 'gtk2' browser = 'libs/browser.sh' # signal is using for pushing commands to the main thread signal = Queue.new # Create tray icon si = Gtk::StatusIcon.new # Choose icon image si.icon_name = 'application-rss+xml' # Hide tray icon si.visible = false # Bind action mouse button si.signal_connect('activate') { signal.push('open') } # Bind menu mouse button si.signal_connect('popup-menu') { if signal.num_waiting != 0 then signal.push('') end } # Main thread that reads data from pipe Thread.start do
-
Плати Налоги — Спи Спокойно
19 Oct, 24 -
Искусство Программирования. Выпуск №2.
19 Oct, 24 -
Подземелья Киева
19 Oct, 24