Quellcode durchsuchen/Stringregexp richtig benutzen

  • Guten Tag,
    undzwar möchte ich ein Simples Programm schreiben was mir von einer Internet-Site Meinen Monatlichen verbrauchten Traffic raussucht und als msgbox wieder gibt.
    Nun steh ich vor dem Problem, egal wie ich es drehe ich komm mit stringregexp nicht klar, ich poste erstmal den quelltext:

    Code
    #include <inet.au3>
    $source = _INetGetSource("http://center.vodafone.de/vfcenter/verbrauch.html")
    $VFhtml = StringRegExp($source, "\:\s(.*?GB)<BR>", 1)
    MsgBox("","",$VFhtml[0])

    es wird mir nur eine 0 in der MsgBox ausgegeben.
    Ich Experimentiere jetzt schon eine weile rum, komme aber nicht zur richtigen Lösung.

    In der html seite sieht die Zeile aus der gesucht werden soll so aus:

    Code
    <DIV class=teaserHandsetContent><!-- National -->Nutzung im aktuellen Abrechnungszeitraum: 9,2 GB<BR>Highspeedvolumen : 30,0 GB<BR>Aktueller Abrechnungszeitraum 03.02. - 02.03.2013<BR></DIV></DIV></DIV><BR class=floatNone><BR class=floatNone></DIV></DIV>

    Die Nutzung im aktuellen Abrechnungszeitraum: 9,2 GB bzw. die 9,2GB (Die Zahl ist natürlich dynamisch, also verändert sich) darum geht es mir.
    Ich danke im vorraus.

    mfg

    2 Mal editiert, zuletzt von kaikai89 (23. Januar 2013 um 01:04)

  • Wie schon in der Shoutbox gesagt; anahnd deines Quellcodeausschnittes müsste dieses pattern funktionieren: "\:\s(.*?GB)<BR>"
    Da wir ja keinen Zugriff auf die Seite haben - bitte mal ausführen und die Rückgabe posten.

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>
    $source = _INetGetSource("http://center.vodafone.de/vfcenter/verbrauch.html")
    If StringLen($source) = 0 Then
    MsgBox(0, "", "Kein Quellcode!!")
    Else
    ;$source = "<DIV class=teaserHandsetContent><!-- National -->Nutzung im aktuellen Abrechnungszeitraum: 9,2 GB<BR>Highspeedvolumen : 30,0 GB<BR>Aktueller Abrechnungszeitraum 03.02. - 02.03.2013<BR></DIV></DIV></DIV><BR class=floatNone><BR class=floatNone></DIV></DIV>"
    $VFhtml = StringRegExp($source, "\:\s(.*?GB)<BR>", 1, 1)
    If IsArray($VFhtml) Then
    MsgBox(0, "", $VFhtml[0])
    Else
    MsgBox(0, "", "Nichts gefunden!")
    EndIf
    EndIf

    [/autoit]
  • ok es steht Nichts gefunden! da

    EDIT:
    Mach ich das ; vor $source weg, also den "Befehl" den du ja mit ; ausgeblendet hast geht es !!

  • Ok. Dann führ bitte mal das hier aus und poste uns die Rückgabe.

    [autoit]


    $source =BinaryToString(InetRead("http://center.vodafone.de/vfcenter/verbrauch.html", 1), 4)
    ConsoleWrite($source & @LF)
    ClipPut($source)

    [/autoit]


    Das, was dir das Skrpt in die Konsole schreibt, wird auch automatisch in deine Zwischenablage gelegt.

  • führe ich

    Code
    $source =BinaryToString(InetRead("http://center.vodafone.de/vfcenter/verbrauch.html", 1), 4)
    ConsoleWrite($source & @LF)
    ClipPut($source)

    aus dann speichert er den gesammten quellcode von der seite in die zwischenablage

    achja und das von oben gerade geht nicht, wenn man das ; hab grad mal den verbrauch mittels youtube video auf 9,5 gb angehoben, er gibt aber weiterhin 9,2 aus

  • Ja, das ist der gesammte Quellcode. Wenn da keine persönlichen Daten auf der Seite stehen, könntest du uns den mal zeigen?

    Und ja, wenn du diese Zeile auskommentierst ;) entferenn) dann findet er natürlich was. Denn dann sucht er nicht mehr im Quellcode der Seite sondern in dem String, der dann in $source steht ;). Das ist kein reales Ergebnis. Nur zum testen des pattern.

  • kann ich machen ;) da steht nichts privates ;)

    Spoiler anzeigen
  • Du siehst, das der Quellcode jetzt doch etwas anders aussieht?
    Das hier müsste klappen:

    [autoit]


    $sSource = BinaryToString(InetRead("http://center.vodafone.de/vfcenter/verbrauch.html", 1), 4)

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

    $aResult = StringRegExp($sSource, "Abrechnungszeitraum\:\s(.*?GB)<br\/>", 1, 1)
    If IsArray($aResult) Then
    MsgBox(0, "", $aResult[0])
    Else
    MsgBox(0, "", "Nichts gefunden!")
    EndIf

    [/autoit]
  • Und es funktioniert, wow ;)
    Echt vielen vielen Dank :D
    Und eine frage hätt ich noch, um am schnellsten autoit zu lernen, ein professionelles buch besorgen oder reicht es wenn man eig nur sich mit tutorials beliest ?
    Mfg und vielen Dank nochmals ;)

  • Das Buch von Johannes - http://web.slzm.de/blog/latex/buch-iv/

    Dann gibt's in unserem Tutorialforum einiges zu lesen.

    Und den Rest lernt man dann by doing und durch fragen. Dafür gibt's ja dieses Forum ;)

    edit: Ein Blick in die Signaturen diverser PUs und Moderatoren schadet auch nicht. (z.B. in die von BugFIx)

  • OK da werd ich mich mal belesen gehen ;)
    Top hilfsbereitschaft und riesen dank ;)
    bis dahin noch einen schönen - morgen ;P und eine gute Nacht :D
    mfg

  • Hallo zusammen,

    ich frage einfach mal in diesem Thema weil ich genau das gleiche Problem habe.
    In Zeile 17 wird mir die richtige URL ausgegeben aber wenn ich InetGet in Zeile 19 anwende um den Quelltext zu bekommen wird irgendwas runtergeladen nur nicht der Quelltext von der URL.
    In dem Qulltext müsste eigentlich "Restzeit" vorkommen, das ist aber nicht der Fall.

    Ich hab es gerade noch mit InetRead probiert aber bekomme es auf anhieb nicht hin. Ist ja auch schon spät :)

    Ich hoffe es kann einer helfen

    Danke und Gruß
    Norman

    [autoit]

    If FileExists("c:\temp\test\ebay.txt") Then
    FileDelete("c:\temp\test\ebay.txt")
    InetGet("http://www.ebay.de/sch/Konsolen-/139971/i.html?LH_BIN=1&_sop=10&_from=R40&_nkw=ps3+slim+120gb", "c:\temp\test\ebay.txt", 1)
    Else
    InetGet("http://www.ebay.de/sch/Konsolen-/139971/i.html?LH_BIN=1&_sop=10&_from=R40&_nkw=ps3+slim+120gb", "c:\temp\test\ebay.txt", 1)
    EndIf

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

    $text=FileOpen("c:\temp\test\ebay.txt",0)
    $fileread = FileRead($text)

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

    $aFound = _StringBetween($fileread, '<a href="', '" class="img"')
    _ArrayDisplay($aFound)

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

    $regexp = StringRegExp($aFound[1], '<a href="(.+)', 3)
    _ArrayDisplay($regexp)

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

    ConsoleWrite($regexp[0])

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

    InetGet($regexp[0], "c:\temp\test\ebay1.txt", 1)

    [/autoit]
  • Learning by doing ;) Je nachdem ob du schonmal programmiert hast oder nicht, ist es alles sehr ähnlich ... habe vor zig jahren mal Pascal und Komal gemacht, jetzt C/C++ und AutoIt und habe nun mit PHP noch angefangen ... es ist meist nur andere Syntax aber vom Grundgedanken des Programmierens ist es meiner Ansicht nach ziemlich ähnlich ...

    Grüße Yaerox

    Grüne Hölle

  • Learning by doing Wende ich eigentlich zuerst an bevor ich die Leute hier frage.
    Nur in diesen Fall funktioniert ja auch alles soweit. Ich möchte ja nur wissen warum er nicht den quellcode ausliest obwohl er die richtige URL bekommt.


    Gruss norman

  • Ich möchte ja nur wissen warum er nicht den quellcode ausliest obwohl er die richtige URL bekommt.


    Bei mir wird der Quellcode ausgelesen. Da es nicht das komplette Skript ist vermute ich das die Datei (ebay1.txt) nicht beschreibar ist, z.B. weil FileClose vergessen.

    Im übrigen verstöst du gegen die AGB von eBay

    Zitat

    § 18 Systemintegrität und Störung der eBay-Website

    4. Die auf der eBay-Website abgelegten Inhalte dürfen ohne vorherige Zustimmung der Rechteinhaber weder kopiert oder verbreitet, noch in sonstiger Weise genutzt oder vervielfältigt werden. Dies gilt auch für ein Kopieren im Wege von "Robot/Crawler"-Suchmaschinentechnologien oder durch sonstige automatische Mechanismen.

    und damit gegen die Forenregeln.

    Daher vote for close

    mfg autoBert