1 Star 0 Fork 22

zlt / 西安工程大学智能音箱实训作业-通信2

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
weather.c 2.78 KB
Copy Edit Raw Blame History
孙丹丹 authored 2020-07-02 22:40 . 最新空气质量
#include <stdio.h>
#include <stdlib.h> //malloc使用的头文件
#include <curl/curl.h> //libcurl的头文件
#include "cJSON.h" //cJSON的头文件
int main(void)
{
FILE* fp;
//以只写方式打开文件
//fp = fopen("hello.txt", "w");
//响应消息的地址
char* response = NULL;
//响应消息的长度
size_t resplen = 0;
//创建内存文件,当通过文件句柄写入数据时,会自动分配内存
fp = open_memstream(&response, &resplen);
if (fp == NULL) //打开文件失败,打印错误信息并退出
{
perror("open_memstream() failed");
return EXIT_FAILURE;
}
//初始化HTTP客户端
CURL* curl = curl_easy_init();
if (curl == NULL)
{
perror("curl_easy_init() failed");
return EXIT_FAILURE;
}
//准备HTTP请求消息,设置API地址(URI)
//curl_easy_setopt(curl, CURLOPT_URL, "https://coronavirus-tracker-api.herokuapp.com/v2/latest");
curl_easy_setopt(curl, CURLOPT_URL, "http://www.nmc.cn/f/rest/aqi/57127");
//
//如果不指定写入的文件,libcurl会把服务器响应消息中的内容打印到屏幕上
//如果指定了文件句柄,libcurl会把服务器响应消息中的内容写入文件
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
//打印HTTP请求和响应消息头
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
//发送HTTP请求消息,等待服务器的响应消息
CURLcode error = curl_easy_perform(curl);
if (error != CURLE_OK)
{
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(error));
curl_easy_cleanup(curl);
return EXIT_FAILURE;
}
//释放HTTP客户端申请的资源
curl_easy_cleanup(curl);
//关闭内存文件
fclose(fp);
puts(response);
//解析JSON字符串
cJSON* json = cJSON_Parse(response);
if (json == NULL)
{
const char* error_pos = cJSON_GetErrorPtr();
if (error_pos != NULL)
{
fprintf(stderr, "Error before: %s\n", error_pos);
}
return EXIT_FAILURE;
}
cJSON* forecasttime = cJSON_GetObjectItemCaseSensitive(json, "forecasttime");
cJSON* aqi = cJSON_GetObjectItemCaseSensitive(json, "aqi");
cJSON* aq = cJSON_GetObjectItemCaseSensitive(json, "aq");
cJSON* text = cJSON_GetObjectItemCaseSensitive(json, "text");
printf("预报时间: %s\n", forecasttime->valuestring);
printf("空气质量指数: %d\n", aqi->valueint);
printf("空气质量等级: %d\n", aq->valueint);
printf("空气质量: %s\n", text->valuestring);
//释放json数据结构占用的内存
cJSON_free(json);
free(response);
return EXIT_SUCCESS;
}
1
https://gitee.com/zlt_xa/XPU-SmartSpeaker-TX2.git
git@gitee.com:zlt_xa/XPU-SmartSpeaker-TX2.git
zlt_xa
XPU-SmartSpeaker-TX2
西安工程大学智能音箱实训作业-通信2
master

Search