Portál AbcLinuxu, 18. prosince 2025 06:13
Pro čtení rss aktuálně používám mutt a pro jejich stahování kombinaci programů
rsstool a sqlite3 (+
nějaké standardní příkazy) ve vlastním scriptu. Zmínil jsem se o tom a někdo jej chtěl vidět
. Celý script je velmi jednoduchý a tady je.
Nejprve jsem si vytvořil cache pro stažené rss kanály. Je to standardní databáze sqlite3 v souboru $HOME/.rss.db:
/* Pracovní tabulka pro aktuálně stažená data */
CREATE TABLE rsstool_table (
rsstool_dl_url text,
rsstool_dl_date integer,
rsstool_site text,
rsstool_url text,
rsstool_url_md5 varchar(32),
rsstool_url_crc32 varchar(8),
rsstool_date integer,
rsstool_title text,
rsstool_title_md5 varchar(32),
rsstool_title_crc32 varchar(8),
rsstool_desc text
);
/* vlastní cache položek */
create table feeds_data
( rss_site varchar(255)
, rss_url text
, rss_title text
, rss_description text
, rss_date date
, generated boolean
);
Vlastní script vypadá takto. Největší počet řádků připadá na výpis položky
.
#!/bin/bash
# konfigurace
RSSDB="$HOME/.rss.db"
SRCDB="$HOME/.rss_sources"
MDA="maildrop $HOME/.mailfilter"
DELETE_BEFORE=7
SQL="/usr/bin/sqlite3"
GDATE="/usr/bin/date"
GREP="/usr/bin/grep"
RECODE="/usr/bin/cstocs utf8 il2"
SED="/usr/bin/sed"
FOLD="/usr/bin/fold -s"
RSSTOOL="/usr/local/bin/rsstool --sql --shtml --slf"
# výpis položky ve formátu pro mail
print_message() {
URL=$1
echo 'To: Martin Lebeda <mlebeda@centrum.cz>'
echo 'Content-Transfer-Encoding: 8bit'
echo 'Content-Type: text/plain; charset="iso-8859-2"'
echo 'X-target: rss'
$SQL $RSSDB "select 'Subject: '||rss_title from feeds_data where rss_url = '$URL'"
$SQL $RSSDB "select 'From: '||rss_site from feeds_data where rss_url = '$URL'"
echo -n "Date: "
RSSDATE=`$SQL $RSSDB "select rss_date from feeds_data where rss_url = '$URL'"`
$GDATE -R -d "1970-01-01 UTC $RSSDATE seconds"
echo
$SQL $RSSDB "select rss_description from feeds_data where rss_url = '$URL'" | $FOLD
echo
echo $URL
$SQL $RSSDB "update feeds_data set generated = 1 where rss_url = '$URL'"
}
# vlastní stažení ze seznamu kanálů
for i in `$GREP -v '^#' $SRCDB | $GREP -v '^$'`; do
$RSSTOOL "$i" | $GREP 'INSERT INTO' | $RECODE | $SED -e 's/\\'\''//g' | $SQL $RSSDB
done
# vložení nových položek do hlavní tabulky
$SQL $RSSDB " insert into feeds_data ( rss_site, rss_url, rss_title,
rss_description, rss_date, generated )
select rsstool_site, rsstool_url, rsstool_title, rsstool_desc, rsstool_date, 0
from rsstool_table
where not exists (select 1 from feeds_data where rss_url = rsstool_table.rsstool_url)" && \
# čistka
$SQL $RSSDB "delete from rsstool_table"
DELDATE=`date +%s -d -${DELETE_BEFORE}days` && \
$SQL $RSSDB "delete from feeds_data where rss_date < $DELDATE"
# vypsat nové položky
for url in `$SQL $RSSDB 'select rss_url from feeds_data where generated = 0'`; do
print_message "$url" | $MDA
done
v $HOME/.rss_sources je co řádek, to url (ukázka části):
http://www.linuxexpres.cz/modules/rss/rss.php http://www.abclinuxu.cz/auto/abc.rss http://www.abclinuxu.cz/auto/zpravicky.rss
Určitě by to chtělo pár věcí dopracovat (např. respektování kódování v hlavičce kanálu), ale jinak mi už několik měsíců spolehlivě slouží.
Tiskni
Sdílej:
rss2email nebo feed2imap?
Neumím odpovědět, neboť tyto programy neznám.
Jak se tak zběžně koukám na stránky rss2email, tak asi ano, ale je to rozhodně mnohem jednodužší.
a za druhé jsem si nebyl jist, který komentář je původní C (právě tenhle /* … */) a který přišel až s C++(//)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.