App-get_flash_videos
view release on metacpan or search on metacpan
lib/FlashVideo/Site/Mtvnservices.pm view on Meta::CPAN
# Part of get-flash-videos. See get_flash_videos for copyright.
package FlashVideo::Site::Mtvnservices;
use strict;
use FlashVideo::Utils;
use URI::Escape;
my $MTVN_URL = qr{http://\w+.mtvnservices.com/(?:\w+/)?mgid:[a-z0-9:.\-_]+};
sub find_video {
my ($self, $browser, $embed_url) = @_;
my $page_url = $browser->uri->as_string;
if($embed_url !~ $MTVN_URL) {
if($browser->content =~ m!($MTVN_URL)!) {
$embed_url = $1;
} else {
die "Unable to find embedding URL";
}
}
$browser->get($embed_url);
die "Unable to get embed URL" unless $browser->response->code =~ /^30\d$/;
my %param;
my $location = $browser->response->header("Location");
for(split /&/, (split /\?/, $location)[-1]) {
my($n, $v) = split /=/;
$param{$n} = uri_unescape($v);
}
die "No config_url/id found\n" unless $param{CONFIG_URL};
$browser->get($param{CONFIG_URL});
my $xml = from_xml($browser);
if($xml->{player}->{feed} && !ref $xml->{player}->{feed}) {
my $feed = uri_unescape($xml->{player}->{feed});
$feed =~ s/\{([^}]+)\}/$param{$1}/g;
$browser->get($feed);
return $self->handle_feed($browser->content, $browser, $page_url, $param{uri});
} elsif(ref $xml->{player}->{feed}->{rss}) {
# We must already have a feed embedded..
return $self->handle_feed($xml->{player}->{feed}->{rss}, $browser, $page_url, $param{uri});
} else {
die "Unable to find feed\n";
}
}
sub handle_full_episode {
my($self, $items, $filename, $browser, $page_url, $uri) = @_;
my @rtmpdump_commands;
foreach (@$items) {
my $item = $_;
my $isepisodesegment = ref $item->{"media:group"}->{"media:category"} eq 'ARRAY' ?
(grep { $_->{scheme} eq "urn:mtvn:playlist_uri" } @{$item->{"media:group"}->{"media:category"}})[0]->{content}
: $item->{"media:group"}->{"media:category"}->{content} eq $uri;
my $affect_counters = (grep { $_->{scheme} eq "urn:mtvn:affect_counters" } @{$item->{"media:group"}->{"media:category"}})[0];
my $iscommercial = 0;
if (defined $affect_counters && $affect_counters->{content} eq 'false') {
$iscommercial = 1;
}
( run in 0.490 second using v1.01-cache-2.11-cpan-ceb78f64989 )