Quelltext auslesen

  • Hallo,

    Ich habe bis jetzt folgenden Code:

    [autoit]

    $onamestart = "<live_name>"
    $onameend = "</live_name>"
    $ostatusstart = "<live_is_live>"
    $ostatusend = "</live_is_live>"
    $oviewerstart = "<live_viewers>"
    $oviewerend = "</live_viewers>"
    $ogamestart = "<game_name>"
    $ogameend = "</game_name>"

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

    $ooliveid = 2721

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

    $ourl = "http://api.own3d.tv/rest/live/status.xml?liveid=" & $ooliveid

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

    Dim $ostatus[4]

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

    $ieostatus = _IECreateEmbedded() ;IE Status Browser
    $ieostatus2 = GUICtrlCreateObj ($ieostatus, 0, 0, 0, 0) ;IE Name Object
    _IEAction ($ieostatus2, "invisible")
    _IENavigate ($ieostatus2, $ourl)
    $ostatushtml = _IEDocReadHTML ($ieostatus2)
    $ostatus[0] = _StringBetween ($ostatushtml, $onamestart, $onameend)
    $ostatus[1] = _StringBetween ($ostatushtml, $ostatusstart, $ostatusend)
    $ostatus[2] = _StringBetween ($ostatushtml, $oviewerstart, $oviewerend)
    $ostatus[3] = _StringBetween ($ostatushtml, $ogamestart, $ogamestart)

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

    $overviewlist = GUICtrlCreateListView ("Stream | Status | Viewer |Game", 800, 470)
    GUICtrlCreateListViewItem ($ostatus[0] & "|" & $ostatus[0] & "|" & $ostatus[0] & "|" & $ostatus[0], $overviewlist)

    [/autoit]

    In der ListView (letzte Zeile) steht aber überall nur 0. Ich hoffe ihr findet den Fehler :)

    MfG ExChill

  • _StringBetween gibt selbst ein (0-Basierendes) Array zurück.

    [autoit]


    $aRead = _StringBetween ($ostatushtml, $onamestart, $onameend)
    $ostatus[0] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ostatusstart, $ostatusend)
    $ostatus[1] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $oviewerstart, $oviewerend)
    $ostatus[2] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ogamestart, $ogamestart)
    $ostatus[3] = $aRead[0]

    [/autoit]

    Die Zeile soll evtl. auch eher so aussehen? :)

    [autoit]


    GUICtrlCreateListViewItem ($ostatus[0] & "|" & $ostatus[1] & "|" & $ostatus[2] & "|" & $ostatus[3], $overviewlist)

    [/autoit]

    lg chess

  • In der Zeile

    [autoit]

    $ostatus[0] = $aRead[0]

    [/autoit]

    kommt die Fehlermeldung "Subscript used with non-Array variable."

    Ja, in die letzte Zeile müssen natürlich andere Zahlen, hab da noch was anderes ausprobiert :P

  • Hab ich ja^^

    Hab folgendes davor geschrieben:

    [autoit]

    Local $ostatus[4]
    Local $aRead[1]

    [/autoit]
  • Aber _StringBetween hab ich doch richtig benutzt oder? Also die Variablen in der Klammer und so.

    Btw. das hier die Seite von der ich was auslesen will: *Klick*

  • ich hab mal

    [autoit]

    MsgBox(0," _IEDocReadHTML()", $ostatushtml)

    [/autoit]


    eingefügt, um zu gucken, ob es bis dahin stimmt und da kommt 0 dabei raus.
    Folglich liegt der Fehler schon weiter oben.
    Und _StringBetween kann ja nichts finden, wenn kein Quellcode da ist.

  • Ja, das hab ich vorhin auch gemerkt.

    Finde den Fehler einfach nicht:

    [autoit]

    $ieostatus = _IECreateEmbedded() ;IE Status Browser
    $ieostatus2 = GUICtrlCreateObj ($ieostatus, 800, 470) ;IE Status Object
    _IEAction ($ieostatus2, "invisible")
    _IENavigate ($ieostatus2, "http://api.own3d.tv/rest/live/status.xml?liveid=2721")
    $ostatushtml = _IEDocReadHTML ($ieostatus2)

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

    MsgBox (0, "Test", $ostatushtml)

    [/autoit]
  • Da ich gerade mich mit Rss-Feed beschäftige und dein Link doch verdächtig nach einer Xml aussieht :D

    würde ich dir diese UDF empfehlen: _XMLDomWrapper.au3


    Dazu gibt es hier im Board ein kleines Beispiel: Klick


    Bin nur Begeistert über die neuen vielen Möglichkeiten die sich damit bieten :thumbup:


    Edit:


    Gefühlte 2 Minuten später hast Du hier dank der Udf ein fertiges Ergebniss...

    [autoit]

    $RssArray = _GetFeedData("http://api.own3d.tv/rest/live/status.xml?liveid=2721")

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

    _ArrayDisplay($RssArray, "results")
    ;##################################################
    ; Read RSS Feed
    ;##################################################

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

    Func _GetFeedData($rss_source)
    Local $ProgressPercent
    Local $strXML = InetRead($rss_source)
    $strXML = BinaryToString($strXML, 4)

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

    Local $data_array[100][6],$AInfo
    _XMLLoadXML($strXML, "")
    Local $title_node = "//lives/live_id";
    Local $title_array = _XMLGetValue($title_node)
    Local $link_node = "//lives/live_name";
    Local $link_array = _XMLGetValue($link_node)
    Local $description_node = "//lives/live_description";
    Local $description_array = _XMLGetValue($description_node)
    Local $date_node = "//lives/live_viewers";
    Local $date_array = _XMLGetValue($date_node)

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

    ; usw....rest der werte muste selber eintippen :D

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

    For $i = 0 To UBound($title_array) - 1
    $data_array[$i][0] = $title_array[$i]
    $data_array[$i][1] = $date_array[$i]
    $data_array[$i][2] = $link_array[$i]
    $data_array[$i][3] = $description_array[$i]
    Next
    Return $data_array
    EndFunc ;==>_GetFeedData

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


    Viel Spaß ^^
    PS: Für die ganzen Leerzeichen kann ich nichts...die wirft der Editor hier unter Opera rein und ganz schön nervig ;(

    Einmal editiert, zuletzt von JaneDoe (9. Oktober 2012 um 20:49)

  • Hier jetzt mal der komplette Code:

    Der Wert in $ostatushtml stimmt jetzt schonmal (mit MsgBox getestet). Jedoch schließt sich das Fenster jetz direkt wieder...

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GuiComboBoxEx.au3>
    #include <GuiListView.au3>
    #include <Array.au3>
    #include <IE.au3>
    #include <String.au3>

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

    $gui = GUICreate("Programm", 1905, 1000)

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

    $tab = GUICtrlCreateTab (0, 0, 1920, 20)

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

    $tstreamsitem = GUICtrlCreateTabItem ("Streams") ;Tab Streams Item

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

    $onamestart = "<live_name>"
    $onameend = "</live_name>"
    $ostatusstart = "<live_is_live>"
    $ostatusend = "</live_is_live>"
    $oviewerstart = "<live_viewers>"
    $oviewerend = "</live_viewers>"
    $ogamestart = "<game_short>"
    $ogameend = "</game_short>"

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

    $ooliveid = 2721

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

    $ourl = "http://api.own3d.tv/rest/live/status.xml?liveid=" & $ooliveid

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

    $ieostatus = _IECreate ($ourl, 0, 0) ;IE Status Browser
    _IELoadWait ($ieostatus)
    $ostatushtml = _IEDocReadHTML ($ieostatus)

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

    Local $ostatus[4]
    Local $aRead[1]

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

    $aRead = _StringBetween ($ostatushtml, $onamestart, $onameend) ;Name
    $ostatus[0] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ostatusstart, $ostatusend) ;Status
    $ostatus[1] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $oviewerstart, $oviewerend) ;Viewer
    $ostatus[2] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ogamestart, $ogamestart) ;Game
    $ostatus[3] = $aRead[0]

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

    $overviewlist = GUICtrlCreateListView ("Stream | Status | Viewer |Game",1600, 20, 300, 450)
    GUICtrlCreateListViewItem ($ostatus[0] & "|" & $ostatus[1] & "|" & $ostatus[2] & "|" & $ostatus[3], $overviewlist)

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

    ;ENDE
    GUISetState(@SW_SHOW)

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

    While Sleep(10)
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]

    EDIT: Es schließt sich nicht mehr :P

    Die Tabelle ist aber jetzt komplett leer (keine Nullen).

    Einmal editiert, zuletzt von ExChill (9. Oktober 2012 um 23:36)

  • Du hast aber immernoch keine error-Abfragen drinne.

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GuiComboBoxEx.au3>
    #include <GuiListView.au3>
    #include <Array.au3>
    #include <IE.au3>
    #include <String.au3>

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

    $gui = GUICreate("Programm", 1905, 1000)

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

    $tab = GUICtrlCreateTab (0, 0, 1920, 20)

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

    $tstreamsitem = GUICtrlCreateTabItem ("Streams") ;Tab Streams Item

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

    $onamestart = "<live_name>"
    $onameend = "</live_name>"
    $ostatusstart = "<live_is_live>"
    $ostatusend = "</live_is_live>"
    $oviewerstart = "<live_viewers>"
    $oviewerend = "</live_viewers>"
    $ogamestart = "<game_short>"
    $ogameend = "</game_short>"

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

    $ooliveid = 2721

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

    $ourl = "http://api.own3d.tv/rest/live/status.xml?liveid=" & $ooliveid

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

    $ieostatus = _IECreate ($ourl, 0, 0) ;IE Status Browser
    _IELoadWait ($ieostatus)
    $ostatushtml = _IEDocReadHTML ($ieostatus)

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

    Local $ostatus[4]
    Local $aRead[1]

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

    $aRead = _StringBetween ($ostatushtml, $onamestart, $onameend) ;Name
    If Not @error Then $ostatus[0] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ostatusstart, $ostatusend) ;Status
    If Not @error Then $ostatus[1] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $oviewerstart, $oviewerend) ;Viewer
    If Not @error Then $ostatus[2] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ogamestart, $ogamestart) ;Game
    If Not @error Then $ostatus[3] = $aRead[0]

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

    $overviewlist = GUICtrlCreateListView ("Stream | Status | Viewer |Game",1600, 20, 300, 450)
    GUICtrlCreateListViewItem ($ostatus[0] & "|" & $ostatus[1] & "|" & $ostatus[2] & "|" & $ostatus[3], $overviewlist)

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

    ;ENDE
    GUISetState(@SW_SHOW)

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

    While Sleep(10)
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]


    So klappts bei mir, auch wenn die GUI etwas... Komisch und übergroß designet ist.

    lg chess

    Edit:
    Also bei mir klappt das einwandfrei?^^

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GuiComboBoxEx.au3>
    #include <GuiListView.au3>
    #include <Array.au3>
    #include <IE.au3>
    #include <String.au3>

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

    $gui = GUICreate("Programm", 500, 500)

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

    $tab = GUICtrlCreateTab (0, 0, 1920, 20)

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

    $tstreamsitem = GUICtrlCreateTabItem ("Streams") ;Tab Streams Item

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

    $onamestart = "<live_name>"
    $onameend = "</live_name>"
    $ostatusstart = "<live_is_live>"
    $ostatusend = "</live_is_live>"
    $oviewerstart = "<live_viewers>"
    $oviewerend = "</live_viewers>"
    $ogamestart = "<game_short>"
    $ogameend = "</game_short>"

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

    $ooliveid = 2721

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

    $ourl = "http://api.own3d.tv/rest/live/status.xml?liveid=" & $ooliveid

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

    $ieostatus = _IECreate ($ourl, 0, 0) ;IE Status Browser
    _IELoadWait ($ieostatus)
    $ostatushtml = _IEDocReadHTML ($ieostatus)

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

    Local $ostatus[4]
    Local $aRead[1]

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

    $aRead = _StringBetween ($ostatushtml, $onamestart, $onameend) ;Name
    If Not @error Then $ostatus[0] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ostatusstart, $ostatusend) ;Status
    If Not @error Then $ostatus[1] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $oviewerstart, $oviewerend) ;Viewer
    If Not @error Then $ostatus[2] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ogamestart, $ogamestart) ;Game
    If Not @error Then $ostatus[3] = $aRead[0]

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

    $overviewlist = GUICtrlCreateListView ("Stream | Status | Viewer |Game",0, 0, 300, 450)
    GUICtrlCreateListViewItem ($ostatus[0] & "|" & $ostatus[1] & "|" & $ostatus[2] & "|" & $ostatus[3], $overviewlist)

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

    ;ENDE
    GUISetState(@SW_SHOW)

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

    While Sleep(10)
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]


    Funktioniert das nicht bei dir?

  • [autoit]

    dim $aTags[4] = ["<live_name>", "<live_is_live>", "<live_viewers>", "<game_name>"]
    dim $aRead[ubound($aTags)]

    for $i = 0 to ubound($aTags)-1
    $aRead[$i] = _get($ostatushtml, $aTag[$i])
    next

    func _get($o, $tag)
    $aTemp = _StringBetween ($o, $tag, _end($tag)) ;Name
    If Not @error Then
    return $aTemp[0]
    Else
    return ""
    EndIf
    EndFunc


    func _end($s)
    return stringreplace($s,'<','</')
    endfunc

    [/autoit]
  • Dank eurer Hilfe funktioniert der Großteil jetzt schonmal :D

    Nocheinmal der komplette Code:

    [autoit]

    #include <GuiConstants.au3>
    #include <GuiComboBoxEx.au3>
    #include <GuiListView.au3>
    #include <Array.au3>
    #include <IE.au3>
    #include <String.au3>

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

    $gui = GUICreate("Programm", 1905, 1000)

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

    $tab = GUICtrlCreateTab (0, 0, 1920, 20)

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

    $tstreamsitem = GUICtrlCreateTabItem ("Streams") ;Tab Streams Item

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

    ;~~~~~~~~~~~~~~~~~~~~~~
    ;OWN3D STREAM ÜBERSICHT
    ;~~~~~~~~~~~~~~~~~~~~~~

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

    $onamestart = ">live_name</span>&gt;</a>"
    $onameend = "<span xmlns="
    $oviewerstart = ">live_viewer</span>&gt;</a>"
    $oviewerend = "<span xmlns="
    $ogamestart = ">game_short</span>&gt;</a>"
    $ogameend = "<span xmlns="
    $ostatusstart = ">live_is_live</span>&gt;</a>"
    $ostatusend = "<span xmlns="

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

    $ooliveid = 2721 ;Ocelote Live ID
    $oaliveid = 42146 ;Athene Live ID

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

    Func _CheckOwn3dStatus($oliveid)

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

    $ourl = "http://api.own3d.tv/rest/live/status.xml?liveid=" & $oliveid

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

    $ieostatus = _IECreate ($ourl, 0, 0) ;IE Status Browser
    _IELoadWait ($ieostatus)
    $ostatushtml = _IEDocReadHTML ($ieostatus)

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

    Global $ostatus[4]
    Local $aRead[1]

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

    $aRead = _StringBetween ($ostatushtml, $onamestart, $onameend) ;Name
    If Not @error Then $ostatus[0] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $oviewerstart, $oviewerend) ;Viewer
    If Not @error Then $ostatus[1] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ogamestart, $ogamestart) ;Game
    If Not @error Then $ostatus[2] = $aRead[0]
    $aRead = _StringBetween ($ostatushtml, $ostatusstart, $ostatusend) ;Status
    If Not @error Then $ostatus[3] = $aRead[0]

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

    EndFunc

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

    $ooverviewlist = GUICtrlCreateListView ("Stream | Viewer |Game", 1600, 470, 300, 450) ;own3d Stream Liste

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

    Func _CreateListViewItemIfLive()
    If $ostatus[3] = 1 Then

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

    GUICtrlCreateListViewItem ($ostatus[0] & "|" & $ostatus[1] & "|" & $ostatus[2], $ooverviewlist)

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

    EndIf
    EndFunc

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

    ;_CheckOwn3dStatus ausführen und ListViewItem erstellen
    _CheckOwn3dStatus($ooliveid) ;Ocelote Live ID
    _CreateListViewItemIfLive()
    _CheckOwn3dStatus($oaliveid) ;Athene Live ID
    _CreateListViewItemIfLive()

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

    ;ENDE
    GUISetState(@SW_SHOW)

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

    While Sleep(10)
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]

    Es funktioniert jetzt zwar die Überprüfung von Name und Status, jedoch nicht von Viewer und Game :(

    Einmal editiert, zuletzt von ExChill (10. Oktober 2012 um 11:46)

  • Zitat

    Es funktioniert jetzt zwar die Überprüfung von Name und Status, jedoch nicht von Viewer und Game


    Selbst Schuld wenn du meinen Beitrag unbeachtet lässt, hättest nach 5 Minuten schon fertig sein können.
    Merke langsam auch an anderen Dingen, Frauen sind hier nicht gerne gesehen :wacko: