Portál AbcLinuxu, 3. července 2025 04:27

Stahování rss

8.1.2007 09:53 | Přečteno: 1115× | blog | poslední úprava: 9.1.2007 07:57

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ží.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

8.1.2007 10:25 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: Stahování rss
Odpovědět | Sbalit | Link | Blokovat | Admin
Takže to dělá zhruba to samé jako rss2email nebo feed2imap? :-)
Weblate - překládání přes web | Gammu SMSD - posílání SMS | Blog
8.1.2007 13:21 Martin Lebeda | skóre: 22 | blog: Martinuv_blog | Plzeň
Rozbalit Rozbalit vše Re: Stahování rss

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žší.

Josef Kufner avatar 8.1.2007 15:43 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Stahování rss
rss2email používám už hodně dlouho. Má pár chybiček, ale jinak je celkem fajn.
Hello world ! Segmentation fault (core dumped)
David Watzke avatar 8.1.2007 15:21 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Stahování rss
Odpovědět | Sbalit | Link | Blokovat | Admin
CSS komentáře v Bashi, docela fun :-D
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
8.1.2007 16:12 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Stahování rss
CSS? Spíš C++, ne?
David Watzke avatar 8.1.2007 16:47 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Stahování rss
CSS snad ne?
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Josef Kufner avatar 8.1.2007 17:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Stahování rss
Ehm, nehádejte se, tyhle komentáře fungují jak v CSS tak C++ i C, ale v bashi ne.
Hello world ! Segmentation fault (core dumped)
8.1.2007 20:10 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Stahování rss
Fungují, ale komentáře ve stylu C nebo C++ se jim snad říká, ale ve stylu CSS jsem slyšel (vlastně četl) poprvé. A mezi C a C++ jsem se rozhodl snadno – za prvé, C++ se s CSS rýmuje :-) a za druhé jsem si nebyl jist, který komentář je původní C (právě tenhle /* … */) a který přišel až s C++(//)
9.1.2007 07:56 Martin Lebeda | skóre: 22 | blog: Martinuv_blog | Plzeň
Rozbalit Rozbalit vše Re: Stahování rss
Sorry - to je tím, že jsem to dopisoval až pro veb, v původním souboru nejsou.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.