\1 -> $1
[opensuse:packagehunter.git] / rss / cpan.pl
1 #!/usr/bin/perl -w
2 use strict;
3 use XML::Parser;
4 my $pwd = `pwd`;chomp($pwd);
5 my $dn = `dirname $0`;chomp($dn);
6 push @INC,"..","$dn/../","$pwd/../";
7 require 'Notifier.pm';
8
9 my @elemstack = ();
10
11 my $name;
12 my $version;
13 my $foundcnt=0;
14
15 sub handle_start() {
16         my ($expat, $element, $attr, $val) = @_;
17         #print "START: expat: $expat, element: $element, attr: $attr, val: $val\n";
18         push @elemstack, $element;
19 }
20
21 sub handle_end() {
22         my ($expat, $element) = @_;
23         #print "END: expat: $expat, element: $element\n";
24         pop @elemstack;
25 }
26
27 sub handle_char() {
28         my ($expat, $str) = @_;
29
30         # print STDERR "$str\n";
31         if ($elemstack[$#elemstack] eq "title") {
32                 # print "DATA: " . join(".",@elemstack) . " $str\n";
33                 if ($str =~ /(.*)-([^-]*)/) {
34                         $name = $1;
35                         $version = $2;
36                         print "$name - $version\n";
37                         $version =~ s/^v(\d)/$1/;
38                         $name =~ s/perl-mail-spamassassin/spamassassin/;
39                 }
40         } elsif ($elemstack[$#elemstack] eq "link") {
41                 return unless (defined($name));
42                 $foundcnt++;
43                 return if ($version =~ /_/);
44                 return if ($version !~ /^\d/);
45                 Notifier::notify(
46                         'name'          => "perl-" . $name,
47                         'version'       => $version,
48                         'loc'           => $str,
49                         'bydoing'       => 'reading the CPAN new uploads RSS feed',
50                         'from'          => 'CPAN RSS Reader',
51                 );
52                 undef $name;
53                 undef $version;
54         } else {
55                 # print "DATA: " . join(".",@elemstack) . " $str\n";
56         }
57 }
58
59 # Create a user agent object
60
61 # Create a request
62 #my $req = HTTP::Request->new(GET => 'http://rss.sourceforge.net/sourceforge/export/rss_sfnewsreleases');
63 #my $req = HTTP::Request->new(GET => 'http://freshmeat.net/backend/fm-releases-global.xml');
64
65 my $stuff = `curl -s http://search.cpan.org/uploads.rdf`;
66 my $xmlparse = new XML::Parser(Handlers => { Start => \&handle_start, End   => \&handle_end, Char  => \&handle_char});
67 $xmlparse->parse($stuff);
68
69 die "CHANGED FORMAT?" unless ($foundcnt);