ESP32通过https+json获取一言

一言地址:https://hitokoto.cn/

简单来说,一言指的就是一句话,可以是动漫中的台词,也可以是网络上的各种小段子。 或是感动,或是开心,有或是单纯的回忆。来到这里,留下你所喜欢的那一句句话,与大家分享,这就是一言存在的目的。

感觉通过esp32获取一言并没有什么意义,纯属是我个人兴趣。

效果如下:
获取一言并在屏幕上显示
一言提供了api,我们只需请求api地址就能获取到数据,一言可以返回返回格式化后的 JSON 文本,也可以返回纯洁文本,如果使用JSON 格式我们需要对其进行解析。具体格式看官网介绍。
在这里插入图片描述
WiFi配置部分这里不说明,以下是http和json部分程序。

首先我们需要添加两个头文件:

#include <HTTPClient.h>
#include <ArduinoJson.h>

定义两个数组存放一言的内容和出处:

//一言
typedef struct {
  char hitokoto[1024];//一言正文。编码方式 unicode。使用 utf-8。
  char from[60];//一言的出处
} HitokotoData_t;
HitokotoData_t Hitokoto;

访问一言api地址,解析获取返回的json内容,并复制到前面建的数组中:

void get_Hitokoto(void)
{
  HTTPClient http;
  http.begin("https://v1.hitokoto.cn/");//Specify the URL
  int httpCode = http.GET();            //Make the request
  if (httpCode > 0) { //Check for the returning code

    String payload = http.getString();
    Serial.println(httpCode);
    Serial.println(payload);

    DynamicJsonBuffer jsonBuffer;
    JsonObject& root = jsonBuffer.parseObject(payload);

    if (!root.success()) {
      Serial.println("JSON parsing failed!");
    } else {
      if (strlen(root["hitokoto"]) > sizeof(Hitokoto.hitokoto)) {
        http.end();
        return;
      }
      strcpy(Hitokoto.hitokoto, root["hitokoto"]);
      strcpy(Hitokoto.from, root["from"]);
    }
  }
  else {
    Serial.println("Error on HTTP request");
  }
  http.end(); //Free the resources
  
  Serial.println(Hitokoto.hitokoto);
  Serial.printf("出处:");
  Serial.println(Hitokoto.from);
}

这是获取到的json格式内容:
在这里插入图片描述
这是解析出来我们需要的内容:
在这里插入图片描述
使用strcpy复制内容时需要注意防止内存溢出,由于一言的作者(from_who)可能为空,如果获取这个内容,需要先判断内容是否为空,否则会导致因语法错误mcu复位。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值