new ticket from slaven
[andk-cpan-tools.git] / bin / m-l-smokerpt-download.pl
blob4caa3d2277fb6c24e3d6820b92f0cc04db5805ed
1 #!/usr/bin/perl
3 # use 5.010;
4 use strict;
5 use warnings;
7 =head1 NAME
11 =head1 SYNOPSIS
15 =head1 OPTIONS
17 =over 8
19 =cut
21 my @opt = <<'=back' =~ /B<--(\S+)>/g;
23 =item B<--help|h!>
25 This help
27 =back
29 =head1 DESCRIPTION
31 m-l.org/~perl/smoke/perl/... holds one month worth of smokereports.
33 This script fetches a collection of reports and stores them in a
34 single YAML file.
36 =head1 BUGS
38 This is a one-off script with shortcuts.
40 =head1 SEE ALSO
42 m-l-smokerpt-parse.pl for parsing the contents.
44 =cut
47 use FindBin;
48 use lib "$FindBin::Bin/../lib";
49 BEGIN {
50 push @INC, qw( );
53 use Dumpvalue;
54 use File::Basename qw(dirname);
55 use File::Path qw(mkpath);
56 use File::Spec;
57 use File::Temp;
58 use Getopt::Long;
59 use Hash::Util qw(lock_keys);
61 our %Opt;
62 lock_keys %Opt, map { /([^=|!]+)/ } @opt;
63 GetOptions(\%Opt,
64 @opt,
65 ) or pod2usage(1);
67 our $DIR_URL = "http://m-l.org/~perl/smoke/perl/linux/blead_clang/";
69 use LWP::UserAgent ();
70 use POSIX ();
71 use Scalar::Util ();
72 use Text::Trim qw(trim);
73 use XML::LibXML ();
74 use YAML::Syck ();
76 my $ua = LWP::UserAgent->new;
77 my $p = XML::LibXML->new;
78 my $S;
80 my $resp = $ua->get($DIR_URL);
81 if ($resp->is_success) {
82 my $content = $resp->decoded_content;
83 my $dom = XML::LibXML->load_html(string => $content);
84 TR: for my $tr_ele ($dom->findnodes("/html/body/table/tr")){
85 my($filename_attr) = $tr_ele->findnodes("td[2]/a/\@href") or next;
86 my $filename = $filename_attr->value;
87 next TR unless $filename =~ /^rpt.*\.rpt$/;
88 my $timestamp = $tr_ele->findnodes("td[3]/.");
89 trim $timestamp;
90 my $resp = $ua->get("$DIR_URL/$filename");
91 if ($resp->is_success) {
92 my $content = $resp->decoded_content;
93 $S->{$filename}{content} = $content;
94 $S->{$filename}{timestamp} = $timestamp;
95 } else {
96 die
99 } else {
103 my $ts = POSIX::strftime "%FT%T", localtime;
104 my $outfile = __FILE__ . "-$ts.out";
105 YAML::Syck::DumpFile($outfile, $S);
107 # Local Variables:
108 # mode: cperl
109 # cperl-indent-level: 4
110 # End: