Foren-Reader

  • Aloha Leute,

    Ich habe mich dran gesetzt einen kleinen Clienten für mein Forum zu schreiben.
    Dieser soll einzelne Posts aus dem Forum rauslesen.
    Anfangs versuchte ich es mit _IEBodyReadText, aber dann müsste ich auch noch die Strings vor und nach dem Post löschen (zu umständlich).

    Nach vielen verschiedenen Versuchen und nach dem Suchen bei Google und hier im Forum (schwer die richtigen Suchbegriffe zu finden) stelle ich meine Anfrage auf Hilfe hier rein!

    Könnte mir jemand anhand eines Beispieles meines Postes hier zeigen, wie ich NUR die Posts rauslesen kann?

    Ich danke im Vorraus.
    Goaku

    PS: MIt :_IEFormGet... habe ich es auch versucht, aber ich komme an dem ganzen "div class=" -nicht vorbei.

    Einmal editiert, zuletzt von Goaku (16. Juni 2010 um 17:13)

  • Hallo,

    Das ist mit StringRegExp realisierbar.
    Danach müssen nur noch HTML Tags entfernt werden. Kannst dir das ja noch weiter anpassen, wenn was fehlen sollte.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    MsgBox(0, "", _ReadPost(170708))

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

    Func _ReadPost($iPostID)
    Local $aReplace[2][2] = [["<br />", ""],["&quot;", """"]] ; Hier das was noch gesucht & ersetz werden soll. (wenn etwas nur gelöscht werden soll,
    ; solltest du das in der vorletzen Zeile beim StringRegExpReplace tun

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

    Local $sHTML, $aRet, $iUB = UBound($aReplace)
    $sHTML = BinaryToString(InetRead("http://autoit.de/index.php?page=Thread&postID=" & $iPostID & "#post" & $iPostID, 1), 4) ; Text aus dem Internet holen
    $aRet = StringRegExp($sHTML, 'postText' & $iPostID & '">\s+([\w\W]+?)(?></div>\s+<div class="messageFooterRight)', 3) ; Mit StringRegExp die richtige stelle raussuchen
    If @error Then Return SetError(1, 0, "")

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

    For $i = 0 To $iUB - 1
    $aRet[0] = StringReplace($aRet[0], $aReplace[$i][0], $aReplace[$i][1]) ; In einer Schleife HTML Code "formatieren"
    Next
    $aRet[0] = StringRegExpReplace($aRet[0], "(?m)^\s*$|<em>|</em>|<br>|\s+</div>$", "") ; Restliche HTML Tags mit RegExp entfernen (mit | kann man sachen die gelöscht werden sollen seperieren
    Return $aRet[0]
    EndFunc ;==>_ReadPost

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

    In meiner Signatur findest du außerdem ein umfangreiches StringRegExp Tutorial.

    Hier noch ein Ansatz um mit Spoiler & AutoIt Code umzugehen:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "", _ReadPost(170714))

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

    Func _ReadPost($iPostID)
    Local $aReplace[4][2] = [["&amp", "&"],["&lt;", "<"],["&gt;", ">"],["&quot;", """"]] ; Hier das was noch gesucht & ersetz werden soll. (wenn etwas nur gelöscht werden soll,
    ; solltest du das in der vorletzen Zeile beim StringRegExpReplace tun

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

    Local $sHTML, $aRet, $iUB = UBound($aReplace)
    $sHTML = BinaryToString(InetRead("http://autoit.de/index.php?page=Thread&postID=" & $iPostID & "#post" & $iPostID, 1), 4) ; Text aus dem Internet holen
    ClipPut($sHTML)
    $aRet = StringRegExp($sHTML, 'postText' & $iPostID & '">\s+([\w\W]+?)(?></div>\s+<div class="(?>messageFooterRight|signature))', 3) ; Mit StringRegExp die richtige stelle raussuchen
    If @error Then Return SetError(1, 0, "")

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

    For $i = 0 To $iUB - 1
    $aRet[0] = StringReplace($aRet[0], $aReplace[$i][0], $aReplace[$i][1]) ; In einer Schleife HTML Code "formatieren"
    Next
    $aRet[0] = StringRegExpReplace($aRet[0], "(?m)^\s*$|\s+</div>$|<a style[^>]+>|<span style[^>]+>|(?><blockquote class=""quoteBox spoiler"">)[\w\W]+?codeLines container-4"">\s+<pre>", "") ; Spoiler und AutoIt Code ausfiltern
    $aRet[0] = StringRegExpReplace($aRet[0], "</?span>|</?a>|</?td>|</?tr>|</?pre>|</?table>|</?em>|<br />|</?div>|</?blockquote>", "") ; Restliche HTML Tags mit RegExp entfernen (mit | kann man sachen die gelöscht werden sollen seperieren

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

    Return $aRet[0]
    EndFunc ;==>_ReadPost

    [/autoit]