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:\n %s\n",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;
}

部分實現,本人還在編寫,此處做個記錄,未完待續...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM