本实验是实现一个简易天气预报客户端。可查看最近三天天气预报。
使用一些常用天气API数据实现数据的解析。此处我是用心知天气(),其IP地址为:116.62.81.138 使用端口号:80 传输协议TCP
网页信息一般使用GET或POST获取,此处查看心知天气开发文档可知,使用GET方法。
网页传输过来的数据一般使用json格式进行传输,我们需要对其进行解析,然后再依次展示出来。
部分代码如下:
static int cJSON_NowWeatherParse(char *JSON,Weather *result); int main(int argc, char *argv[]) { int sockfd,sendbytes; char buf[BUFFER_SIZE]; char GetRequestBuf[256]={0}; char WeatherRecvBuf[1024]={0}; char weather_json[20]=NOW_JSON; char location[20]="shanghai"; Weather *result; struct hostent *host; struct sockaddr_in serv_addr; memset(buf,0,sizeof(buf)); sockfd=socket(AF_INET,SOCK_STREAM,0); serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(PORT); serv_addr.sin_addr.s_addr=inet_addr(WEATHER_IP_ADDR); //bzero(&(serv_addr.sin_zero),8); if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){ perror("connect fail!"); } sprintf(GetRequestBuf,GET_RRQUEST_PACKAGE,weather_json,KEY,location); if((sendbytes=send(sockfd,GetRequestBuf,strlen(GetRequestBuf),0))==-1){ perror("send fail"); } recv(sockfd,WeatherRecvBuf,1024,0); printf("Server return data is: %s ",WeatherRecvBuf); /* 解析天气数据并保存到结构体变量weather_data中 */ if (0 == strcmp(weather_json, NOW_JSON)) // 天气实况 { cJSON_NowWeatherParse(WeatherRecvBuf, result); } else if(0 == strcmp(weather_json, DAILY_JSON)) // 未来三天天气 { //cJSON_DailyWeatherParse(GbkRecvBuf, result); } close(sockfd); return 0; }
部分实现,本人还在编写,此处做个记录,未完待续...