Programm mit aktuellen Börsendaten
-
Hallo, ich habe mir ein kleines Projekt ausgedacht, damit ich die Sprache lerne. Es ist ein kleines Programm, welches die aktuellen Börsendaten aus dem Netzt holt und die erstmal so anzeigt(später auch grafisch). Das Problem sind nicht die Sockets, damit komm ich irgendwie klar. Auch nicht die Api. Sondern ich weiss nicht wie ich an die Daten rannkomme. Es gibt tonnenweise Seiten mit aktuellen Borsendaten, aber ich will rohe Daten ohne Layout am besten als TXT gespeichert. Sowas hab ich bis jetzt nicht gefunde. Mir bleibt jetzt also aus HTML-Dateien die nötigen Daten rauszufischen. Wenn jemand sowas schon mal gemacht hat, kennt jemand eine andere Möglichkeit?
MfG
-
yahoo hat glaube ich mal eine api auf xml basis angeboten, bin mir aber nicht ganz sicher, ist schon jahre her als ich yahoo als informationsquelle benutzt habe

-
Vielleicht kannst du es ja als Webservice mit SOAP machen. Auf: http://www.webservicex.net/ gibts nen Webservice für Börsendaten, weiß aber nicht wie aktuell der ist oder ob er vielleicht auch Geld kostet.
MfG
-
Ich bin immer noch auf der Suche. Naja es gibt ein anderes Problem mit den Sockets. Ich habe mir von vielen Seiten die Beispiele angeguckt und mit daraus mein eigenes Programm gebastel welches auch bis vor kurzem lief.
#include <iostream> #include <winsock.h> #include <string> #include <unistd.h> #include <fstream> #define BUF_SIZ 4096 using namespace std; string get_html(string test) { string str1="<HTML>"; string str2="</HTML>"; int pos1 = test.find(str1); int pos2 = test.find(str2)+7; string buffer = test.substr(pos1, pos2-pos1); return buffer; } int send_request(const int sock, char msg[BUF_SIZ]) { int bytes = send(sock, msg, strlen(msg),0); if(bytes == -1) { perror("send failded"); return EXIT_FAILURE; } return 0; } string get_response(const int sock) { int bytes; char response[BUF_SIZ]; while(bytes>0) { bytes=recv(sock,response,sizeof(response),0); if(bytes < 0) { perror("recv failed"); exit(EXIT_FAILURE); } } return response; } int wsa_starting() { WSADATA wsa; if(WSAStartup(MAKEWORD(1,1), &wsa)) { cout<<"WSAStartup() failed"; return EXIT_FAILURE; } return 0; } int socket_connect(char ip[],unsigned short port) { int s = socket(PF_INET, SOCK_STREAM,0); if(s==-1) { perror("socket() failed"); return EXIT_FAILURE; } struct hostent *host; struct sockaddr_in addr; //addr.sin_addr.s_addr = inet_addr(ip); addr.sin_port = htons(port); addr.sin_family = AF_INET; host = gethostbyname(ip); if (!host) { perror("gethostbyname() failed"); return 1; } addr.sin_addr = *(struct in_addr*) host->h_addr; if(connect(s, (struct sockaddr*) &addr, sizeof(addr))) { perror("connect() failed"); return EXIT_FAILURE; } return s; } int main() { wsa_starting(); int s=socket_connect("www.google.de",80); send_request(s, "GET /index.html HTTP/1.1\r\n" "Host: www.google.de\r\n" "Connection: Close\r\n\r\n"); fstream f; f.open("response.txt", ios::out); string test=get_html(get_response(s)); f<<test<<endl; cout<<test<<endl; close(s); f.close(); return EXIT_SUCCESS; }Windows, Dev-Cpp
Vorhin habe ich, bei einer anderen Seite, 404 Bad Request bekommen und den auch gespeichert. Jetzt: kein Fehler, keine Warnung auch bei Code:Blocks
sondern das hier!This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.WTF?
-
Scheint ein Laufzeitproblem zu sein, kann es vielleicht sein, dass die Funktion perror() das ganze verursacht, wie sieht den die Implementierung oder die Dokumentation dazu aus?
MfG
-
recv(sock,response,sizeof(response),0);
Ich galub das ist auch nicht das was du willst
-
Inwiefern?
Das Problem ist, dass es funktioniert hat. Seit dem ich den Host geändert habe. Gerade habe ich den zurückgeändert und es funktioniert wieder. Ich bekomme ein 404. Will ich eine Datei z.B. index.html kommt wieder dieser Mist.Edit: Ich habe alle perror rausgenommen, trotzdem bleibt das Problem