Webseiten ansprechen im Hintergrund

  • Stimmt auch wieder, man kann das ja aber in eine Funktion packen dann ist es weniger aufwändig.
    Aber sicherlich ist es besser als Anfänger InetRead + BinaryToString zu nutzen.


    Warum sollte es dann weniger aufwendiger sein? Schließlich muss man ja trotzdem die Funktion schreiben und evtl. mit den Pakets rumspielen, InetRead hingegen erledigt das alles für dich. (Und man muss auch nicht mehr z.B. den Header rausparsen o.ä.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Ich glaube ihr seid etwas vom Thema abgekommen. Dem Fragesteller ist es sicherlich total egal ob es nun 50 ms oder 500 ms braucht um eine Seite aufzurufen.


    So wie ich deinen ersten Post lese, hast du es bissher über send() und dergleichen gelöst. Dazu mussen die Controls immer fokusiert sein um etwas eingeben zu können und genau das willst du ändern, richig?
    In deinem ersten Post sprichst du über Google. In einem späteren Post erwähnst du dass es nicht nur auf Google bezogen sein soll ?(

    Ist ja auch egal. Wenn es sich nur um Google gedreht hätte, hätte ich dir InetRead() empfehlen können.
    Da du es nunn aber allgemein haben willst kann ich nur auf den zweiten Post verweisen. Die _IE Funktionen bieten alles was du brauchst. Du kannst entscheiden ob der Browser sichtbar sein soll oder nicht.
    In einem anderen Post hast du dann erwähnt, dass dir das nichts bringt, da dann send() nicht funktioniert, wenn der Browser nicht sichtbar ist. ?(
    Die Antwort darauf ist, du wirst send() nichtmehr brauchen und alles mit den _IE Funktionen erledigen können. Dazu musst du aber nunmal die Dokumentation der Funktionen lesen um zu wissen was du brauchst.

    Einfach die _IE Funktionen von Autoit nutzen. Da kannst du bei _IECreate sagen, dass das Fenster nicht sichtbar sein soll.

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Darter:
    Danke! Du warst bis jetzt (nicht böse gemeint) der Einzige der mir nach der ersten Antwort richtig geantwortet hat! :)

    Ich war leider heute arbeiten, deswegen bin ich erst jetzt online.

    Vielleicht könntest du mir 2 Beispiele mal erklären mit den _IE Funktionen, weil das mit dem TCP Kram... naja.. sagen wir mal nur: "BAHNHOF".

    1. Beispiel:
    Den aktuellen Börsenkurs abfragen auf folgender Seite: http://markets.blockchain.info/markets/mtgox/EUR (rechts oben die große Zahl).

    2. Beispiel:
    Im Hintergrund auf dieser Seite einloggen: https://blockchain.info/de/wallet/login wobei der Benutzer GLEICHZEITIG am PC arbeiten kann. Anschließend soll das Fenster sichtbar gemacht werden (also so das man bereits eingeloggt ist)

    Wenn du mir das mit Code erklären kannst, dann bin ich schonmal ein mächtiges Stück weiter :).


    Ps: An alle die das lesen aber mit denen ich nix zu tun habe oder die ich heute nicht mehr spreche: Guten Rutsch ins neue Jahr! :party:

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)

  • Für den Kurs braucht man die IE Funktionen nicht, das ginge auch so:

    [autoit]


    #include <string.au3>

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

    $site = "http://markets.blockchain.info/markets/mtgox/EUR"
    $source = BinaryToString(inetread($site,16+1))

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

    $aKurs = _StringBetween($source,"<span id='last_price'>","</span>")

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

    If $aKurs <> 0 Then
    ConsoleWrite("Der aktuelle Kurs lautet: " & $aKurs[0] & @CRLF)
    Else
    MsgBox(0,"Fehler","Kurs String wurde nicht gefunden")
    EndIf

    [/autoit]
  • Ich hoffe du denkst nicht das ich zu faul bin zum suchen, ich weiß einfach noch nicht genau wonach ich immer suchen soll, deswegen find ich wahrscheinlich auch nichts :). Deswegen möchte ich jetzt mal ausdrücklich sagen das ich euch (besonders misterspeed) dankbar bin!


    Nun zu deinem vorherigen Post:

    Wenn ich hier drauf gehe https://blockchain.info/de/api/exchange_rates_api , steht unten das ich "x" ersetzen soll mit den parametern. Ich verstehe noch nicht ganz wie das gehen soll. Da ist kein "x".^^
    Und wie kann ich das jetzt in AutoIt einsetzen? Also ich denke mal wieder mit Inetread() oder? und dann halt der Link oben so angepasst das ich da direkt die Währung und den gewünschten Kurs angebe. Nur das weiß ich ja noch nicht wie es geht :D.

    Vielen Dank! :D

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)

  • steht unten das ich "x" ersetzen soll mit den parametern. Ich verstehe noch nicht ganz wie das gehen soll. Da ist kein "x".^^


    Naja, die benötigten Parameter sind doch angegeben. Eine URL würde dann z.B. so aussehen: https://blockchain.info/de/tobtc?currency=EUR&value=100
    Diese liest du dann einfach mit BinaryToString(InetRead(...)) aus und schon hast du das gewünschte Ergebnis.

  • Ja danke. Das Problem ist nur das ich keine Ahnung von PHP/HTTP und dem ganzen Kram habe :). Ein bissel HTML kann ich aber nicht so gut als das ich das was du oben gepostet hast gekonnt hätte :).

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)

  • Okay, das konvertiert mir jetzt aber nur einen gewünschten Betrag in BitCoin, auch cool, aber wie lese ich den aus dem ertsen Link auf der Seite sage ich mal den "last" (letzten) Kurs in EUR aus? Weil der obere Link gibt mir ja nur die Liste aus, also das ganze Schema da. Gibt es eine einfachere oder andere Methode als _StringBetween?


    Edit:
    _StringBetween gibt immer nur 0 zurück:

    [autoit]

    #include <String.au3>

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

    MsgBox(0, "Test", _GetCurrentStats("EUR", "last"))

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

    ;Get the current prices etc.
    Func _GetCurrentStats($currency, $state) ;$state: {last|buy|sell|24h|symbol}
    $source = BinaryToString(InetRead("http://blockchain.info/ticker", 1 + 16))

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

    Return _StringBetween($source, $currency&'" : {"last" : ', ', "buy"')
    EndFunc

    [/autoit]

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)

    Einmal editiert, zuletzt von sklaim (1. Januar 2014 um 21:19) aus folgendem Grund: Zusatz

  • Mit _StringBetween würde das so funktionieren:

    [autoit]

    #include <String.au3>

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

    MsgBox(0, "Test", _GetCurrentStats("EUR", "last"))

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

    ;Get the current prices etc.
    Func _GetCurrentStats($sCurrency, $sState) ;$state: {last|buy|sell|24h|symbol}
    $sJSON = BinaryToString(InetRead("http://blockchain.info/ticker", 1))
    $asResult = _StringBetween($sJSON, $sCurrency, "}")
    $asResult = _StringBetween($asResult[0], $sState & '" : ', ",")
    Return $asResult[0]
    EndFunc

    [/autoit]

    Du könntest es natürlich mit RegEx versuchen, ist aber wahrscheinlich eher komplizierter als _StringBetween :P

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Funktioniert! Mega Danke. Allerdings kann ich mir nicht das Symbol ausgeben lassen, dann kommt ein Error, ist aber wahrscheinlich auch nicht so wichtig :). Dennoch würde mich interessieren woran das liegt. Ich könnte mir vorstellen es liegt daran das BinaryToString() das ja in UTF-8 umwandelt und da gibts die Zeichen nicht oder? Ich kann mich auch total irren :D

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)

  • Dazu musst du nur den 2. Parameter von BinaryToString auf 4 setzen.
    Damit wird das ganze dann UTF-8 encodet. (Hierbei wird jedoch nur das letzte Symbol [THB] als Fragezeichen angezeigt, aber alles andere ist dann korrekt.)
    Zusätzlich musst du noch die Funktion wenig umschreiben, damit du dir das Symbol ausgeben lassen kannst. Das wirst du wahrscheinlich selber auch sehen.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Zitat

    "C:\Users\Sascha\Documents\AutoIt Programme\BitCoin Gen\BitCoin Gen.au3" (10) : ==> Subscript used on non-accessible variable.:
    Return $asResult[0]
    Return $asResult^ ERROR

    [autoit]

    #include <String.au3>

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

    MsgBox(0, "Test", _GetCurrentStats("EUR", "symbol"))

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

    ;Get the current prices etc.
    Func _GetCurrentStats($sCurrency, $sState) ;$state: {last|buy|sell|24h|symbol}
    $sJSON = BinaryToString(InetRead("http://blockchain.info/ticker", 1), 4)
    $asResult = _StringBetween($sJSON, $sCurrency, "}")
    $asResult = _StringBetween($asResult[0], $sState & '" : ', ",")
    Return $asResult[0]
    EndFunc

    [/autoit]

    Anscheinend gibt der immernoch 0 zurück :/.

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)

  • Natürlich, wie gesagt: Du musst die Funktion ein wenig abändern.
    Das hier wäre eine Mögliche Variante:

    [autoit]

    Func _GetCurrentStats($sCurrency, $sState)
    ; PainTain
    $sJSON = BinaryToString(InetRead("http://blockchain.info/ticker", 1), 4)
    $asResult = _StringBetween($sJSON, $sCurrency, "}")

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

    ; Für die Erklärung des ternären Operators ?: siehe hier: http://www.autoitscript.com/autoit3/docs/keywords/Ternary.htm
    ; $asResult = (($sState <> "symbol") ? _StringBetween($asResult[0], $sState & '" : ', ",") : _StringBetween($asResult[0], '"symbol" : "', '"'))
    If ($sState <> "symbol") Then
    _StringBetween($asResult[0], $sState & '" : ', ",")
    Else
    _StringBetween($asResult[0], '"symbol" : "', '"')

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

    Return $asResult[0]
    EndFunc

    [/autoit]

    // Edit auf Wunsch alpines'

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

    Einmal editiert, zuletzt von PainTain (2. Januar 2014 um 00:03)

  • Ah okay, weil am Ende ein anderes Zeichen ist, okay :).

    Kannst du mir denn auch weiterhelfen wenn es darum geht wie ich "unbemerkt" auf Webseiten Buttons drücken kann und Inputs ausfüllen kann etc. Das mit der IE Geschichte ist ja schön und gut nur es funktioniert nicht.. Also die ganzen _IE Funktionen. Da gibt es ja auch keine die mir was ausfüllt oder dergleichen :(

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)

  • Ah okay, weil am Ende ein anderes Zeichen ist, okay :).

    Kannst du mir denn auch weiterhelfen wenn es darum geht wie ich "unbemerkt" auf Webseiten Buttons drücken kann und Inputs ausfüllen kann etc. Das mit der IE Geschichte ist ja schön und gut nur es funktioniert nicht.. Also die ganzen _IE Funktionen. Da gibt es ja auch keine die mir was ausfüllt oder dergleichen :(


    Schau dir am Besten diese _IE.. Funktionen mal an:

    [autoit]

    ; Damit kannst du dir "Handle" zu den einzelnen Form-Elementen holen, dazu musst du dir dazu den Quelltext der Seite anschauen ;)
    _IEGetObjByName
    ; bzw
    _IEGetObjById

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

    ; damit kannst du dann Werte setzen
    _IEFormElementSetValue
    _IEFormElementOptionSelect
    _IEFormElementCheckboxSelect
    _IEFormElementRadioSelect

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

    ; und evtl. brauchst du noch
    _IEFormElementGetValue
    _IEImgClick

    [/autoit]


    Schlag einfach mal all diese Funktion in der Hilfe nach, dazu gibt es sie ja schließlich.

    Und noch eine kleine Empfehlung zum Erlernen des Umgangs mit den diversen _IE.. Funktion: _IE_Example ;)

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Aber das funktioniert nur wenn du ein <form> element hast. Was bei dynamischen Seiten nicht der Fall ist. Und genau dafür brauche ich s auch :). Da kannst du nur mit der ID arbeiten.... Oder versteh ich das falsch? :/

    "Das Schweigen ist nach der Rede die zweite Großmacht der Welt."
    Jean Baptiste Henri Lacordaire (1802-1861)