URL aufrufen und XML auslesen

  • Hallo, ich möchte mir ein tool für OTR (http://www.onlinetvrecorder.com/downloader/api/index2.php ) schreiben um Aufnahmen zu Programmieren und den Download zu Automatisieren.

    Hierzu giebt es eine API bei OTR, diese kann man sich ansehen unter der o.g. Adresse.

    ich müsste eine URL aufrufen und dann die XML die zurückkommt auslesen und in einer GUI formatiert anzeigen.

    ich habe hier noch keinerlei erfahrungen, evtl hat ja jemand lustr sich das mit mir zusammen mal zu gemüte zu führen.

    Hier zu Beispiel mal die URL zum auflisten des EPG´s:

    http://www.onlinetvrecorder.com/index.php?aktion=search&api=true&future=true&searchterm=Verbotene Liebe

    Folgendes bekomme ich zurück geliefert:

    Dieses XML File müsste ich dann auslesen und Formatiert anzeigen

    Also so ungefähr:
    Suche nach "Verbotene Liebe"

    Sender Start Ende Link
    ARD 17:55 18:05 http://www.onlinetvrecorder.com/?aktion=createJob&byid=true&epgid=NDc3NDQ0OA==

  • Hallo Xenobiologist,
    danke für die schnelle antwort, aber ich habe in der hinsicht noch nie was gemacht, dadurch weiss ich noch nicht mal wie ich den request abschicke
    und so, deshalb brauche ich auch eure hilfe, bzw wie ich das ganze aufbauen muss

  • Benutz doch einfach die xml udf.

    Wenn du nähere Infos brauchst, bin heute im Skype erreichbar.

    Benutzer: Prajoss

    Hab mich damit schon befasst, weil ich das selbst gebraucht habe und das dauert, gibt einige böse Dinger <.<

    Gruß

    Prajoss

    PS: Wenn du kein Skype hast, dann auch im ICQ: 338-302-256 erreichbar.

    "Never touch a running System!"

  • Hi,
    so bekommst du schon mal nacheinander die Daten ausgelesen:
    Leider sind meine XPath Kenntnisse begrenzt, sonst würde ich dir noch etwas bauen damit du die Unterpunkte einzeln auslesen kannst.

    [autoit]

    HttpSetUserAgent("Firefox") ;das die immer den autoit user agenten blockieren *kopf schüttel*

    [/autoit][autoit][/autoit][autoit]

    $sXML = InetRead("http://www.onlinetvrecorder.com/index.php?aktion=search&api=true&future=true&searchterm=Verbotene%20Liebe")
    $sXML = BinaryToString($sXML)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $oDOM = ObjCreate("Msxml2.DOMDocument.6.0")
    $oDOM.loadXML($sXML)

    [/autoit][autoit][/autoit][autoit]

    For $objNode In $oDOM.selectNodes("/OTR/SHOW")
    For $objNodeChild In $objNode.childNodes()
    ConsoleWrite($objNodeChild.Text() & @CRLF)
    Next
    Next

    [/autoit]
  • bin heute abend erst sehr spät zuhause, hast du evtl morgen mal zeit? muss heute bis ca 0 uhr arbeiten

    • Offizieller Beitrag

    Warum so kompliziert, dies sollte dir ungefähr zeigen wie es gehen kann.

    Spoiler anzeigen
    [autoit]

    #include <INet.au3>
    ;~ Global $source = _INetGetSource('http://www.onlinetvrecorder.com/index.php?aktion=search&api=true&future=true&searchterm=Verbotene%20Liebe')
    Global $source = ClipGet()
    ;~ ConsoleWrite($source & @CRLF)
    Global $tag_A = StringSplit('EPGID,STATION,BEGIN,NICEBEGIN', ',', 2)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($tag_A) - 1
    $re = StringRegExp($source, '(?s)<' & $tag_A[$i] & '>(.*?)</' & $tag_A[$i] & '>', 3)
    If @error Then Exit(0)
    ConsoleWrite($tag_A[$i] & ' = ' & $re[0] & @CRLF)
    Next

    [/autoit]
  • Danke Xenobiologist, sieht schon mal ganz gut aus, das gibt mir nun das erste ereigniss aus, jetzt muss ich noch den Renst hinbekommen

  • Entweder bin ich blind oder blöde, wie bekomme ich da nun alle ergebnisse die in der XML stehen als Array um diese in eine Listbox zu schreiben?

    • Offizieller Beitrag

    Die Infos sind doch vorhanden im Array aus StringRegexp.

    Spoiler anzeigen
    [autoit]

    ;~ Global $source = _INetGetSource('http://www.onlinetvrecorder.com/index.php?aktion=search&api=true&future=true&searchterm=Verbotene%20Liebe')
    Global $source = ClipGet()
    ;~ ConsoleWrite($source & @CRLF)
    Global $tag_A = StringSplit('EPGID,STATION,BEGIN,NICEBEGIN', ',', 2)
    Global $s

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($tag_A) - 1
    $re = StringRegExp($source, '(?s)<' & $tag_A[$i] & '>(.*?)</' & $tag_A[$i] & '>', 3)
    If @error Then Exit (0)
    $s = ''
    For $y = 0 To UBound($re) - 1
    $s &= $re[$y] & @TAB
    Next
    ConsoleWrite($tag_A[$i] & ' = ' & $s & @CRLF)
    Next

    [/autoit]
  • Ist echt schon mal gut, muss ich blos noch anders formatieren,

    Ich bräuchte das ganze so

    Array:
    0 EPGID
    1 TITLE
    2 NICEBEGIN
    3 NICEEND

    nächster Datensatz

    dann könnte 8ich das ganze in einem Listview ausgeben

    Sollte dann so aussehen:

    Sender Titel Datum Start Ende

    ARD Verbotene Liebe 06.05.2011 18:00 18:25

    usw

    Wenn ich einen eintrag anklicke sollte mir die EPGID zurückgegeben werden
    damit ich dann weiter verfahren kann

  • hallo,

    hier auch noch ein sehr schöner Weg. Dazu brauchst du die _XMLDomWrapper.au3 UDF >hier <

    Gruß
    Pre

    Spoiler anzeigen
    [autoit]

    #include <_XMLDomWrapper.au3>
    #include <Array.au3>
    #include <Inet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $array = _get_otv("Verbotene Liebe")
    _ArrayDisplay($array)

    [/autoit] [autoit][/autoit] [autoit]

    Func _get_otv($sSearchstring)
    $sSearch = _INetExplorerCapable($sSearchstring)
    $sUrl = "http://www.onlinetvrecorder.com/index.php?aktion=search&api=true&future=true&searchterm=" & $sSearch
    $strXML = _INetGetSource($sUrl)
    _XMLLoadXML($strXML, "")
    $sEpgid = "//OTR/SHOW";
    Return _XMLGetChildren($sEpgid)
    EndFunc ;==>_get_otv

    [/autoit]
    • Offizieller Beitrag

    Ja, auch schön. Oder sowas.

    Spoiler anzeigen
    [autoit]

    Global $source = ClipGet()
    ;~ ConsoleWrite($source & @CRLF)
    Global $tag_A = StringSplit('EPGID,STATION,BEGIN,NICEBEGIN', ',', 2)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($tag_A) - 1
    $value_A = _getValue($tag_A[$i])
    For $y = 0 To UBound($value_A) - 1
    ConsoleWrite($tag_A[$i] & ' = ' & $i & ' = ' & $value_A[$y] & @CRLF)
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _getValue($tag)
    $dataSet_A = StringRegExp($source, '(?s)<' & $tag & '>(.*?)</' & $tag & '>', 3)
    If @error Then Exit (0)
    Return $dataSet_A
    EndFunc ;==>_getValue

    [/autoit]
  • Hallo,ich versuche nun seit einer geschlagenen stunde die daten in ein Array zu bekommen, aber da ich hiermit noch nie etwas gemacht habe, bekomme ich es irgendwie nicht so wirklich hin!

    hier mal was ich bis jetzt hab:

  • Und auch so bekomme ich nur den letzten Wert ins array, was mache ich hier falsch?

    [autoit]


    #include <Inet.au3>
    #include <Array.au3>
    Global $source = _INetGetSource('http://www.onlinetvrecorder.com/index.php?aktion=search&api=true&future=true&searchterm=Verbotene Liebe')
    ;~ ConsoleWrite($source & @CRLF)
    Global $tag_A = StringSplit('EPGID,STATION,TITLE,NICEBEGIN,NICEEND', ',', 2)

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To UBound($tag_A) - 1
    $value_A = _getValue($tag_A[$i])
    For $y = 0 To UBound($value_A) - 1
    Dim $ErgArray[UBound($value_A)][UBound($tag_A)]
    ConsoleWrite($tag_A[$i] & ' = ' & $i & ' = ' & $value_A[$y] & @CRLF)
    $ErgArray[$y][$i]=$value_A[$y]
    Next
    Next
    _ArrayDisplay($ErgArray)
    Func _getValue($tag)
    $dataSet_A = StringRegExp($source, '(?s)<' & $tag & '>(.*?)</' & $tag & '>', 3)
    If @error Then Exit (0)
    Return $dataSet_A
    EndFunc ;==>_getValue

    [/autoit]
    • Offizieller Beitrag

    Bei jedem Dim Befehl wird der Inhalt des Arrays gelöscht, deshalb steht nur der letzte Eintrag im Array.
    Zur Größenänderung des Arrays benutzt man ReDim :!:

    Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ; 2011-05-07 21:28:39
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    #include <Inet.au3>
    #include <Array.au3>
    Global $source = _INetGetSource('http://www.onlinetvrecorder.com/index.php?aktion=search&api=true&future=true&searchterm=Verbotene Liebe')
    ;~ ConsoleWrite($source & @CRLF)
    Global $tag_A = StringSplit('EPGID,STATION,TITLE,NICEBEGIN,NICEEND', ',', 2)
    Dim $ErgArray[1][1]
    For $i = 0 To UBound($tag_A) - 1
    $value_A = _getValue($tag_A[$i])
    For $y = 0 To UBound($value_A) - 1
    ReDim $ErgArray[UBound($value_A)][UBound($tag_A)]
    ConsoleWrite($tag_A[$i] & ' = ' & $i & ' = ' & $value_A[$y] & @CRLF)
    $ErgArray[$y][$i]=$value_A[$y]
    Next
    Next
    _ArrayDisplay($ErgArray)
    Func _getValue($tag)
    $dataSet_A = StringRegExp($source, '(?s)<' & $tag & '>(.*?)</' & $tag & '>', 3)
    If @error Then Exit (0)
    Return $dataSet_A
    EndFunc ;==>_getValue

    [/autoit]