From 77e7e718dea162267fd4f1e86e9314ac80749a9f Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Thu, 14 Feb 2013 18:28:36 +0000 Subject: updated autoimport for radio stimme diff --git a/rhimport-rs b/rhimport-rs index fc9454a..2ed45f7 100755 --- a/rhimport-rs +++ b/rhimport-rs @@ -32,6 +32,7 @@ use File::Fetch; use IO::Handle; use IPC::Open3; use HTML::Entities; +use LWP::Simple; use lib '/usr/local/share/rhimport/'; use rhimport; @@ -56,45 +57,82 @@ if($#ARGV >= 0 && $ARGV[0] eq 'last') { my $user = `/usr/bin/id -un`; $user =~ s/\n//; my $group = "radioStimm"; +my %week_table = ( 1 => 2, 2 => 5, 3 => 2, 4 => 5 ); my $dbh = DBI->connect("DBI:mysql:$DB:$DBHOST","$DBUSER","$DBPW") or die "Database Error: $DBI::errstr"; my @allowed_dbs = rhimport::get_dropboxes($dbh, $user, $group); -if(scalar(@allowed_dbs) != 2) { - print "found more or less than 2 Dropboxes for this group?!\n"; +my $dropbox = ""; +my $to_cart = 0; +foreach(@allowed_dbs) { + if($_->{'NAME'} =~ /^autoimport/) { + $dropbox = $_->{'PATH'}; + $to_cart = $_->{'TO_CART'}; + } +} +if(!$to_cart) { + print "no dropbox found!\n"; + $dbh->disconnect(); + exit 1; +} + +my $curweek = get("http://airplay/curweek.php"); +if(!defined $curweek || $curweek !~ /Week \d/ ) { + print "can't fetch current week info!\n"; + $dbh->disconnect(); + exit 1; +} + +$curweek =~ s/^.*Week (\d).*$/$1/; +if($curweek < 1 || $curweek > 4) { + print "current week($curweek) out of bounds!\n"; $dbh->disconnect(); exit 1; } +my $nextweek = $curweek == 4 ? 1 : $curweek + 1; + +my @today = Date::Calc::Today(); +print "today: " . Date::Calc::Date_to_Text(@today) . "\n"; + +my $dow = Date::Calc::Day_of_Week(@today); +my @import_date = Date::Calc::Standard_to_Business(@today); + +if($dow <= $week_table{$curweek}) { + print "We are in week $curweek - broadcast is on " . Date::Calc::Day_of_Week_to_Text($week_table{$curweek}) . "\n"; + $import_date[2] = $week_table{$curweek}; + @import_date = Date::Calc::Business_to_Standard($import_date[0], $import_date[1], $import_date[2]); +} else { + print "We are in week $curweek - broadcast was on " . Date::Calc::Day_of_Week_to_Text($week_table{$curweek}) . "\n"; + print " next week is $nextweek - broadcast is on " . Date::Calc::Day_of_Week_to_Text($week_table{$nextweek}) . "\n"; + $import_date[2] = $week_table{$nextweek}; + @import_date = Date::Calc::Business_to_Standard(@import_date); + @import_date = Date::Calc::Add_Delta_Days(@import_date, 7); +} +print "day of next Radio Helsinki broadcast: " . Date::Calc::Date_to_Text(@import_date) . "\n"; -my $idx = 0; -my $idx_reb = 1; -if(($allowed_dbs[1]->{'TO_CART'} % 100) == 0) { - $idx = 1; - $idx_reb = 0; +my @broadcast_date = Date::Calc::Nth_Weekday_of_Month_Year($import_date[0], $import_date[1], 2, 1); +if(Date::Calc::Delta_Days(@broadcast_date, @import_date) > 0) { + my @tmp_date = Date::Calc::Nth_Weekday_of_Month_Year($import_date[0], $import_date[1], 2, 3); + if(Date::Calc::Delta_Days(@tmp_date, @import_date) > 0) { + @broadcast_date = @tmp_date; + } +} else { + my @tmp_date = Date::Calc::Add_Delta_YM(@broadcast_date, 0, -1); + @broadcast_date = Date::Calc::Nth_Weekday_of_Month_Year($tmp_date[0], $tmp_date[1], 2, 3); +} +print "day of latest original broadcast before next Radio Helsinki broadcast: " . Date::Calc::Date_to_Text(@broadcast_date) . "\n"; + +if(Date::Calc::Delta_Days(@broadcast_date, @today) <= 0) { + print "File won't be available by now!\n"; + $dbh->disconnect(); + exit 0; } -my $dropbox = $allowed_dbs[$idx]->{'PATH'}; -my $to_cart = $allowed_dbs[$idx]->{'TO_CART'}; -my $dropbox_reb = $allowed_dbs[$idx_reb]->{'PATH'}; -my $to_cart_reb = $allowed_dbs[$idx_reb]->{'TO_CART'}; - -my @today = Date::Calc::Standard_to_Business(Date::Calc::Today()); -$today[2] = 2; -my @broadcast_day = Date::Calc::Business_to_Standard(@today); -$today[2] = 6; -my @import_date = Date::Calc::Business_to_Standard(@today); -my @import_date_reb = Date::Calc::Add_Delta_Days($import_date[0], $import_date[1], $import_date[2], 10); -print "day of original broadcast: " . Date::Calc::Date_to_Text(@broadcast_day) . "\n"; -my @broadcast_day_last_week = Date::Calc::Add_Delta_Days($broadcast_day[0], $broadcast_day[1], $broadcast_day[2], -7); -print " or: " . Date::Calc::Date_to_Text(@broadcast_day_last_week) . "\n"; -print "day of Radio Helsinki broadcast: " . Date::Calc::Date_to_Text(@import_date) . "\n"; -print "day of Radio Helsinki rebroadcast: " . Date::Calc::Date_to_Text(@import_date_reb) . "\n"; - -my $bdtw = sprintf("%04d-%02d-%02d", $broadcast_day[0], $broadcast_day[1], $broadcast_day[2]); -my $bdtwfile = sprintf("RAST%04d%02d%02dCBA(.*)\.MP3", $broadcast_day[0], $broadcast_day[1], $broadcast_day[2]); -my $bdlw = sprintf("%04d-%02d-%02d", $broadcast_day_last_week[0], $broadcast_day_last_week[1], $broadcast_day_last_week[2]); -my $bdlwfile = sprintf("RAST%04d%02d%02dCBA(.*)\.MP3", $broadcast_day_last_week[0], $broadcast_day_last_week[1], $broadcast_day_last_week[2]); - -print "looking for files from $bdtw or $bdlw in RSS Feed\n"; + +my $id = sprintf("%04d-%02d-%02d", $import_date[0], $import_date[1], $import_date[2]) +my $bd = sprintf("%04d-%02d-%02d", $broadcast_date[0], $broadcast_date[1], $broadcast_date[2]); +my $bdfile = sprintf("RAST%04d%02d%02dCBA(.*)\.MP3", $broadcast_date[0], $broadcast_date[1], $broadcast_date[2]); + +print "looking for files from $bd in RSS Feed\n"; print " -> $RSS_URL\n"; my $feed = XML::Feed->parse(URI->new($RSS_URL)) @@ -103,51 +141,38 @@ my $feed = XML::Feed->parse(URI->new($RSS_URL)) my $file = ""; my $out_file = ""; -my $bd = $bdtw; -my $bdfile = $bdtwfile; - -while(1) { - for my $entry ($feed->entries) { - if($entry->enclosure && $entry->enclosure->type eq "audio/mpeg") { - my $ff = File::Fetch->new(uri => $entry->enclosure->url); - next unless (uc($ff->output_file) =~ $bdfile); # file not from correct day - - my $sum_title = decode_entities($entry->title); - my $sum_text = decode_entities($entry->content->body); - - my $current_file = `cat $STAT_FILE`; - if($current_file eq $ff->output_file) { - print "Already downloaded file of today\n"; - $dbh->disconnect(); - exit 0; - } - $out_file = $ff->output_file; - - print $bdfile . ": downloading " . $entry->enclosure->url . " (" . $entry->enclosure->length . " Bytes) .. "; - $file = $ff->fetch( to => '/tmp' ) or die $ff->error; - print "ok\n"; - - print "summary:\n" . $sum_title . "\n\n" . $sum_text . "\n"; - - rhimport::pv_add_note($sum_title, $sum_text, $PV_ID, sprintf("%04d-%02d-%02d", $import_date[0], $import_date[1], $import_date[2]), "1"); - print "\n"; - rhimport::pv_add_note($sum_title, $sum_text, $PV_ID, sprintf("%04d-%02d-%02d", $import_date_reb[0], $import_date_reb[1], $import_date_reb[2]), "2"); - print "\n"; - - last; +for my $entry ($feed->entries) { + if($entry->enclosure && $entry->enclosure->type eq "audio/mpeg") { + my $ff = File::Fetch->new(uri => $entry->enclosure->url); + next unless (uc($ff->output_file) =~ $bdfile); # file not from correct day + + my $sum_title = decode_entities($entry->title); + my $sum_text = decode_entities($entry->content->body); + + my $current_stat = `cat $STAT_FILE`; + my ($current_id, $current_file) = $current_stat =~ m/^(.*)\n(.*)/; + if($current_id eq $id && $current_file eq $ff->output_file) { + print "Already downloaded file of today\n"; + $dbh->disconnect(); + exit 0; } + $out_file = $ff->output_file; + + print $bdfile . ": downloading " . $entry->enclosure->url . " (" . $entry->enclosure->length . " Bytes) .. "; + $file = $ff->fetch( to => '/tmp' ) or die $ff->error; + print "ok\n"; + + print "summary:\n" . $sum_title . "\n\n" . $sum_text . "\n"; + + rhimport::pv_add_note($sum_title, $sum_text, $PV_ID, $id, "1"); + print "\n"; + + last; } - last if($file ne ""); - if($bd eq $bdtw) { - print "No Entry found from $bdtw - trying $bdlw\n"; - $bd = $bdlw; - $bdfile = $bdlwfile; - } - else { last; }; } if($file eq "" || !(-e "$file")) { - print "No Entry found from $bdtw or $bdlw or download error - "; + print "No Entry found from $bd or download error - "; if($#ARGV >= 0 && $ARGV[0] eq 'last') { print "giving up, manual import necessary!!!\n"; } else { @@ -157,7 +182,6 @@ if($file eq "" || !(-e "$file")) { } print "will import $file to dropbox $dropbox (cart=$to_cart)\n"; -print "will import $file to rebroadcast dropbox $dropbox_reb (cart=$to_cart_reb)\n\n"; my $error_cb = sub { my ($text) = @_; @@ -173,10 +197,6 @@ my $log = rhimport::clear_carts($dbh, $group, $to_cart); my $import_log; ($ret, $import_log) = rhimport::import_single($file, $dropbox, $user, 0, $error_cb); $log .= $import_log; -$import_log = rhimport::clear_carts($dbh, $group, $to_cart_reb); -$log .= $import_log; -($ret, $import_log) = rhimport::import_single($file, $dropbox_reb, $user, 0, $error_cb); -$log .= $import_log; $dbh->disconnect(); @@ -190,7 +210,7 @@ if(!$ret) { unlink($STAT_FILE); open(my $fhs, '>', $STAT_FILE); -print $fhs $out_file; +print $fhs "$id\n$out_file"; close($fhs); exit 0; -- cgit v0.10.2