/usr/share/perl5/FlashVideo/Site/Itv.pm is in get-flash-videos 1.25~git2012.06.27-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | # Part of get-flash-videos. See get_flash_videos for copyright.
package FlashVideo::Site::Itv;
use strict;
use FlashVideo::Utils;
use HTML::Entities;
sub find_video {
my ($self, $browser, $page_url, $prefs) = @_;
my($id) = $browser->uri =~ /Filter=(\d+)/;
die "No id (filter) found in URL\n" unless $id;
$browser->post("http://mercury.itv.com/PlaylistService.svc",
Content_Type => "text/xml; charset=utf-8",
Referer => "http://www.itv.com/mercury/Mercury_VideoPlayer.swf?v=1.5.309/[[DYNAMIC]]/2",
SOAPAction => '"http://tempuri.org/PlaylistService/GetPlaylist"',
Content => <<EOF);
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<tem:GetPlaylist xmlns:tem="http://tempuri.org/" xmlns:itv="http://schemas.datacontract.org/2004/07/Itv.BB.Mercury.Common.Types" xmlns:com="http://schemas.itv.com/2009/05/Common">
<tem:request>
<itv:RequestGuid>FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF</itv:RequestGuid>
<itv:Vodcrid>
<com:Id>$id</com:Id>
<com:Partition>itv.com</com:Partition>
</itv:Vodcrid>
</tem:request>
<tem:userInfo>
<itv:GeoLocationToken>
<itv:Token/>
</itv:GeoLocationToken>
<itv:RevenueScienceValue>scc=true; svisit=1; sc4=Other</itv:RevenueScienceValue>
</tem:userInfo>
<tem:siteInfo>
<itv:AdvertisingRestriction>None</itv:AdvertisingRestriction>
<itv:AdvertisingSite>ITV</itv:AdvertisingSite>
<itv:Area>ITVPLAYER.VIDEO</itv:Area>
<itv:Platform>DotCom</itv:Platform>
<itv:Site>ItvCom</itv:Site>
</tem:siteInfo>
</tem:GetPlaylist>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
EOF
# We want the RTMP url within a <Video timecode=...> </Video> section.
debug $browser->content;
die "Unable to find <Video> in XML" unless $browser->content =~ m{<Video timecode[^>]+>(.*?)</Video>}s;
my $video = $1;
# Parse list of availible formats and lookup their resolutions
my %formats;
# Normal format for catchup service
while ($video =~ m/(mp4:[^\]]+_[A-Z]+([0-9]{3,4})_(16|4)[-x](9|3)[^\]]*.mp4)/gi)
{
$formats{$2} = { video => $video, playpath => $1, ratio => "$3x$4" };
}
# alternative formats when download available immediately after shows
while ($video =~ m/(mp4:[^\]]+-([0-9]{3,4})kbps.mp4)/gi)
{
$formats{$2} = { video => $video, playpath => $1, ratio => "16x9" };
}
while ($video =~ m/(mp4:[^\]]+-([0-9]{3,4})kbps.\d+.mp4)/gi)
{
$formats{$2} = { video => $video, playpath => $1, ratio => "16x9" };
}
my @rates = sort { $a <=> $b } keys(%formats);
my $cnt = $#rates;
die "Unable to find video in XML" unless $cnt >= 0;
my $q = $prefs->{quality};
if ( $q =~ /^\s*\d+\s*$/) {
my $rate = $rates[0];
foreach (@rates) {
if ( $q >= $_ )
{ $rate = $_;}
}
$q = $rate;
}
else {
my $num = {high =>int($cnt), medium => int(($cnt+1)/2), low => 0}->{$q};
if (! defined $num ) {
$num = int($cnt);
}
$q = $rates[$num];
}
my $format = $formats{$q};
if ( ! defined($format)) {
$format = $formats{$rates[int($cnt)]};
}
$video = $format->{"video"};
my $rtmp = decode_entities($video =~ /base="(rtmp[^"]+)/);
my($playpath) = $format->{"playpath"};
my($flv) = $playpath =~ m{/([^/]+)$};
return {
rtmp => $rtmp,
playpath => $playpath,
flv => $flv,
swfhash($browser, "http://www.itv.com/mercury/Mercury_VideoPlayer.swf")
};
}
1;
|