从网页获取货币汇率的c ++程序

时间:2015-06-30 20:30:53

标签: c++

您好我想用C ++编写一个程序,可以从Google或Yahoo或其他网页获得实时费率,然后执行转换。有人可以指导我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

问题非常广泛。 几个主要步骤可以定义如下:

  1. 您可以为特定网站创建套接字,并从该网站流式传输该数据。有关此问题的更多信息,您可以查看http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/overview/networking/iostreams.html

  2. 然后,您可以扫描数据并编写正则表达式,以便从数据中检索值,然后将它们输出到您想要显示的任何位置。

  3. 然后你可以编写一个bash脚本来定期反复运行这个代码对象。因此,如果不手动扫描网站,您将获得实时结果。

答案 1 :(得分:0)

CSocket r;
wchar_t ku[5100];

AfxSocketInit();

 wchar_t b[]=L"GET /currency-converter/#from=USD;to=EUR;amt=1 H
TTP/1.1\r\nhost:finance.yahoo.com\r\n\r\n";

;
    r.Create()
    r.Connect(L"finance.yahoo.com",80);
    r.Send(b,sizeof(b));
    r.Receive(ku,sizeof(ku));  //header stuff
    r.Receive(ku,sizeof(ku));  //rate
    CString t(ku); 
    //grabbed data is ready 

优点:CString + WSA错误内容

和linux示例:

#include<stdio.h> //printf
#include<string.h>    //strlen
#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr
 #include <unistd.h> 
       #include <netdb.h>
int main(int argc , char *argv[])
{
    int sock;
    struct sockaddr_in server;
    char  server_reply[5000];

     struct hostent *host;

    //Create socket
    sock = socket(AF_INET , SOCK_STREAM , 0);
    if (sock == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     host = gethostbyname("finance.yahoo.com");


    server.sin_addr.s_addr=*((unsigned long*)host->h_addr);
    server.sin_family = AF_INET;
    server.sin_port = htons( 80 );

    //Connect to remote server
    if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        perror("connect failed. Error");
        return 1;
    }

    puts("Connected\n");


char        message[]="GET /currency-converter/#from=USD;to=EUR;amt=1 HTTP/1.1\r\nhost:finance.yahoo.com\r\n\r\n";

        //Send some data
        if( send(sock , message , strlen(message) , 0) < 0)
        {
            puts("Send failed");
            return 1;
        }


        //Receive a reply from the server
        if( recv(sock , server_reply , 3000 , 0) < 0)
        {
            puts("recv failed");

        }

        puts("Server reply :");

        puts(server_reply);



        //Receive a reply from the server
        if( recv(sock , server_reply , 3000 , 0) < 0)
        {
            puts("recv failed");

        }
         puts(server_reply);


    close(sock);
    return 0;
}