#!/usr/bin/perl
use strict;
use Tk;
my $main = MainWindow->new;
$main->Label(-text => 'RDF News Reader v1.0 by <weby>')->pack;
my $box = $main->Listbox(-relief => 'sunken',
-width => -1, # Shrink to fit
-height => 5,
-setgrid => 1,
);
for (@{get_text()}) { $box->insert('end', $_) };
my $scroll = $main->Scrollbar(-command => ['yview', $box]);
$box->configure(-yscrollcommand => ['set', $scroll]);
$box->pack(-side => 'left', -fill => 'both', -expand => 1);
$scroll->pack(-side => 'right', -fill => 'y');
MainLoop;
sub parse_item
{
die "Arguments error at parse_item.\n" unless $_[0];
$_[0] =~ m|<$_[1]>(.*?)</$_[1]>|i ;
my $ret = $1;
$ret =~ s/&/&/ig;
$ret =~ s/ / /gi;
$ret =~ s/</</ig;
$ret =~ s/>/>/ig;
$ret =~ s/"/"/ig;
$ret =~ s/\%40/@/ig;
$ret =~ s/\+dot\+/./ig;
$ret =~ s/\+at\+/@/gi;
return $ret;
}
sub get_text
{
my %news_servers = ( beyond2000 => "http://beyond2000.com/b2k.rdf",
lwn => "http://lwn.net/headlines/rss",
theregister => "http://www.theregister.co.uk/tonys/slashdot.rdf",
bsdtoda => "http://www.bsdtoday.com/backend/bt.rdf",
linuxtoday => "http://linuxtoday.com/backend/my-netscape.rdf",
barrapunto => "http://barrapunto.com/gnome.rdf",
linuxgames => "http://linuxgames.com/bin/mynetscape.pl",
redcarpet => "http://redcarpet.ximian.com/red-carpet.rdf",
barrapunto => "http://barrapunto.com/barrapunto.rdf",
kuro5hin => "http://www.kuro5hin.org/backend.rdf",
quotationspage => "http://www.quotationspage.com/data/mqotd.rss",
salon => "http://www.salon.com/feed/RDF/salon_use.rdf",
advogato => "http://advogato.org/rss/articles.xml",
kde => "http://dot.kde.org/rdf",
python => "http://www.python.org/channews.rdf",
hispalinux => "http://www.hispalinux.es/backend.php",
pidog => "http://www.pigdog.org/pigdog.rdf",
internet => "http://headlines.internet.com/internetnews/prod-news/news.rss",
newsforge => "http://www.newsforge.com/newsforge.rss",
gnome => "http://www.gnomedesktop.org/backend.php",
fool => "http://www.fool.com/about/headlines/rss_headlines.asp",
slashdot => "http://slashdot.org/slashdot.rdf",
freshmeat => "http://freshmeat.net/backend/fm.rdf",
mozillazine => "http://www.mozillazine.org/contents.rdf",
dvdreview => "http://www.dvdreview.com/rss/newschannel.rss",
mozilla => "http://www.mozilla.org/news.rdf",
webreference => "http://www.webreference.com/webreference.rdf",
dictionary => "http://www.dictionary.com/wordoftheday/wotd.rss",
mempool => "http://memepool.com/memepool.rss",
bgphp => "http://news.php.net/group.php?group=php.general.bg&format=rdf");
#chomp(my @rdf = `cat php.rdf`);
$_[0] = 'slashdot';
die "get_text has no source defined\n" unless exists $news_servers{$_[0]};
chomp(my @rdf = `lynx --source "$news_servers{$_[0]}"`);
my $rdf = join '', @rdf;
my @text;
while ($rdf=~m|<(.*?)>(.*?)</\1>|ig)
{
my $ptag = $1;
my $item = $2;
while ($item=~m|<(.*?)>(.*?)</\1>|ig)
{
if (lc($1) eq 'title'){
print " * $ptag * $2\n";
push @text, " * $ptag * $2";
}
else {
print " * $ptag * \t$1: ".(parse_item($item, $1))."\n";
push @text, " * $ptag * $1: ".(parse_item($item, $1));
}
}
print "\n";
push @text, "";
#print "$item\n";
#push @text,
#"Title: ".parse_item($1, 'title'),
#"Link: ".parse_item($1, 'link'),
#"Description: ".parse_item($1, 'description'),
#"Date: ".parse_item($1, 'pubDate'),
#"";
}
return \@text;
}