#!/usr/bin/perl use strict; open FD, ") { my ($puboption, $prid, $location) = split(' '); $odi_map{"$puboption.$prid"}=$location; } close(FD) or die("odi_map: $!\n"); open FD, ") { my ($mid, $url) = split(' '); $rbx_map{$mid}=$url; } close(FD) or die("rbx_map: $!\n"); # download aliasesen # (de laatste 3 entries zijn om typo's / domheden in poms op te vangen) my %dl_aka = qw( download.omroep.nl 1 content.omroep.nl 1 video.omroep.nl 1 audio.omroep.nl 1 download.eo.nl 1 download 1 download.omrep.nl 1 download.omrep.nl. 1 ); # ODI puboption -> prefix mapping my %pathfluff = qw ( wvc1_std /internetvod/wmv wmv_bb /internetvod/wmv wmv_sb /internetvod/wmv h264_bb /internetvod/h264 h264_sb /internetvod/h264 h264_std /internetvod/h264 adaptive /internetvod/adaptive ); # Hulpfuncties sub handle_prid { my ($prid) = @_; my $happy = 0; foreach my $pubopt (qw(adaptive h264_std wvc1_std h264_bb wmv_bb h264_sb wmv_bb)) { my $p = $odi_map{"$pubopt.$prid"} || next; $p =~ s|^/ceres||; $p =~ s|^/pluto||; printf("%s %s%s\n", $prid, $pathfluff{$pubopt}, $p); $happy = 1; last; } $happy || warn "$prid: no ODI match found\n" } sub handle_odi { my ($id, $uri) = @_; my ($nop, $video, $pubopt, $prid) = split('/', $uri); my $p = $odi_map{"$pubopt.$prid"}; if ($p) { $p =~ s|^/ceres||; $p =~ s|^/pluto||; printf("%s %s%s\n", $id, $pathfluff{$pubopt}, $p); } else { warn("$id: unknown ODI prid/pubopt $prid $pubopt\n"); } } sub handle_rbx { my ($id,$url) = @_; if ($rbx_map{$id}) { my ($scheme,$host,$uri) = ($rbx_map{$id} =~ m#([^:]+)://([^/]+)(.*)# ); printf("%s /download%s\n", $id, $uri); } else { warn("$id: $url does not resolve\n"); } } sub handle_download { my ($id, $uri) = @_; printf("%s /download%s\n", $id, $uri); } sub handle_streams { my ($id, $url) = @_; $url =~ s/^[^?]*\?//; $url =~ s/[?&].*//; $url =~ s|^/||; printf("%s /media/%s\n", $id, $url); } # Mooi! Aan de slag! while (<>) { my ($nop, $id, $url) = split(/.*id\":\"(.*)\",\"url\":\"?([^"]*)\"?\}/,$_,3); my ($scheme,$host,$uri) = ($url =~ m#([^:]+)://([^/]+)(.*)# ); if ($url eq 'null') { # Er zijn mids die alleen een sub+http url hebben, # Maarja die gooien we eruit in ons filter. Dus dan # blijft er niets over. Probeer nog te matchen op PRID handle_prid($id); } elsif ($scheme eq 'odi+http' or $scheme eq 'odip+http') { handle_odi($id, $uri); } elsif ( ($scheme eq 'http' || $scheme eq 'https') && $host eq 'radiobox2.omroep.nl') { handle_rbx($id, $url); } elsif ( ($scheme eq 'http' || $scheme eq 'https' || $scheme eq 'odis+http') && $dl_aka{$host}) { handle_download($id, $uri); } elsif ($host eq 'cgi.omroep.nl' && ( $uri =~ m#/cgi-bin/streams# || $uri =~ m#/legacy# ) ) { handle_streams($id, $url) } elsif ($host =~ /content1/ ) { # dit zijn mensen die een deeplink hebben ingevuld. Zucht. $uri =~ s|^/[^/]+/[^/]+||; handle_download($id, $uri); } else { warn("$id: cannot handle $url\n"); } }