• XML auf der Kommandozeile parsen

    by  • 20. Januar 2013 • Uncategorized • 0 Comments

    Den heutigen Abend habe ich unter Anderem damit zugebracht, von der arte Webseite eine Anzahl Videos herunterladen zu wollen. Normalerweise nehme ich dazu MediathekView, aber diese Videos waren leider nicht drin. Nach einiger Suche habe ich dann auch die Playlist gefunden – eine XML Datei, in der sowohl die niedrige als auch die hohe Qualität der Filme vermerkt waren.

          <video id="6372" publicationStatus="ON" visual="true" openPostrollInPlayer="ON">
            <namefr>Das himmlische Kind</namefr>
            <subnamefr>Webdog ? Eine Serie mit Hund und Kegel</subnamefr>
            <fronturl>http://www.arte.tv/webdog</fronturl>
            <firstthumbnailurl>http://download.liveweb.arte.tv/o21/videoweb/thumbnails/6372/first-thumbnail-6372.jpg</firstthumbnailurl>
            <playlistvisualurls>
              <playlistvisualurl>http://download.liveweb.arte.tv/o21/videoweb/media/video/6372/6372-playlist-visual-crop.jpg</playlistvisualurl>
            </playlistvisualurls>
    rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:videoweb/stream/6372_Webdogs_Video_14_all_VA_hd.mp4
            <urlsd>rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:videoweb/stream/6372_Webdogs_Video_14_all_VA_sd.mp4</urlsd>
            <appdomainurl>http://download.liveweb.arte.tv/o21/videoweb/flash/webdog-de/</appdomainurl>
            <dateexpiration>Thu, 31 Dec 2015 00:00:00 +0100</dateexpiration>
            <dateevent>Wed, 2 Jan 2013 00:00:00 +0100</dateevent>
            <duration>202</duration>
          </video>

    Mir ging es jetzt also darum, die einzelnen HD-URLs rauszuparsen. Da ich auf Arbeit gerade viel mit Microsoft PowerShell hantiere, fiel mir ein, wie einfach das jetzt wäre:

    $videos = [XML] (Get-Content -Path video-playlist-46.xml)
    $urls = Select-XML -Content $videos -XPath "//urlHd" | % {$_.node.InnerXML}

    Den Umweg über Get-Content könnte man sich sogar noch sparen …

    Tja, nun habe ich zu Hause aber Linux. Die üblichen Verdächtigen habe ich dann gleich mal drauf angesetzt.
    grep liefert die Tags mit. awk – zumindest so, wie ich es auf die Schnelle geschrieben habe, liefert auch die ganze Zeile, also mit Tags. Bevor ich weiter mit egrep versucht habe, bzw. meine Perl Kenntnisse ausgegraben habe, befragte ich die große Datenhalde.

    Rausgekommen sind zwei Erkenntnisse:

    Das Tool xml_grep liefert dann auch schnell die gewünschten Ergebnisse:

    xml_grep urlHd video-playlist-46.xml --text_only

    Am Runterladen der Videos bin ich trotzdem gescheitert, flvstreamer fehlt wohl noch eine Option, dass es klappt. So findet er keinen Mediastream…

    About

    Baujahr 1977, Leipziger, Diplom Informatiker, verheiratet, eine Tocher, ein Hund.

    Kommentar verfassen