current/utils create-package-feed.pl,1.11,1.12
Fabian Keil <[email protected]> Sat, 16 Jul 2016 11:44:00 +0000
| Newsgroups | gmane.comp.web.privoxy.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/ijbswa/current/utils
In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv32698/utils
Modified Files:
create-package-feed.pl
Log Message:
create-package-feed.pl: Split script into functions
Index: create-package-feed.pl
===================================================================
RCS file: /cvsroot/ijbswa/current/utils/create-package-feed.pl,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** create-package-feed.pl 16 Jul 2016 11:43:46 -0000 1.11
--- create-package-feed.pl 16 Jul 2016 11:43:57 -0000 1.12
***************
*** 7,117 ****
my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
- #< Config START >
- my $scan_dir = shift(@ARGV)
- or die "Local package directory not specified (first argument)\n";
- my $save_rss_file = shift(@ARGV)
- or die "RSS output file path not specified (second argument)\n";
my $base_dlurl = 'https://www.privoxy.org/sf-download-mirror/';
my $maxlimit = 1000;
my $max_advertised_files = 100;
! #< Config END >
! my @Array = ();
! my $i = 0;
! my $sec;
! my $min;
! my $hour;
! my $mday;
! my $mon;
! my $year;
! my $wday;
! my $yday;
! my $isdst;
! my $target;
! my $target_sha256;
! my $target_uri;
! my $target_time;
! my $target_line;
! #
! # 1st & 2nd directory should NOT contain ANY 'FILES'. (expecting only 'Directory')
! #
! opendir(my $D1, $scan_dir) or die "Can't open 1st directory! /";
! while (my $fi1 = readdir($D1)) {
! next if ($fi1 =~ m/^\./);
! next if ($fi1 eq 'OldFiles' or $fi1 eq 'pkgsrc');
! opendir(my $D2, $scan_dir . $fi1 . '/')
! or die "Can't open 2nd directory! /$fi1";
! while (my $fi2 = readdir($D2)) {
! next if ($fi2 =~ m/^\./);
! ## start listing /OS/Version/FILE
! opendir(my $D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
! or die "Can't open 3rd directory! /$fi1/$fi2";
! while (my $fi3 = readdir($D3)) {
! next if ($fi3 =~ m/^\./);
! $target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3;
! next if (!-e $target); # skip if file is not exist
! # Get SHA-256 hash
! my $filedata;
! open($filedata, "<", $target)
! or die "Can't open '$target' to generate checksum $!";
! my $sha256 = Digest::SHA->new("SHA-256");
! $sha256->addfile($filedata);
! close($filedata);
! $target_sha256 = $sha256->hexdigest;
! # URI and Time
! $target_uri = $fi1 . '/' . $fi2 . '/' . $fi3;
! my $escaped_target_uri = $target_uri;
! $escaped_target_uri =~ s@ @%20@g;
! $target_time = (stat $target)[9];
! # RSS line
! $target_line =
! '<item><title><![CDATA[' . $target_uri . ']]></title>';
! $target_line .=
! '<description><![CDATA['
! . $target_uri
! . ' (SHA-256: '
! . $target_sha256
! . ')]]></description>';
! $target_line .=
! '<link>'
! . $base_dlurl
! . $escaped_target_uri
! . '</link><guid>'
! . $base_dlurl
! . $escaped_target_uri
! . '</guid>';
! $target_line .= '<pubDate>';
! ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
! gmtime($target_time);
! $target_line .= sprintf("%s, %s %s %d %.2d:%.2d:%.2d GMT",
! $days[$wday], $mday, $months[$mon], ($year + 1900),
! $hour, $min, $sec);
! $target_line .= '</pubDate></item>';
! $target_line .= "\n";
! # Add it to Array
! $Array[$i] = ([$target_time, $target_line]);
! $i++;
! die "maxlimit $maxlimit reached!" unless ($i < $maxlimit);
! }
! closedir($D3);
! ## end listing /OS/Version/FILE
}
! closedir($D2);
}
- closedir($D1);
! # Result = Full XML Codes
! my $result =
! '<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
--- 7,116 ----
my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
my $base_dlurl = 'https://www.privoxy.org/sf-download-mirror/';
my $maxlimit = 1000;
my $max_advertised_files = 100;
! sub generate_rss_item($$$$) {
! my ($target, $target_uri, $target_time, $target_sha256) = @_;
! my $rss_item;
! my $escaped_target_uri = $target_uri;
! $escaped_target_uri =~ s@ @%20@g;
! # RSS line
! $rss_item =
! '<item><title><![CDATA[' . $target_uri . ']]></title>';
! $rss_item .=
! '<description><![CDATA['
! . $target_uri
! . ' (SHA-256: '
! . $target_sha256
! . ')]]></description>';
! $rss_item .=
! '<link>'
! . $base_dlurl
! . $escaped_target_uri
! . '</link><guid>'
! . $base_dlurl
! . $escaped_target_uri
! . '</guid>';
! $rss_item .= '<pubDate>';
! my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
! gmtime($target_time);
! $rss_item .= sprintf("%s, %s %s %d %.2d:%.2d:%.2d GMT",
! $days[$wday], $mday, $months[$mon], ($year + 1900),
! $hour, $min, $sec);
! $rss_item .= '</pubDate></item>';
! $rss_item .= "\n";
! return $rss_item;
! }
! sub get_sha256_sum($) {
! my $file = shift;
! open(my $fd, "<", $file)
! or die "Can't open '$file' to generate checksum $!";
! my $sha256 = Digest::SHA->new("SHA-256");
! $sha256->addfile($fd);
! close($fd);
! return $sha256->hexdigest;
! }
! sub get_released_files($) {
! my $scan_dir = shift;
! my @Array = ();
! my $i = 0;
! my $target;
! my $target_sha256;
! my $target_uri;
! my $target_time;
! my $target_line;
!
! opendir(my $D1, $scan_dir) or die "Can't open 1st directory! /";
! while (my $fi1 = readdir($D1)) {
! next if ($fi1 =~ m/^\./);
! next if ($fi1 eq 'OldFiles' or $fi1 eq 'pkgsrc');
+ opendir(my $D2, $scan_dir . $fi1 . '/')
+ or die "Can't open 2nd directory! /$fi1";
+ while (my $fi2 = readdir($D2)) {
+ next if ($fi2 =~ m/^\./);
+
+ # Start listing /OS/Version/FILE
+ opendir(my $D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
+ or die "Can't open 3rd directory! /$fi1/$fi2";
+ while (my $fi3 = readdir($D3)) {
+ next if ($fi3 =~ m/^\./);
+ $target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3;
+ next if (!-e $target); # skip if file is not exist
+
+ $target_sha256 = get_sha256_sum($target);
+
+ $target_uri = $fi1 . '/' . $fi2 . '/' . $fi3;
+ $target_time = (stat $target)[9];
+
+ $target_line = generate_rss_item($target, $target_uri, $target_time, $target_sha256);
+
+ $Array[$i] = ([$target_time, $target_line]);
+ $i++;
+ die "maxlimit $maxlimit reached!" unless ($i < $maxlimit);
+ }
+ closedir($D3);
+ }
+ closedir($D2);
}
! closedir($D1);
+ return sort { @$a[0] <=> @$b[0] } @Array;
}
! sub generate_feed($) {
! my $scan_dir = shift;
!
! # Result = Full XML Codes
! my $result = '<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
***************
*** 120,143 ****
<description><![CDATA[Privoxy Releases RSS feed]]></description>
<pubDate>';
! ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime();
! $result .=
! "$days[$wday], $mday $months[$mon] "
! . ($year + 1900)
! . " $hour:$min:$sec GMT";
! $result .= '</pubDate>';
! $result .= "\n";
! # Sort Array
! my @resArray = sort { @$a[0] <=> @$b[0] } @Array;
! $i--;
! while ($max_advertised_files-- > 0 && $i >= 0) {
! $result .= $resArray[$i][1];
! $i--;
! }
! $result .= ' </channel>
</rss>';
! # Save it.
! open(my $XMLF, ">", $save_rss_file) or die "Failed to write XML file";
! print $XMLF $result;
! close($XMLF);
--- 119,154 ----
<description><![CDATA[Privoxy Releases RSS feed]]></description>
<pubDate>';
! my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime();
! $result .=
! "$days[$wday], $mday $months[$mon] "
! . ($year + 1900)
! . " $hour:$min:$sec GMT";
! $result .= '</pubDate>';
! $result .= "\n";
! my @resArray = get_released_files($scan_dir);
! my $i = @resArray - 1;
! while ($max_advertised_files-- > 0 && $i >= 0) {
! $result .= $resArray[$i][1];
! $i--;
! }
! $result .= ' </channel>
</rss>';
! return $result;
! }
!
! sub main() {
! my $scan_dir = shift(@ARGV)
! or die "Local package directory not specified (first argument)\n";
! my $save_rss_file = shift(@ARGV)
! or die "RSS output file path not specified (second argument)\n";
!
! my $result = generate_feed($scan_dir);
!
! open(my $XMLF, ">", $save_rss_file) or die "Failed to write XML file";
! print $XMLF $result;
! close($XMLF);
! }
!
! main();
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports.http://sdm.link/zohodev2dev