ESP32超详细学习记录:获取B站粉丝数

获取粉丝数需要知道API调用接口

怎么获得调用的API接口呢?

以罗翔老师的bilibili账号为例子。

本人用的Firefox浏览器,其他浏览器操作与Firefox类似,在此只是提供获取API的途径,不想了解可以直接下滑找到API连接复制即可。

在此界面按下F12,打开开发调试工具。

选择网络,有的浏览器显示network

刷新当前浏览器界面

在这个界面可以看到所以的网络请求

需要什么功能可以挨着点开看看。

本次只需要获取粉丝数

只需要找到这个请求即可

请求方式是GET

直接双击会跳转页面

单击之后选择响应(response)也可。

看到follower2000多万 ~ 嗯! 没错了,这就是想要的API

所需要的就是这一条了

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

后面&jsonp=jsonp是解决浏览器跨域数据访问的,咱这要粉丝数用不上
 


最后的最后

https://api.bilibili.com/x/relation/stat?vmid=你的UID

只需要用esp32向这个地址发送请求即可获得粉丝数啦~

需要用到的函数

ArduinoJson库有三个

函数解释:ESP32超详细学习记录:JSON解析(利用ArduinoJson库)_喜暖知寒的博客-CSDN博客

DynamicJsonDocument doc(capacity);
deserializeJson(doc, json);

String nameStr = doc["name"].as();
    //返回字符串形式
int numberInt = doc["number"].as();
    //返回整数的形式

HTTPClient库用到四个

函数解释:

ESP32超详细学习记录:对HTTP进行请求(简单)_喜暖知寒的博客-CSDN博客

HTTPClient.begin(String url);
HTTPClient.GET();
HTTPClient.getString();
HTTPClient.end();

对获取bilibili粉丝相关功能单独放在了文件内

文件夹内包含文件:main.ino、GitFans.cpp 、GitFans.h 、UserWiFi.cpp 、UserWiFi.h

GitFans.cpp

#include "GitFans.h"
HTTPClient http;    //创建HTTPClient 实例
String url_bilibiliFans = "";    //资源定位符

long Fansnumber = 0;    //粉丝数

String GitFans::GitURL(String uid)    //拼接资源定位符,获取API链接
{
  url_bilibiliFans =  "https://api.bilibili.com/x/relation/stat?vmid=";
  url_bilibiliFans += uid;

  return url_bilibiliFans;
}

void GitFans::ParseFans(String url)
{  
  DynamicJsonDocument doc(1024);  //分配内存
  http.begin(url);    //请求网址

  int httpGet = http.GET();    //获得服务器状态码
  if(httpGet > 0)
  {
    Serial.printf("HTTPGET is %d",httpGet);    //打印服务器状态码

    if(httpGet == HTTP_CODE_OK)    //判断是否请求成功
    {

      String json = http.getString();    //获得响应体信息
      Serial.println(json);    //打印响应体信息

      deserializeJson(doc, json);    //Json解析

      Fansnumber = doc["data"]["follower"];    //获得粉丝数,整形
       
    }
    else
    {
      Serial.printf("ERROR1!!");
    }
  }
  else
  {
    Serial.printf("ERROR2!!");
  }
  http.end();
}

GitFans.h

#ifndef __GITFANS_H__
#define __GITFANS_H__

#include <ArduinoJson.h>    //引用两个需要的库
#include <HTTPClient.h>

extern long Fansnumber;

class GitFans
{
public:

  void ParseFans(String url);

  String GitURL(String uid);
  
private:
  
};
#endif

main.ino

#include "UserWiFi.h"
#include "GitFans.h"

const char * ID = "NATCAP_0E35";
const char * PASSWORD = "88888888";

String UID = "517327498";

String FansURL;

UserWiFi userwifi;
GitFans gitfans;

void setup() 
{
  Serial.begin(115200);
  FansURL = gitfans.GitURL(UID);    //获得API
  userwifi.WiFiConnect(ID,PASSWORD);

}

