Seite 1 von 4
ReceiveHTTPFile contra URLDownload [Erledigt]
Verfasst: 07.06.2008 22:46
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
Verfasst: 07.06.2008 23:29
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
Verfasst: 08.06.2008 07:33
von edel
Verfasst: 08.06.2008 07:53
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.

Verfasst: 09.06.2008 21:05
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
Verfasst: 10.06.2008 09:11
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
Verfasst: 10.06.2008 14:57
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
Als Datei speichern kannst Dir doch sparen, xml wird doch sowieso
(jedenfalls bei so kleinen Dateien) im Speicher geparst.
Gruß
Thomas
Verfasst: 10.06.2008 17:42
von Elektrolurch
Hi
Sorry ich bin leider noch Anfänger.
RemoteXMLString()
Ist leider nicht in der PureBasic Hilfe
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
Verfasst: 10.06.2008 17:57
von ts-soft
Elektrolurch hat geschrieben:Hi
Sorry ich bin leider noch Anfänger.
RemoteXMLString()
Ist leider nicht in der PureBasic Hilfe
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.
Verfasst: 11.06.2008 13:45
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