Portál AbcLinuxu, 3. července 2025 04:27
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 který přišel až s C++(//
)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.