• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Skript zum Download aus der ARD-Mediathek

abgdf

Guru
Hi,

wollte gestern was aus der ARD-Mediathek herunterladen. Vor einiger Zeit gab es dazu dieses Skript. Der Autor schreibt, das sei nicht mehr nötig, weil man mit einer ID aus der URL einfach so herunterladen könne. Genauer geht das so:
Code:
1. URL Mediathek, z.B. "http://www.ardmediathek.de/tv/Der-Blaue-Planet/Der-Blaue-Planet-1/Das-Erste/Video?bcastId=49529922&documentId=50144564".
2. Man braucht die documentId, hier also 50144564.
3. Dann lädt man eine Textdatei im JSON-Format herunter:

wget 'http://www.ardmediathek.de/play/media/50144564'

4. In dieser Datei hält man nach .mp4-Dateien Ausschau.
Das wollte ich noch mehr automatisieren, und hab dazu ein Perl-Skript "show_ardstreams.pl" geschrieben. Mit
Code:
show_ardstreams.pl 'http://www.ardmediathek.de/tv/Der-Blaue-Planet/Der-Blaue-Planet-1/Das-Erste/Video?bcastId=49529922&documentId=50144564'
sollte es einem direkt die Streams anzeigen. Hier wäre mal das Skript:
Code:
#!/usr/bin/perl

use warnings;
use strict;

# show_ardstreams.pl, abgdf@gmx.net
# GNU GPL, V.2, 2018

use LWP::Simple;
use Cwd;

my $MEDIATHEKURL = "http://www.ardmediathek.de/tv/Der-Blaue-Planet/Der-Blaue-Planet-1/Das-Erste/Video?bcastId=49529922&documentId=50144564";

if ($#ARGV < 0) {
    print "\nUsage: show_ardstreams.pl MEDIATHEKURL\n\n";
    exit 1;
};
$MEDIATHEKURL = $ARGV[0];
chomp($MEDIATHEKURL);

if ($MEDIATHEKURL !~ /documentId=/) {
    print "\nError: '/documentId=' has to be in MEDIATHEKURL. Aborting.\n\n";
    exit 2;
}

my $thisdir = getcwd();
my $tempdir = "$thisdir/temp";

sub getDocumentId {
    my $mediathekurl = shift;
    my @a = split(/documentId=/, $mediathekurl);
    my $b = $a[1];
    chomp($b);
    return $b;
}

sub getBcastId {
    my $mediathekurl = shift;
    my @a = split(/bcastId=/, $mediathekurl);
    my $b = $a[1];
    @a = split(/\&documentId=/, $b);
    $b = $a[0];
    return $b;
}

sub disruptJson {
    my $json = shift;
    $json =~ s/https\://g;
    $json =~ s/http\://g;
    my @a = split(/\n/, $json);
    my $i; my $u; my @b; my @c; my @d; my @e;
    my $streamurl;
    @b = ();
    # Split the Json at ":" and put the elements into a list:
    for $i (@a) {
        @c = split(/\:/, $i);
        for $u (@c) {
            push(@b, $u);
        }
    }
    # Split the broken elements at "," and put the remains into a list:
    for $i (@b) {
        @c = split(/\,/, $i);
        for $u (@c) {
            push(@d, $u);
        }
    }
    # Only keep elements with ".mp4":
    @e = grep(/\.mp4/, @d);
    @b = ();
    # Extract element-parts between quotes, "........":
    for $i (@e) {
        if ($i =~ m/"([^"]*)\.mp4/) {
            $streamurl = "http:$1.mp4";
            push(@b, $streamurl);
        }
    }
    return @b;
}

my $documentid =  getDocumentId($MEDIATHEKURL);
my $bcastid =  getBcastId($MEDIATHEKURL);

# The JSON with the streams is found at this URL:
my $json = get("http://www.ardmediathek.de/play/media/$documentid");
my @streamlist = disruptJson($json);
if ($#streamlist == -1) {
    print "Error: No streams found. Something's wrong.\n";
    exit 3;
}

print "\n";
print "Stream-list:\n";
for my $i (@streamlist) {
    print "$i\n";
}
print "\n";
Ob es funktioniert, hängt davon ab, ob die ARD diesen Mechanismus so beibehält und die JSON-Datei auch in Zukunft in diesem Format bleibt. Heute ist der 20.02.2018.
 
Hallo abgdf,

ich lade öfter die mp4 von WDR Servizezeit herunter. Das geht aber auch durch ARD Mediathek.
Schön das jetzt einfacher geht.

Danke und Grüße

Heinz-Peter
 

soyo

Hacker
Hi
Ich geh hier her :
https://mediathekviewweb.de/#

Gebe bei Suche (wie im esten Beispiel) Der blaue Planet ein.
Dann auf das Videobutton.
wähl die Qualität aus , aufs Diskettensymbol.
Läuft der Film , mit der rechten Maustaste ins Video , Video speichern .
Bestätigen wo gespeichert werden soll , schon läuft der Download , und der Tab kann geschlossen werden.
MfG soyo
 
OP
A

abgdf

Guru
Cool, danke.

Hier ist noch die Nachricht, daß beide Projekte jetzt zusammenarbeiten:
https://mediathekview.de/news/mediathekviewweb/
Erscheint hier irgendwie sinnvoll, das in einer Weboberfläche anzubieten.
 

soyo

Hacker
Hi
Sauerland schrieb:
Ich klicke in Mediathekview13 rechts auf den Film----- Film aufzeichnen.....
Hab ich früher auch benutzt .
Aber , da ich es zu selten nutzte , dauerte es immer ca. 6-10min (ich DSL2000) die Filmliste zu laden , bis ich überhaupt was suchen und anwählen konnte.(Merkwürdig ist , bis ca 90% Prozent rennt es(Ladebalken) , für den Rest braucht es die Zeit.
MfG soyo
 
Oben