ReceiveHTTPFile contra URLDownload [Erledigt]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

ReceiveHTTPFile contra URLDownload [Erledigt]

Beitrag von Elektrolurch »

Hi all

Ich habe mal gerade etwas herumgespielt.
Dabei habe ich gemerkt, dass folgender Code nicht funktioniert.
URLDownload legt die Datei 1.txt an.
ReceiveHTTP leider nicht die Datei 2.txt
Ist der Name etwa zu lang?
Kürzere (http://ergebnisse.westlotto.com) gehen wieder.

Code: Alles auswählen

Url.s ="http://ergebnisse.westlotto.com/wlinfo/WL_InfoService?client=frss&gruppe=Gewinnzahlen&spielart=LOTTO"

InitNetwork() 
URLDownloadToFile_(0, Url.s, "1.txt", 0, 0)
ReceiveHTTPFile(Url.s, "2.txt")

End
BYE Andre
Zuletzt geändert von Elektrolurch am 14.06.2008 13:15, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Zu dem eigentlichen Problem kann ich leider nichts sagen, aber wie wäre es,
die Daten gleich als XML in den Speicher zu laden? Hier mal ein Grund-
gerüst (Hauptprocedure aus einem anderem Project)

Code: Alles auswählen

Procedure.s RemoteXMLString(url.s, buffersize.l = 1024, timeout.l = 3000)

  ; by edel
  ; modified by kiffi
  ; modified by ts-soft

  Protected cid.l, pos.l, headerlen.l, NetEvent.l, Buffer.l 
  Protected server.s, file.s, Header.s, response.s

  If Left(url, Len("http://")) = "http://"
    url = Right(url, Len(url) - Len("http://"))
  EndIf

  pos = FindString(url, "/", 0)

  If pos = 0
    server = url
    file   = "/"
  Else
    server = Left(url, pos - 1)
    file   = Right(url, Len(url) - pos + 1)
  EndIf

  cid = OpenNetworkConnection(server, 80, #PB_Network_TCP)

  If cid

    Header  = "GET "+ file + " HTTP/1.0"  + #CRLF$
    Header  + "Host: " + server           + #CRLF$
    Header  + "Accept: */*"               + #CRLF$
    Header  + "Connection: close"         + #CRLF$ + #CRLF$

    SendNetworkString(cid, Header)

    Buffer  = AllocateMemory(buffersize)
    timeout + ElapsedMilliseconds()

    Repeat

      NetEvent = NetworkClientEvent(cid)

      If NetEvent = #PB_NetworkEvent_Data

        Repeat
          headerlen = ReceiveNetworkData(cid, Buffer, buffersize)
          response  + PeekS(Buffer, headerlen, #PB_UTF8)
        Until headerlen = 0

        FreeMemory(Buffer)

        pos      = FindString(response, #CRLF$ + #CRLF$, 0) - 1
        pos      = Len(#CRLF$ + #CRLF$) + pos
        pos      = FindString(response, "<", pos) - 1

        response = Mid(response, pos, Len(response) - pos - 1)

        CloseNetworkConnection(cid)

        ProcedureReturn response

      EndIf

      If timeout < ElapsedMilliseconds()
        CloseNetworkConnection(cid)
        ProcedureReturn ""
      EndIf

    ForEver

    CloseNetworkConnection(cid)
  EndIf

  If Buffer
    FreeMemory(Buffer)
  EndIf

  ProcedureReturn ""

EndProcedure

Define.s Url ="http://ergebnisse.westlotto.com/wlinfo/WL_InfoService?client=frss&gruppe=Gewinnzahlen&spielart=LOTTO"

InitNetwork()

Define.s xml = RemoteXMLString(Url)

If xml
  Define.l oXML = CatchXML(#PB_Any, @xml, Len(xml))
  
  If oXML
  
  ; ...
  
  FreeXML(oXML)
  EndIf
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

; by edel
Hoe ?
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

edel hat geschrieben:
; by edel
Hoe ?
Der Code hat sich wahrscheinlich durch die zwei weiteren Bearbeiter so stark verändert das du ihn nicht wiedererkennst. :lol:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Die Länge ist wohl nicht schuld:

Code: Alles auswählen

Url.s ="http://www.oneview.de/tags/index.jsf;jsessionid=1050569DA5FF481D396A84620EBF4BD6?tags=Europameisterschaft+RSS+Sport"
...funkt nämlich.

Was sollte nun erscheinen? Die Seite oder der XML-Code?

Code: Alles auswählen

Procedure Open()
  If OpenWindow(0, 0, 0, 800, 600, "Test")
    If CreateGadgetList(WindowID(0))
      WebGadget(0, 10, 20, 780, 590, "http://ergebnisse.westlotto.com/wlinfo/WL_InfoService?client=frss&gruppe=Gewinnzahlen&spielart=LOTTO")
      
    EndIf
  EndIf
EndProcedure

Open()
Repeat: Until WaitWindowEvent()=#WM_CLOSE 

...ich könnte mir vorstellen, daß es damit zusammenhängt...

lg
Marco
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi

Eigentlich sollte die Seite gespeichert werden um lediglich die Lottozahlen daraus auszulesen. (Seite abholen, parsen, vergleichen, Rundmail versenden)

ReceiveHTTPFile wäre halt Plattformübergreifend gewesen, obwohl das nicht unbedingt bindend ist.

BYE Andre
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

RemoteXMLString() ist plattformübergreifend. Die XML wird zum parsen sogar
in den Speicher geladen, da fehlen also nur noch ein paar Zeilen aus der
XML lib und Du kannst Dein Programm drumrum bauen :wink:

Als Datei speichern kannst Dir doch sparen, xml wird doch sowieso
(jedenfalls bei so kleinen Dateien) im Speicher geparst.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi

Sorry ich bin leider noch Anfänger.
RemoteXMLString()
Ist leider nicht in der PureBasic Hilfe :cry:
da fehlen also nur noch ein paar Zeilen aus der
XML lib und Du kannst Dein Programm drumrum bauen
Welche?
Von wo?
und gibts da auch eine Anleitung?

Deshalb bin ich ja auch weiter oben im Thread nicht auf die Prozedure angesprungen, da ich sie schlichtweg nicht ganz verstehe.

Als ich das letzte mal hier blind eine Prozedure eingebaut hatte, schlug nach dem erstellen der EXE mein Virenscanner an.

Bye Andre
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Elektrolurch hat geschrieben:Hi

Sorry ich bin leider noch Anfänger.
RemoteXMLString()
Ist leider nicht in der PureBasic Hilfe :cry:
Kann ja auch nicht, ist ja keine PB Funktion, sondern eine Procedure.
Die mußte nicht unbedingt verstehen, die lädt die XML in den Speicher und
gibt diese als String zurück (nur die URL als Parameter übergeben, die
anderen Parameter kannste erstmal ignorieren)
Praktischerweise sollte man das XML auch mit der in PB integrierten XML lib,
die ist in der Hilfe, nutzen.

Du kannst natürlich auch den String mit den Stringfunktionen parsen, wenn
Du die XML Funktionen noch nicht verstehst. Als Datei speichern würde auch
gehen, aber wäre blödsinnig.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi

Ich habe die Procedure jetzt mal eingebaut und konnte sie auch einbinden.
Soweit scheint alles zu laufen.

Nun stelle ich mir gerade eine neue Frage, oder vielmehr euch.
Bisher arbeitet mein Program komplett ohne GUI und das soll wenn möglich auch so bleiben.
Kann man im Speicher irgendwie einen Lottoschein generieren, den man dann als JPG an die Rundmail anhängen kann?


Bye Andre
Antworten