飞书文档http://https://x509p6c8to.feishu.cn/docx/doxcnrxBs55qGn6xoysTcJpqwRf

/home/kemp/work/esp/esp-idf/examples/protocols/http_request

源码下载方式参考:

源码下载方式

心知天气

注册账号,申请产品,获取密钥

产品 天气数据 HyperData 天气监控机器人 HyperBot 天气数据可视化分析平台 HyperInsights 气象灾害监控与预警系统 HyperAlert 行业 新能源 Energy 电力

公钥
PwIymwzzHNcTxxKkL
私钥
SmazqPcltzTft-X3v

API接口说明:

查看/修改你的API密钥 · 心知科技

API测试:

https://api.seniverse.com/v3/weather/now.json?key=SmazqPcltzTft-X3v&location=guangzhou&language=zh-Hans&unit=c

时间

时间https请求接口方式弃用。

时间接口可以参考工程ds_sntp.c文件实现,不建议使用http请求实现,外部第三方公司接口容易变动。

B站粉丝数

B站API更新后,只支持https方式请求,可以参考https章节代码实现。http方式弃用

https://api.bilibili.com/x/relation/stat?vmid=383943678&jsonp=jsonp

/* HTTP GET Example using plain POSIX socketsThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES ORCONDITIONS OF ANY KIND, either express or implied.
*/
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"#include "lwip/err.h"
#include "lwip/sockets.h"
#include "lwip/sys.h"
#include "lwip/netdb.h"
#include "lwip/dns.h"#include "esp_netif.h"
#include "esp_tls.h"
#include "esp_http_client.h"
#include "cJSON.h"#include "ds_http_request.h"static const char *TAG = "HTTP_CLIENT";int fans_type = 0;/*
{"sysTime2":"2022-07-10 10:12:43","sysTime1":"20220710101243"
}
*/
static void cjson_time_info(char *text)
{cJSON *root,*psub;char time[20];//截取有效jsonchar *index=strchr(text,'{');strcpy(text,index);root = cJSON_Parse(text);if(root!=NULL){psub = cJSON_GetObjectItem(root, "sysTime1");sprintf(time,"%s",psub->valuestring);ESP_LOGI(TAG,"sysTime:%s",time);}cJSON_Delete(root);int len = strlen(time);if(len < 11){return;}// uint8_t hour;// uint8_t minute;// hour = (time[8] - '0')*10+time[9] - '0';// minute = (time[10] - '0')*10+time[11] - '0';
}//天气解析结构体
typedef struct
{char city[20];char weather_text[20];char weather_code[2];char temperatur[3];
}weather_info;weather_info weathe;
/*
{"results":[{"location":{"id":"WS0E9D8WN298","name":"广州","country":"CN","path":"广州,广州,广东,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"多云","code":"4","temperature":"31"},"last_update":"2022-07-10T11:00:02+08:00"}]
}
*/
void cjson_weather_info(char *text)
{cJSON *root,*psub;cJSON *arrayItem;//截取有效jsonchar *index=strchr(text,'{');strcpy(text,index);root = cJSON_Parse(text);if(root!=NULL){psub = cJSON_GetObjectItem(root, "results");arrayItem = cJSON_GetArrayItem(psub,0);cJSON *locat = cJSON_GetObjectItem(arrayItem, "location");cJSON *now = cJSON_GetObjectItem(arrayItem, "now");if((locat!=NULL)&&(now!=NULL)){psub=cJSON_GetObjectItem(locat,"name");sprintf(weathe.city,"%s",psub->valuestring);ESP_LOGI(TAG,"city:%s",weathe.city);psub=cJSON_GetObjectItem(now,"text");sprintf(weathe.weather_text,"%s",psub->valuestring);ESP_LOGI(TAG,"weather:%s",weathe.weather_text);psub=cJSON_GetObjectItem(now,"code");sprintf(weathe.weather_code,"%s",psub->valuestring);ESP_LOGI(TAG,"%s",weathe.weather_code);psub=cJSON_GetObjectItem(now,"temperature");sprintf(weathe.temperatur,"%s",psub->valuestring);ESP_LOGI(TAG,"temperatur:%s",weathe.temperatur);}}cJSON_Delete(root);
}/*
{"code":0,"message":"0","ttl":1,"data":{"mid":383943678,"following":13,"whisper":0,"black":0,"follower":14233}
}
*/
void cjson_fans_info(char *text)
{cJSON *root,*psub,*ppsub;int fans = 0;//截取有效jsonchar *index=strchr(text,'{');strcpy(text,index);root = cJSON_Parse(text);if(root!=NULL){psub = cJSON_GetObjectItem(root, "data");if(psub!=NULL && psub->type == cJSON_Object){ppsub = cJSON_GetObjectItem(psub, "follower");if(ppsub != NULL && ppsub->type == cJSON_Number){fans = ppsub->valueint;ESP_LOGI(TAG,"fans:%d",fans);}}}fans_type++;cJSON_Delete(root);
}/*
{"cip":"121.32.92.51","cid":"440106","cname":"广东省广州市天河区"
}
*/
static void cjson_city_info(char *text)
{cJSON *root,*psub;char name[20];char cid[20];//截取有效jsonchar *index=strchr(text,'{');strcpy(text,index);root = cJSON_Parse(text);if(root!=NULL){psub = cJSON_GetObjectItem(root, "cname");sprintf(name,"%s",psub->valuestring);ESP_LOGI(TAG,"name:%s",name);psub = cJSON_GetObjectItem(root, "cid");sprintf(cid,"%s",psub->valuestring);ESP_LOGI(TAG,"cid:%s",cid);}cJSON_Delete(root);
}//事件回调
static esp_err_t _http_time_event_handle(esp_http_client_event_t *evt)
{switch(evt->event_id) {case HTTP_EVENT_ON_DATA://接收数据事件ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);if (!esp_http_client_is_chunked_response(evt->client)) {printf("%.*s\n", evt->data_len, (char*)evt->data);if(evt->data_len < 100)cjson_time_info((char*)evt->data);}break;case HTTP_EVENT_ERROR:break;case HTTP_EVENT_ON_CONNECTED:break;case HTTP_EVENT_HEADERS_SENT:break;case HTTP_EVENT_ON_HEADER:break;case HTTP_EVENT_DISCONNECTED:break;case HTTP_EVENT_ON_FINISH:break;}return ESP_OK;
}static esp_err_t _http_weather_event_handle(esp_http_client_event_t *evt)
{switch(evt->event_id) {case HTTP_EVENT_ON_DATA://接收数据事件ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);if (!esp_http_client_is_chunked_response(evt->client)) {printf("%.*s\n", evt->data_len, (char*)evt->data);cjson_weather_info((char*)evt->data);}break;case HTTP_EVENT_ERROR:break;case HTTP_EVENT_ON_CONNECTED:break;case HTTP_EVENT_HEADERS_SENT:break;case HTTP_EVENT_ON_HEADER:break;case HTTP_EVENT_DISCONNECTED:break;case HTTP_EVENT_ON_FINISH:break;}return ESP_OK;
}static esp_err_t _http_fans_event_handle(esp_http_client_event_t *evt)
{switch(evt->event_id) {case HTTP_EVENT_ON_DATA://接收数据事件ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);if (!esp_http_client_is_chunked_response(evt->client)) {printf("%.*s\n", evt->data_len, (char*)evt->data);cjson_fans_info((char*)evt->data);}break;case HTTP_EVENT_ERROR:break;case HTTP_EVENT_ON_CONNECTED:break;case HTTP_EVENT_HEADERS_SENT:break;case HTTP_EVENT_ON_HEADER:break;case HTTP_EVENT_DISCONNECTED:break;case HTTP_EVENT_ON_FINISH:break;}return ESP_OK;
}static esp_err_t _http_city_event_handle(esp_http_client_event_t *evt)
{switch(evt->event_id) {case HTTP_EVENT_ON_DATA://接收数据事件ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);if (!esp_http_client_is_chunked_response(evt->client)) {printf("%.*s\n", evt->data_len, (char*)evt->data);cjson_city_info((char*)evt->data);}break;case HTTP_EVENT_ERROR:break;case HTTP_EVENT_ON_CONNECTED:break;case HTTP_EVENT_HEADERS_SENT:break;case HTTP_EVENT_ON_HEADER:break;case HTTP_EVENT_DISCONNECTED:break;case HTTP_EVENT_ON_FINISH:break;}return ESP_OK;
}void http_time_get(){//http client配置esp_http_client_config_t config = {.method = HTTP_METHOD_GET, //get请求.url = "http://quan.suning.com/getSysTime.do",.event_handler = _http_time_event_handle,//注册时间回调.skip_cert_common_name_check = true,};esp_http_client_handle_t time_client = esp_http_client_init(&config);//初始化配置esp_err_t err = esp_http_client_perform(time_client);//执行请求if(err == ESP_OK){ESP_LOGI(TAG, "Status = %d, content_length = %d",esp_http_client_get_status_code(time_client),//状态码esp_http_client_get_content_length(time_client));//数据长度}esp_http_client_cleanup(time_client);//断开并释放资源
}void http_weather_get(){//http client配置esp_http_client_config_t config = {.method = HTTP_METHOD_GET, //get请求.url = "https://api.seniverse.com/v3/weather/now.json?key=SmazqPcltzTft-X3v&location=guangzhou&language=zh-Hans&unit=c",.event_handler = _http_weather_event_handle,//注册时间回调.skip_cert_common_name_check = true,};esp_http_client_handle_t weather_client = esp_http_client_init(&config);//初始化配置esp_err_t err = esp_http_client_perform(weather_client);//执行请求if(err == ESP_OK){ESP_LOGI(TAG, "Status = %d, content_length = %d",esp_http_client_get_status_code(weather_client),//状态码esp_http_client_get_content_length(weather_client));//数据长度}esp_http_client_cleanup(weather_client);//断开并释放资源
}void http_fans_get(){char url[100];if(fans_type == 0){//小智strcpy(url,"https://api.bilibili.com/x/relation/stat?vmid=383943678&jsonp=jsonp");}else{//阿奇strcpy(url,"https://api.bilibili.com/x/relation/stat?vmid=257459324&jsonp=jsonp");}//http client配置esp_http_client_config_t config = {.method = HTTP_METHOD_GET, //get请求.url = url,.event_handler = _http_fans_event_handle,//注册时间回调.skip_cert_common_name_check = true,};esp_http_client_handle_t fans_client = esp_http_client_init(&config);//初始化配置esp_err_t err = esp_http_client_perform(fans_client);//执行请求if(err == ESP_OK){ESP_LOGI(TAG, "Status = %d, content_length = %d",esp_http_client_get_status_code(fans_client),//状态码esp_http_client_get_content_length(fans_client));//数据长度}esp_http_client_cleanup(fans_client);//断开并释放资源
}void http_city_get(){//http client配置esp_http_client_config_t config = {.method = HTTP_METHOD_GET, //get请求.url = "http://pv.sohu.com/cityjson?ie=utf-8", //请求url.event_handler = _http_city_event_handle,//注册时间回调.skip_cert_common_name_check = true,};esp_http_client_handle_t city_client = esp_http_client_init(&config);//初始化配置esp_err_t err = esp_http_client_perform(city_client);//执行请求if(err == ESP_OK){ESP_LOGI(TAG, "Status = %d, content_length = %d",esp_http_client_get_status_code(city_client),//状态码esp_http_client_get_content_length(city_client));//数据长度}esp_http_client_cleanup(city_client);//断开并释放资源
}void ds_http_post(void)
{// //http client配置// esp_http_client_config_t config = {//     .method = HTTP_METHOD_GET, //get请求//     .url = "http://quan.suning.com/getSysTime.do",//     .event_handler = _http_event_handle,//注册时间回调//     .skip_cert_common_name_check = true,// };// // // POST// // const char *post_data = "field1=value1&field2=value2";// // esp_http_client_set_url(client, "http://httpbin.org/post");// // esp_http_client_set_method(client, HTTP_METHOD_POST);// // esp_http_client_set_post_field(client, post_data, strlen(post_data));// // int err = esp_http_client_perform(client);// // if (err == ESP_OK) {// //     ESP_LOGI(TAG, "HTTP POST Status = %d, content_length = %d",// //             esp_http_client_get_status_code(client),// //             esp_http_client_get_content_length(client));// //             int len =  esp_http_client_get_content_length(client);// //             int read_len = 0;// //             char buf[1024] = {0};// //             read_len = esp_http_client_read(client, buf, len);// //             printf("\nrecv data len:%d %d %s\n",read_len,len,buf);// // } else {// //     ESP_LOGE(TAG, "HTTP POST request failed: %s", esp_err_to_name(err));// // }// esp_http_client_cleanup(client);
}xQueueHandle http_get_event_queue;void ds_http_set_type(HTTP_GET_TYPE_E type){HTTP_GET_EVENT_T evt;evt.type = type;xQueueSend(http_get_event_queue, &evt, 10);
}static void http_get_task(void *pvParameters)
{while(1) {HTTP_GET_EVENT_T evt;xQueueReceive(http_get_event_queue, &evt, portMAX_DELAY);ESP_LOGI(TAG, "http_get_task %d",evt.type);vTaskDelay(10000 / portTICK_PERIOD_MS);//根据接收到的消息,请求不同的接口if(evt.type == HTTP_GET_TIME){//时间获取http_time_get();}else if(evt.type == HTTP_GET_WEATHER){//天气获取http_weather_get();}else if(evt.type == HTTP_GET_FANS){//粉丝获取http_fans_get();}else if(evt.type == HTTP_GET_CITY){//城市获取http_city_get();}}
}void ds_http_request_init(void)
{http_get_event_queue = xQueueCreate(10, sizeof(HTTP_GET_EVENT_T));xTaskCreate(&http_get_task, "http_get_task", 4096, NULL, 5, NULL);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912311.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912311.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912311.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs2019 + QT下 vs2019创建的项目打开ui文件失败

问题: 在vs2019 QT模式下。使用2019创建工程后。点击ui文件打开时。出现奔溃&#xff0c;如下图 解决方式&#xff1a; ui文件->右键->打开方式->添加->程序->点击三个点->qcreator(qt安装目录) ->设置为默认值->确定 点击设置为默认值&#xff0c;点…

WPS之PPT镂空效果实现

1、准备一张图片&#xff0c;剪切存入剪贴板 2、把图片设为背景 右键 》 设置背景格式 》 图片或纹理填充 》 图片填充选择剪贴板 3、插入一个矩形覆盖全图&#xff0c;设置无线条渐变填充从左到右 4、插入圆角矩形 5、单击小黄点调整弧度 6、选择无线条幻灯片背景填充 7、插…

服务注册中心的本质抉择:从业务本质看AP与CP的终极之选

本文从服务注册中心的本质职责出发&#xff0c;通过分析其核心功能、业务场景和技术约束&#xff0c;深入探讨服务注册中心在架构设计上应该优先保证AP还是CP特性。文章首先剖析服务注册中心的根本使命&#xff0c;然后从分布式系统原理、生产实践案例和性能表现三个维度进行对…

mybatis-plus从入门到入土(一):快速开始

​ 朋友们, 大家好, 从今天开始我想开一个系列博客。名字起的比较随意就叫Mybatis-Plus从入门到入土, 这系列博客的定位是从基础使用开始, 然后逐步深入全面的了解Mybatis-Plus框架, 写这个博客的主要原因是工作中经常用到Mybatis-Plus框架, 因而对这个框架相对比较了解一些, 顺…

如何快速将iPhone中的文本保存到电脑上

您的 iPhone 上是否有很多重要的短信&#xff0c;并且您想将短信备份到计算机上&#xff1f;我们都知道传输消息与传输照片不同&#xff0c;但幸运的是&#xff0c;您可以使用相关的工具和方法来实现。我们介绍了 4 种方法来解释如何将 iPhone 中的文本保存到计算机。所有的办法…

【OpenGL学习】(八)图形变换

OpenGL图形变换介绍&#xff1a;https://learnopengl-cn.github.io/01%20Getting%20started/07%20Transformations 【OpenGL学习】&#xff08;八&#xff09;图形变换 本项目将通过变换矩阵&#xff0c;对【OpenGL学习】&#xff08;七&#xff09;纹理单元 中的图形进行缩放…

从理论到实战:解密大型语言模型的核心技术与应用指南

一、Transformer&#xff1a;语言理解与生成的基石 Transformer 架构的出现&#xff0c;彻底改变了自然语言处理&#xff08;NLP&#xff09;的格局。它以“注意力”为核心&#xff0c;将全局依赖的捕捉效率推向新高。下面用 图简要概览其数据流&#xff1a; 从上图可见&#…

kali换源

在Kali Linux中切换软件源可以提高软件下载速度&#xff0c;下面为你介绍切换源的方法。 一、备份原配置文件 首先备份原配置文件&#xff0c;避免操作失误导致问题&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak二、编辑源配置文件 使用以下命令编…

从决策树到随机森林:Python机器学习里的“树形家族“深度实战与原理拆解

引言 在机器学习的算法森林中&#xff0c;有一对"树形兄弟"始终占据着C位——决策树像个逻辑清晰的"老教授"&#xff0c;用可视化的树状结构把复杂决策过程拆解成"是/否"的简单判断&#xff1b;而它的进阶版随机森林更像一支"精英军团&quo…

uniapp,每次请求时,中断上次请求

1.封装uni.request import {BASE_URL} from "/config/config.js"import store from "/store/index.js"; class RequestManager {constructor() {this.requestTasks new Map() // 存储所有请求任务this.baseURL BASE_URLthis.header {Content-Type: app…

DuDuTalk | 武汉赛思云科技有限公司通过武汉市人工智能企业认定!

近日&#xff0c;2025年武汉市人工智能企业名单正式公布&#xff01;武汉赛思云科技有限公司&#xff08;以下简称赛思云科技&#xff09;凭借卓越的技术实力与创新成果&#xff0c;成功入选武汉市人工智能企业。这是对公司长期深耕AI语音智能领域、推动数字化转型的高度认可&a…

STM32实现傅里叶变换精确计算采样电流值

以下是基于离散傅里叶变换(DFT)算法在单片机上实现精确电流值计算的全流程指南,结合硬件选型、算法优化、代码实现及实际应用场景分析,综合多篇技术文档的实践要点: ⚙️ 一、系统设计核心要点 硬件选型与配置 单片机选择:优先采用带硬件浮点单元(FPU)的STM32F4/F7系列…

python 爬虫 下载视频

测试 OK II 在开发者工具里面 直接搜索m3u8 可以直接找相对应连接地址继续分析 这个m3u8 url地址是从哪里过来的 在什么地方有 III 我们想要视频数据 <m3u8连接> 在 网页源代码里面有获取整个视频内容 --》分为N个视频片段《ts文件》-->在m3u8连接里面--> 视频播放…

希尔伯特空间:无穷维度的几何世界

希尔伯特空间&#xff1a;无穷维度的几何世界 从量子物理到信号处理&#xff0c;希尔伯特空间为现代科学与工程提供了强大的数学框架 引言&#xff1a;无限维度的舞台 在数学和物理学的广阔领域中&#xff0c;希尔伯特空间扮演着至关重要的角色。这个完备的内积空间不仅推广了…

Transformer结构与代码实现详解

参考&#xff1a; Transformer模型详解&#xff08;图解最完整版&#xff09; - 知乎https://zhuanlan.zhihu.com/p/338817680GitHub - liaoyanqing666/transformer_pytorch: 完整的原版transformer程序&#xff0c;complete origin transformer programhttps://github.com/lia…

Adobe InDesign 2025

Adobe InDesign 2025(ID2025)桌面出版软件和在线发布工具,报刊杂志印刷排版设计软件。Adobe InDesign中文版主要用于传单设计,海报设计,明信片设计,电子书设计,排版,手册设计,数字杂志,iPad应用程序和在线交互文档。它是首款支持Unicode文本处理的主流DTP应用程序,率先使用新型…

Linux下获取指定时间内某个进程的平均CPU使用率

一、引言 通过pidstat工具可以测量某个进程在两个时间点之间的平均CPU利用率。 二、pidstat工具的安装 pidstat属于sysstat套件的一部分。以Ubuntu系统为例&#xff0c;执行下面命令下载安装sysstat套件&#xff1a; apt-get install sysstat 执行完后&#xff0c;终端执行p…

1.4 蜂鸟E203处理器NICE接口详解

一、NICE接口的概念 NICE&#xff08;Nuclei Instruction Co-unit Extension&#xff09;接口是蜂鸟E203处理器中用于扩展自定义指令的协处理器接口&#xff0c;基于RISC-V标准协处理器扩展机制设计。它允许用户在不修改处理器核流水线的情况下&#xff0c;通过外部硬件加速特…

Oracle 递归 + Decode + 分组函数实现复杂树形统计进阶(第二课)

在上篇文章基础上&#xff0c;我们进一步解决层级数据递归汇总问题 —— 让上级部门的统计结果自动包含所有下级部门数据&#xff08;含多级子部门&#xff09;&#xff0c;并新增请假天数大于 3 天的统计维度。通过递归 CTE、DECODE函数与分组函数的深度结合&#xff0c;实现真…

MySQL 数据类型全面指南:详细说明与关键注意事项

MySQL 数据类型全面指南&#xff1a;详细说明与关键注意事项 MySQL 提供了丰富的数据类型&#xff0c;合理选择对数据库性能、存储效率和数据准确性至关重要。以下是所有数据类型的详细说明及使用注意事项&#xff1a; 一、数值类型 整数类型 类型字节有符号范围无符号范围说…