您好我想用C ++编写一个程序,可以从Google或Yahoo或其他网页获得实时费率,然后执行转换。有人可以指导我如何解决这个问题吗?
答案 0 :(得分:0)
问题非常广泛。 几个主要步骤可以定义如下:
您可以为特定网站创建套接字,并从该网站流式传输该数据。有关此问题的更多信息,您可以查看http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/overview/networking/iostreams.html
然后,您可以扫描数据并编写正则表达式,以便从数据中检索值,然后将它们输出到您想要显示的任何位置。
然后你可以编写一个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;
}