~sutek/+junk/fluff-transmission

« back to all changes in this revision

Viewing changes to src/update-iplayer-xml

  • Committer: sutek at evil
  • Date: 2013-03-17 22:25:50 UTC
  • Revision ID: sutek@evil.com-20130317222550-brsziyubtmytn6yp
add iplayer xml

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl -w
 
2
#----------------------------------------------------------------------
 
3
#
 
4
# iPlayer post-processing - just create RSS index
 
5
# Copy & paste from more featureful "done" script
 
6
#
 
7
# Sutek, December 2011
 
8
#
 
9
#----------------------------------------------------------------------
 
10
use strict;
 
11
use File::Find;
 
12
use Getopt::Std;
 
13
use POSIX qw(strftime);
 
14
 
 
15
my $hostname = `hostname -f`;
 
16
chomp $hostname;
 
17
 
 
18
create_rss_index("/big/iplayer/tv", "iPlayer TV");
 
19
create_rss_index("/big/iplayer/radio", "iPlayer radio");
 
20
 
 
21
sub create_rss_index {
 
22
    my ($dir, $feed_title) = @_;
 
23
    $_ = $dir;s:^/big/::;
 
24
    my $urlbase = "http://$hostname/$_";
 
25
    chdir $dir or die $!;
 
26
 
 
27
    my %xml;
 
28
    my $mime_type = 'audio/mp4';
 
29
 
 
30
    if ($dir =~ /tv/) {
 
31
        $mime_type = 'video/mp4';
 
32
        for my $flv (glob("*.flv")) {
 
33
            my $m4v = $flv;
 
34
            $m4v =~ s:flv$:m4v:;
 
35
            $m4v =~ s:_b......._default\.m4v:.m4v:;
 
36
            system('HandBrakeCLI', '-i', $flv, '-o', $m4v, '--preset', 'Apple TV 2');
 
37
            if ($? == 0) {
 
38
                unlink $flv;
 
39
            } else {
 
40
                print "\n\nConversion to MP4 failed!!!\n\n";
 
41
            }
 
42
        }
 
43
    }
 
44
 
 
45
    while (glob("*.{m4v,m4a,aac,mp4,mp3}")) {
 
46
        if (/-temp-/) {
 
47
            print "Deleting $_\n";
 
48
        unlink $_ or warn $!;
 
49
        } else {
 
50
            my ($size, $time) = (stat $_)[7,9];
 
51
        $xml{$time} = [$_, $size];
 
52
        }
 
53
    }
 
54
    my $now = strftime "%a, %d %b %Y %H:%M:%S %z", gmtime;
 
55
    open XML, ">index.xml" or die $!;
 
56
    print XML <<"!";
 
57
<?xml version="1.0" encoding="UTF-8" ?>
 
58
<rss version="2.0">
 
59
<channel>
 
60
    <title>$feed_title</title>
 
61
    <description>Automatic $feed_title downloads</description>
 
62
    <link>$urlbase/index.xml</link>
 
63
    <lastBuildDate>$now</lastBuildDate>
 
64
    <pubDate>$now</pubDate>
 
65
!
 
66
    for my $time (sort { $b <=> $a } keys %xml) {
 
67
        my ($file, $size) = @{$xml{$time}};
 
68
        my $title = $file;
 
69
        $title =~ s:\.(m4v|m4a|aac|mp4|mp3)$::;
 
70
        if ($title =~ /_(.*?)_TX(\d\d)(\d\d)(\d\d)_ITV/) {
 
71
            my @month = qw(_ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
 
72
            my $date = int($2) . "-" . $month[$3] . "-20$4";
 
73
            $title = $1;
 
74
            $title =~ s:-: :g;
 
75
            $title =~ s:\b([A-Z])([A-Z]+)\b:$1 . lc($2):eg;
 
76
            $title .= " ($date)";
 
77
        } else {
 
78
            $title =~ s:_: :g;
 
79
            $title =~ s:b[0-9a-z]{7} default$::;
 
80
        }
 
81
        my $url = "$urlbase/$file";
 
82
        $url =~ s: :%20:g;
 
83
        my $description = int($size / (1<<20)) . "MB";
 
84
        my $rfctime = strftime "%a, %d %b %Y %H:%M:%S %z", gmtime($time);
 
85
        print XML <<"!";
 
86
   <item>  
 
87
       <title>$title</title>
 
88
       <description>$description</description>
 
89
       <link>$url</link>
 
90
       <enclosure url="$url" length="$size" type="$mime_type" />
 
91
       <guid>$url</guid>
 
92
       <pubDate>$rfctime</pubDate>
 
93
   </item>
 
94
!
 
95
    }
 
96
    print XML <<"!";
 
97
</channel>
 
98
</rss>
 
99
!
 
100
    close XML or die $!;
 
101
}