Rapid Share - Hapyy Hour auslesen

  • Kann mir jemand helfen, bei Rapidshare die HappyHour auszulesen.
    Gelöst habe ich es schon, jetzt soll nur der Feinschliff folgen:
    1. Eine beliebige Datei wird aufgerufen.
    2. Mit TAB und ENTER wird der Free-Button angesteuert.
    3. Die folgende Seite wird ausgelesen.

    Folgendes möchte ich noch erreichen:
    1. Seite im Browser nicht aufrufen
    2. So tun als ob der Free-Button gedrückt wurde, damit man direkt auf die Seite kommt, wo "Happy Hour" steht.

    Ich denke, dass RS das über ein Skript regelt. Ich verstehe zwar ein bischen was von HTML und JavaScript, aber das angehängte kapier ich nicht.
    Hoffe ihr könnt mir helfen.

    3 Mal editiert, zuletzt von penta.phoenix (8. Juni 2008 um 15:57)

    • Offizieller Beitrag

    Hallo

    Man man man, meine InetGetSourcePost funktion ist ja doch ziemlich oft zu gebrauchen :P

    Spoiler anzeigen
    [autoit]

    Global $RapidshareFile = "http://rs303.rapidshare.com/files/113245263/hlm-gtasa.part01.rar"

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

    $x = _INetGetSourcePost($RapidshareFile," ")
    $x = StringRegExp($x[1],'<form action="(.*?)" method="post">',3)
    $s = _INetGetSourcePost($x[0], "dl.start=Free")
    If StringInStr($s[1],"You have reached the limit for Free users.") Then
    TrayTip("","Sie haben das limit erreicht."&@CRLF&"Machen Sie erst ein ReConnect!",2)
    Sleep(3000)
    Exit
    EndIf
    $HH = "nicht "
    If StringInStr($s[1]," <h2>It’s Happy Hour!</h2>") Then $HH = ""
    TrayTip("Rapidshare","Happy Hour "&$HH&"aktiv",3,StringLen($HH)/3)
    If Not StringLen($HH) Then
    Beep(550,90)
    Beep(700,130)
    Beep(300,110)
    Beep(500,90)
    Beep(800,120)
    EndIf
    Sleep(3000)

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

    ;===============================================================================
    ;
    ; Function Name: _INetGetSourcePost()
    ; Description: Gets the source from an URL without writing a temp file and you can send a Post.
    ; Parameter(s): $sURL = The URL of the site.
    ; $sPost = The Post to send
    ; Requirement(s): -
    ; Return Value(s): On Success - Return a array with $aReturn[0] = Backheader and $aReturn[1] = Sourcecode
    ; On Failure - 0 and sets @ERROR
    ; @error = 1: Post or URL is nothing
    ; @error = 2: Error by RegularExpression
    ; @error = 3: $sHost or $sHttp1 is nothing
    ; @error = 4: Can not get IP of Host
    ; @error = 5: Can not connect to host
    ; @error = 6: Nothing can be send
    ; @error = 7: Connection abborted while receiving
    ; Author(s): GtaSpider
    ;
    ;===============================================================================

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

    Func _INetGetSourcePost($sURL, $sPost)
    Local $iSocket, $sHeader, $sRecv, $iIP, $sHost, $aRegExp, $sHttp1,$iErr,$iSend,$aReturn[2]

    If $sURL = '' Or $sPost = '' Then Return SetError(1, 0, 0)

    If StringLeft($sURL, 7) <> 'http://' And StringLeft($sURL, 8) <> 'https://' Then $sURL = "http://" & $sURL
    If StringRight($sURL, 1) <> "/" Then $sURL &= "/"

    $aRegExp = StringRegExp($sURL, "http?://(.*?)/", 3)
    If @error Then Return SetError(2, 0, 0)

    $sHost = $aRegExp[0]
    If $sHost = '' Then Return SetError(3, 0, 0)

    $sHttp1 = StringTrimLeft($sURL,StringInStr($sURL,"/",-1,3)-1)
    If $sHttp1 = '' Then Return SetError(3, 0, 0)


    $sHeader = "POST " & $sHttp1 & " HTTP/1.1" & @CRLF & _
    "Host: " & $sHost & @CRLF & _
    "User-Agent: AutoIt v3" & @CRLF & _
    "Content-Length: " & StringLen($sPost) & @CRLF & @CRLF & $sPost


    TCPStartup() ;If not already done
    $iIP = TCPNameToIP($sHost)
    If $iIP = '' Or StringInStr($iIP, ".") = 0 Then Return SetError(4, 0, 0)
    $iSocket = TCPConnect($iIP, 80)
    If @error Or $iSocket < 0 Then Return SetError(5, 0, 0)

    $iSend = TCPSend($iSocket, $sHeader)
    If @error Or $iSend < 1 Then Return SetError(6, 0, 0)


    While 1
    $sRecv = TCPRecv($iSocket, 1024)
    $iErr = @error
    If $sRecv <> '' Then
    While 1
    $sRecv &= TCPRecv($iSocket, 1024)
    If @error Then ExitLoop 2
    WEnd
    EndIf
    If $iErr Then Return SetError(7,0,0)
    WEnd

    $aReturn[0] = StringLeft($sRecv,StringInStr($sRecv,@CRLF&@CRLF)-1)
    $aReturn[1] = StringTrimLeft($sRecv,StringLen($aReturn[0])+4)
    Return $aReturn
    EndFunc ;==>_INetGetSourcePost

    [/autoit]

    Mfg Spider

  • Danke, von deiner Funktion hab ich noch nie was gehört.
    Ich probiers aber sofort aus.

    Edit: Funktioniert, Du bist der Beste.

    Einmal editiert, zuletzt von penta.phoenix (8. Juni 2008 um 13:37)

  • Sorry, das ich den Thread nochmal vorhol.
    Das ist mein Skript.

    Spoiler anzeigen


    Nun möchte ich aber noch 2 Veränderungen vornehmen.
    1. Die TrayTips sollen nach 3 Sekunden wirklich verschwinden. Das tun sie momentan nicht.
    2. Es soll nur ein TrayTip angezeigt werden, wenn sie der RS-Status geändert hat(Happy Hour, nicht Happy Hour, Limit erreicht).
    Dummerweise stehe ich gerade voll auf dem Schlauch und komme kein Stückchen vorwärts.
    Das zweite sollte sich über eine Kontrollvariable erledigen lassen, denke ich. Ich weiß aber nicht, wo ich sie ansetzen muss. :wacko:

  • Hi,
    habs mal probiert, allerdings ungetestet

    Spoiler anzeigen
    [autoit]

    $status = 0

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

    While 1
    $begin = TimerInit()
    Sleep(5000)
    If TimerDiff($begin) >= 5000 And TimerDiff($begin) <= 5010 Then
    hh()
    EndIf
    WEnd

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

    Func hh()
    $a = _INetGetSourcePost(FileRead(@DesktopDir & "\url.txt"), " ")
    $a = StringRegExp($a[1], '<form action="(.*?)" method="post">', 3)
    $a = _INetGetSourcePost($a[0], "dl.start=Free")
    If StringInStr($a[1], "You have reached the limit for Free users.") And $status <> 1 Then
    TrayTip("", "Limit erreicht." & @CRLF & "Reconnect nötig!", 2)
    Sleep(3000)
    TrayTip()
    $status = 1
    EndIf
    If StringInStr($a[1], " <h2>It’s Happy Hour!</h2>") And $status <> 2 Then
    $status = 2
    $HH = ""
    TrayTip("Rapidshare", "Happy Hour " & $HH & "aktiv", 3)
    Sleep(3000)
    TrayTip()
    ElseIf $status <> 3 Then
    $status = 3
    $HH = "nicht "
    TrayTip("Rapidshare", "Happy Hour " & $HH & "aktiv", 3)
    Sleep(3000)
    TrayTip()
    EndIf
    EndFunc ;==>hh

    [/autoit]
  • Tweaky: danke für die Hilfe. Ich sag doch, es ist ganz einfach. :rolleyes: Man muss nur drauf kommen.
    Aber einen kleinen Fehler hat dein Code.
    Hier mal der fehlerfreie(hof ich zumindest).

    Spoiler anzeigen