diff options
Diffstat (limited to 'knewsticker-scripts/newsrss.pl')
-rw-r--r-- | knewsticker-scripts/newsrss.pl | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/knewsticker-scripts/newsrss.pl b/knewsticker-scripts/newsrss.pl new file mode 100644 index 0000000..7bfade3 --- /dev/null +++ b/knewsticker-scripts/newsrss.pl @@ -0,0 +1,100 @@ +#!/usr/bin/perl -w + +# This file is not released under any specific License. All Licenses, which +# might be requirered by knewsticker are explicitly accepted by the author +# whenver this file comes with knewsticker. +# Commonly this file simply underlies the regulations of international +# copyright. This file is copyrighted by anonymous coder .< bio@gmx.net>, A lot +# of help has been offered to me by malte, so thank him as well + + +use News::NNTPClient; +use POSIX qw(strftime); +use MIME::Words qw(:all); + +# Enter your newsserver here, or set it in your /etc/nntpserver +$host = "news.chello.at"; + +#set EVERY group you wish to check here. Make sure you seperate them by one +#whitespace only. At present Knewsticker only handles ONE group per file, so +#please DO NOT SET MORE THAN 1 GROUP. It will break this scripts functionality +@groups = qw(at.linux); + +#Specify here how many articles should be checked for EACH group you entered. +#The default value is 10. which means the newest 10 subjects are displayed +$get=10; + +# STOP do NOT continue unless you KNOW what you are doing +# STOP STOP STOP STOP STOP STOP STOP STOP STOP +for my $group (@groups) { +$head ="<?xml version=\"1.0\"?>\n<\!DOCTYPE rss PUBLIC \"-//Netscape + Communications//DTD RSS 0.91//EN\" + \"http://my.netscape.com/publish/formats/rss-0.91.dtd\">\n<rss + version=\"0.91\">\n"; +$static="<title> " . $group . " RSS file + </title>\n<link>http://www.kde.org</link>\n<description>This +is an automatically generated file using the NNTP to RSS generator for +Knewsticker.</description>\n<language>en-us</language>\n"; + +print $head; +print "<channel>\n"; +print $static; +$now_string = strftime "%a, %d %b %Y %H:%M:%S %z", localtime; +print "<pubDate>" . $now_string . "</pubDate>\n"; + +sub read_etc_nntpserver { +my $rc; + open(FH, '</etc/nntpserver') || return undef; + $rc = scalar(<FH>); + close(FH); + $rc =~ s/\s*$//; + return $rc || undef; +} +$t = read_etc_nntpserver(); +if(!defined $t) { +$t = $host; +} + +$c = new News::NNTPClient($t); + +(undef, $last) = ($c->group($group)); +$thislast = ($last-$get); + +@b = map { $_ = decode_mimewords $_ } $c->xhdr("Subject", $thislast, $last); +@c= map { s/&/&/g; s/\(/(/g; s/\)/)/g; s/@/@/g; s/</</g; + s/>/>/g; $_ } @b; +foreach (@c) { /(\d+)\s*(.*)\s*/ and $postings{$1} = {'subject' => $2}; } + +@b = map { $_ = decode_mimewords $_ } $c->xhdr("From", $thislast, $last); +@c= map { s/&/&/g; s/\(/(/g; s/\)/)/g; s/@/@/g; s/</</g; + s/>/>/g; $_ } @b; +foreach (@c) { /(\d+)\s*(.*)\s*/ and $postings{$1}->{'from'} = $2; } + +@b = $c->xhdr("Message-ID", $thislast, $last); +@c= map { s/&/&/g; s/\(/(/g; s/\)/)/g; s/</</g; s/>/>/g; $_ } + @b; +foreach (@c) { /(\d+)\s*(.*)\s*/ and $postings{$1}->{'message-id'} = $2; } + +for ($i = $thislast; $i != $last+1; $i++) { +@b = $c->body($i); +@c= map { s/&/&/g; s/\(/(/g; s/\)/)/g; s/</</g; s/>/>/g; $_ } + @b; +@d= (grep !/^$/, @c)[0..3]; +foreach (@d) { $postings{$i}->{'body'} .= $_ ; } + +} + +foreach my $id (sort keys %postings) +{ + print "<item>\n"; + print "<title>" . $postings{$id}->{'subject'} . + "</title>\n"; + print "<link>nntp://" . $t ."/" . $group ."/" . + $postings{$id}->{'message-id'} ."</link>\n"; + print "<description> This article has been posted by " . +$postings{$id}->{'from'} . " containing:\n " . $postings{$id}->{'body'} +. "</description>\n</item>\n"; +} +print "</channel>\n</rss>\n"; +%postings =(); +} |