XPU-17通信生产实习-智能音箱项目-DAY3

这篇博客记录了作者在XPU-17实习的第三天,主要涉及智能音箱项目的开发,包括编程规范、智能音箱的工作流程、实习流程中的KWS、VAD、ASR、TTS、NLU等关键模块。同时,介绍了音频处理、鉴权认证机制和请求方式及参数的基本说明。此外,还提到了中央气象台API的使用和实习中的作业任务。
摘要由CSDN通过智能技术生成

1.可执行cc main.c cJSON.c -o <指定输出文件名> -lcurl编译文件,编译时需添加所有的c程序文件;
2.若编译提示段错误,是因为fp打开之后未关闭,需添加fclose(fp);  free(response);这两句;
3.代码中包含中文时,需要以UTF-8格式保存代码文件;

#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");
    //如果不指定写入的文件,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* latest = cJSON_GetObjectItemCaseSensitive(json, "latest");

    cJSON* comfirmed = cJSON_GetObjectItemCaseSensitive(latest, "confirmed");

    cJSON* deaths = cJSON_GetObjectItemCaseSensitive(latest, "deaths");

    printf("确诊人数: %d\n", comfirmed->valueint);
    printf("死亡人数: %d\n", deaths->valueint);

    //释放json数据结构占用的内存
    cJSON_free(json);

    free(response);

    return EXIT_SUCCESS;
}

编程规范

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值