void loop() 
{
  Serial.println("连接成功!");
  gitfans.ParseFans(FansURL);    //处理粉丝数据
  Serial.println(Fansnumber);    //打印粉丝数
  delay(5000);
}

其余为WIFI连接相关函数,参考ESP32超详细学习记录:wifi连接最基础方法_喜暖知寒的博客-CSDN博客
 


简化为一个函数

(已验证!可直接复制编译)

#include <WiFi.h>
#include <ArduinoJson.h>
#include <HTTPClient.h>
 
const char * ID = "NATCAP_0E35";
const char * PASSWORD = "88888888";
 
//fans相关参数
String UID = "517327498";
String FansURL = "0";
String url_bilibiliFans = "";
long Fansnumber = 0;
 
/* 创建实例 */
HTTPClient http;
 
String GitURL(String uid)
{
  url_bilibiliFans =  "https://api.bilibili.com/x/relation/stat?vmid=";
  url_bilibiliFans += uid;
  return url_bilibiliFans;
}
 
void ParseFans(String url)
{  
  DynamicJsonDocument doc(1024); //分配内存,动态
  http.begin(url);
 
  int httpGet = http.GET();
  if(httpGet > 0)
  {
    Serial.printf("HTTPGET is %d",httpGet);
    if(httpGet == HTTP_CODE_OK)
    {
      String json = http.getString();
      Serial.println(json);
      deserializeJson(doc, json);
      Fansnumber = doc["data"]["follower"];  
    }
    else
    {
      Serial.printf("ERROR1!!");
    }
  }
  else
  {
    Serial.printf("ERROR2!!");
  }
  http.end();
}
 
void setup() 
{
  Serial.begin(115200);
  FansURL = GitURL(UID);
  
  //==================wifi连接==================
  
  Serial.println("WiFi:");
  Serial.println(ID);
  Serial.println("PASSWORLD:");
  Serial.println(PASSWORD);
  
  WiFi.begin(ID,PASSWORD);
  
  while(WiFi.status()!=WL_CONNECTED)
  {
    delay(500);
    Serial.println("正在连接...");
  }
 
  Serial.println("连接成功!");
  //==================wifi连接==================
}
 
void loop() 
{
  Serial.println("连接成功!");
  ParseFans(FansURL);
  Serial.println(Fansnumber);
  delay(5000);  
}


其实不难
 

最终串口打印数据

 粉丝数22525863 ~  大佬就是大佬

读天气、新闻其他的之类的都可以由这个框架更改的。

一些错误信息判断功能都没有添加上去,要是应用下来还是需要添加的。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是ESP32获取B粉丝数的代码: ```c #include <WiFi.h> #include <HTTPClient.h> #include <ArduinoJson.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* host = "api.bilibili.com"; const char* endpoint = "/x/relation/stat?vmid=your_UID"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; Serial.print("Connecting to host: "); Serial.println(host); http.begin(host, 80, endpoint); int httpCode = http.GET(); if (httpCode > 0) { String payload = http.getString(); Serial.println(payload); DynamicJsonDocument doc(1024); deserializeJson(doc, payload); int followerCount = doc["data"]["follower"].as<int>(); Serial.print("Follower count: "); Serial.println(followerCount); } else { Serial.print("HTTP request failed with code "); Serial.println(httpCode); } http.end(); } delay(60000); // 每分钟更新一次粉丝数 } ``` 在这个代码中,我们使用WiFi库连接到WiFi网络,并使用HTTPClient库向BAPI发出GET请求,以获取B用户的粉丝数。我们将收到的JSON响应解析为JSON对象,并从中提取粉丝计数。最后,我们将粉丝计数打印到串口。此代码每分钟更新一次粉丝数。请将“your_SSID”,“your_PASSWORD”和“your_UID”替换为您的WiFi SSID,密码和B用户ID。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值