Portál AbcLinuxu, 31. října 2025 16: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.
. 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žší.
 8.1.2007 15:21
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
        8.1.2007 15:21
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
         
             8.1.2007 16:47
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
        8.1.2007 16:47
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
         a za druhé jsem si nebyl jist, který komentář je původní C (právě tenhle
 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.