Linux环境下天气预报实现

本实验是实现一个简易天气预报客户端。可查看最近三天天气预报。

使用一些常用天气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;
}

部分实现,本人还在编写,此处做个记录,未完待续...

原文地址:https://www.cnblogs.com/xiaosanxian/p/12639318.html