Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /opt/bin/perl -w
- use strict;
- use XML::Feed;
- use LWP::Simple;
- use File::Path;
- use Fcntl ':mode';
- use open qw(:std :utf8);
- binmode(STDOUT, ":utf8");
- binmode(STDERR, ":utf8");
- my $verbose=1;
- my @jobs;
- while (<>) {
- s/#.*//; # uncomment
- next if /^\s*$/; # ignore blank lines
- if (m@^\s*(http://\S+)\s+(.*)\s*$@) {
- push @jobs, [$1,$2];
- } else {
- die "invalid line : $_";
- }
- }
- foreach my $job (@jobs) {
- my ($url, $dir) = @{$job};
- my $feed = XML::Feed->parse(URI->new($url));
- my $feed_title = $feed->title();
- $dir =~ s /%t/$feed_title/g;
- if ( ! -d $dir ) {
- mkpath($dir) or die ("$! creating $dir\n");
- }
- for my $entry ($feed->entries()) {
- my $title = $entry->title();
- my $pubdate = $entry->issued();
- my $mp3url = $entry->enclosure()->url();
- my $filename = sprintf("%s/%4.4d-%2.2d-%2.2d-%s.mp3",
- $dir ,
- $pubdate->year(), $pubdate->month(), $pubdate->day(),
- clean_name($title));
- if ( -f $filename ) {
- print STDERR "Skipped $filename\n" if $verbose >=2;
- } else {
- print STDERR "Fetching $filename\n" if $verbose;
- if (getstore ($mp3url, "$filename.$$")) {
- rename "$filename.$$", $filename;
- my $mode = (stat($filename))[2];
- $mode |= S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH;
- chmod $mode, $filename;
- } else {
- unlink "$filename.$$";
- }
- }
- 1;
- }
- 1;
- }
- sub clean_name {
- my $name=shift;
- $name =~ s{[:\\/]}{_}g;
- $name =~ s/"//g;
- return $name;
- }
- exit:
- # Local Variables:
- # mode: cperl
- # End:
Advertisement
Add Comment
Please, Sign In to add comment