位置导航: 首页 / 物联网平台 / ESP8266哔哩哔哩应用 / 本页
本节课程里,我们将使用三段示例程序来向您演示如何使用ESP8266获取哔哩哔哩API数据。 以下是这三段示例程序的功能简介:
– 示例1. 粉丝信息 (UP有多少个粉丝数量、UP关注了多少个B站UP主的数量、UP的黑名单数量)
– 示例2.UP信息(UP的全部视频播放数、UP的全部专栏文章阅读数、UP的全部作品获赞数)
– 示例3.视频播放信息(视频播放量、弹幕数量、收藏数量、投币量、分享次数、点赞次数)
我们编写了专门用于ESP8266利用哔哩哔哩API获取信息的的第三方库。通过该库,您可以使用很简单的几行代码就能实现以下代码的所有功能。如需了解更多信息,请点击这里进入ESP8266-BiliBili库使用说明页面。
以下这三段示例程序都是基于零基础入门学用物联网 – 基础知识篇3-4-1 ESP8266网络客户端基本操作示例程序2所建立的。
这三段示例程序最大的区别是httpRequest函数中ESP8266所发送的http请求信息不同。建立这些HTTP请求信息的依据是哔哩哔哩API数据调用规范。加入您想要了解更多API数据调用说明信息,可以通过哔哩哔哩网站首页的搜索栏查找关键字“哔哩哔哩API”,就会找到大量的介绍视频和专栏文章。
示例1.粉丝信息 (UP有多少个粉丝数量、UP关注了多少个B站UP主的数量、UP的黑名单数量)
使用以下示例程序时,请修改以下内容:
1. ESP8266连接WiFi的信息(程序19行和21行)
2. 用户ID信息(程序27行)
假如您不清楚如何获取用户ID信息,请点击这里进入说明页面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : fans_info 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200614 程序目的/Purpose : 通过ESP8266获取哔哩哔哩用户的粉丝信息(UP有多少个粉丝数量、UP关注了多少个B站UP主的数量、 UP的黑名单数量)。 ----------------------------------------------------------------------- 其它说明 / Other Description: 本程序为太极创客团队制作的免费视频教程《零基础入门学用物联网 》中一部分。该教程系统的 向您讲述ESP8266的物联网应用相关的软件和硬件知识。以下是该教程目录页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "taichimaker"; // 连接WiFi名(此处使用taichimaker为示例) // 请将您需要连接的WiFi名填入引号中 const char* password = "12345678"; // 连接WiFi密码(此处使用12345678为示例) // 请将您需要连接的WiFi密码填入引号中 const char* host = "api.bilibili.com"; // 将要连接的服务器地址 const int httpPort = 80; // 将要连接的服务器端口 String mid = "XXXXXXXXX"; // 哔哩哔哩用户id void setup(){ Serial.begin(9600); Serial.println(""); // 连接WiFi connectWiFi(); } void loop(){ // 建立哔哩哔哩API请求资源地址 String reqRes = "/x/relation/stat?vmid=" + mid +"&type=json"; // 向哔哩哔哩API服务器服务器请求信息并对信息进行解析 httpRequest(reqRes); delay(3000); } // 向服务器请求信息并对信息进行解析 void httpRequest(String reqRes){ WiFiClient client; // 建立http请求信息 String httpRequest = String("GET ") + reqRes + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"; Serial.println(""); Serial.print("Connecting to "); Serial.print(host); // 尝试连接服务器 if (client.connect(host, 80)){ Serial.println(" Success!"); // 向服务器发送http请求信息 client.print(httpRequest); Serial.println("Sending request: "); Serial.println(httpRequest); // 获取并显示服务器响应状态行 String status_response = client.readStringUntil('\n'); Serial.print("status_response: "); Serial.println(status_response); // 使用find跳过HTTP响应头 if (client.find("\r\n\r\n")) { Serial.println("Found Header End. Start Parsing."); } // 利用ArduinoJson库解析响应信息 parseInfo(client); } else { Serial.println(" connection failed!"); } //断开客户端与服务器连接工作 client.stop(); } // 连接WiFi void connectWiFi(){ WiFi.begin(ssid, password); // 启动网络连接 Serial.print("Connecting to "); // 串口监视器输出网络连接信息 Serial.print(ssid); Serial.println(" ..."); // 告知用户NodeMCU正在尝试WiFi连接 int i = 0; // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值 } // 同时NodeMCU将通过串口监视器输出连接时长读秒。 // 这个读秒是通过变量i每隔一秒自加1来实现的。 Serial.println(""); // WiFi连接成功后 Serial.println("Connection established!"); // NodeMCU将通过串口监视器输出"连接成功"信息。 Serial.print("IP address: "); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用 Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。 } // 利用ArduinoJson库解析响应信息 void parseInfo(WiFiClient client){ const size_t capacity = JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + 70; DynamicJsonDocument doc(capacity); deserializeJson(doc, client); int code = doc["code"]; const char* message = doc["message"]; int ttl = doc["ttl"]; JsonObject data = doc["data"]; long data_mid = data["mid"]; int data_following = data["following"]; int data_whisper = data["whisper"]; int data_black = data["black"]; int data_follower = data["follower"]; Serial.println("======================="); Serial.print("Fen Si: "); // 串口监视器输出粉丝数量 Serial.println(data_follower); Serial.print("Guan Zhu: "); // 串口监视器输出关注数量 Serial.println(data_following); Serial.print("Hei Ming Dan = "); // 串口监视器输黑名单里的数量 Serial.println(data_black); Serial.print("======================="); } |
示例2.UP信息(UP的全部视频播放数、UP的全部专栏文章阅读数、UP的全部作品获赞数)
1. ESP8266连接WiFi的信息(程序19行和21行)
2. 用户ID信息(程序27行)
假如您不清楚如何获取用户ID信息,请点击这里进入说明页面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : works_info 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200614 程序目的/Purpose : 通过ESP8266获取哔哩哔哩用户的获赞数量、视频播放量、专栏阅读量 ----------------------------------------------------------------------- 其它说明 / Other Description: 本程序为太极创客团队制作的免费视频教程《零基础入门学用物联网 》中一部分。该教程系统的 向您讲述ESP8266的物联网应用相关的软件和硬件知识。以下是该教程目录页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "taichimaker"; // 连接WiFi名(此处使用taichimaker为示例) // 请将您需要连接的WiFi名填入引号中 const char* password = "12345678"; // 连接WiFi密码(此处使用12345678为示例) // 请将您需要连接的WiFi密码填入引号中 const char* host = "api.bilibili.com"; // 将要连接的服务器地址 const int httpPort = 80; // 将要连接的服务器端口 // 哔哩哔哩HTTP请求所需信息 String mid = "XXXXXXXXX"; // 哔哩哔哩用户id void setup(){ Serial.begin(9600); Serial.println(""); // 连接WiFi connectWiFi(); } void loop(){ // 建立哔哩哔哩API请求资源地址 String reqRes = "/x/space/upstat?mid=" + mid +"&type=json"; // 向哔哩哔哩服务器服务器请求信息并对信息进行解析 httpRequest(reqRes); delay(3000); } // 向哔哩哔哩服务器服务器请求信息并对信息进行解析 void httpRequest(String reqRes){ WiFiClient client; // 建立http请求信息 String httpRequest = String("GET ") + reqRes + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"; Serial.println(""); Serial.print("Connecting to "); Serial.print(host); // 尝试连接服务器 if (client.connect(host, 80)){ Serial.println(" Success!"); // 向服务器发送http请求信息 client.print(httpRequest); Serial.println("Sending request: "); Serial.println(httpRequest); // 获取并显示服务器响应状态行 String status_response = client.readStringUntil('\n'); Serial.print("status_response: "); Serial.println(status_response); // 使用find跳过HTTP响应头 if (client.find("\r\n\r\n")) { Serial.println("Found Header End. Start Parsing."); } // 利用ArduinoJson库解析哔哩哔哩响应信息 // String serverJson = client.readString(); // Serial.println(serverJson); parseInfo(client); } else { Serial.println(" connection failed!"); } //断开客户端与服务器连接工作 client.stop(); } // 利用ArduinoJson库解析哔哩哔哩响应信息 void parseInfo(WiFiClient client){ const size_t capacity = 2*JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(4) + 70; DynamicJsonDocument doc(capacity); deserializeJson(doc, client); int code = doc["code"]; const char* message = doc["message"]; int ttl = doc["ttl"]; JsonObject data = doc["data"]; long data_archive_view = data["archive"]["view"]; int data_article_view = data["article"]["view"]; int data_likes = data["likes"]; Serial.println("================"); Serial.print("Huo Zan: "); // 串口监视器输出获赞数量 Serial.println(data_likes); Serial.print("Shi Pin Bo Fang: "); // 串口监视器输出视频播放量 Serial.println(data_archive_view); Serial.print("Zhuan Lan Yue Du: ");// 串口监视器输出专栏阅读量 Serial.println(data_article_view); Serial.println("================"); } // 连接WiFi void connectWiFi(){ WiFi.begin(ssid, password); // 启动网络连接 Serial.print("Connecting to "); // 串口监视器输出网络连接信息 Serial.print(ssid); Serial.println(" ..."); // 告知用户NodeMCU正在尝试WiFi连接 int i = 0; // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值 } // 同时NodeMCU将通过串口监视器输出连接时长读秒。 // 这个读秒是通过变量i每隔一秒自加1来实现的。 Serial.println(""); // WiFi连接成功后 Serial.println("Connection established!"); // NodeMCU将通过串口监视器输出"连接成功"信息。 Serial.print("IP address: "); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用 Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。 } |
示例3.视频播放信息(视频播放量、弹幕数量、收藏数量、投币量、分享次数、点赞次数)
1. ESP8266连接WiFi的信息(程序19行和21行)
2. 视频ID信息(程序27行)
假如您不清楚如何获取视频ID信息,请点击这里进入说明页面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : video_info 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200614 程序目的/Purpose : 通过ESP8266获取哔哩哔哩视频信息,这些信息包括: 视频播放量,弹幕数量、评论数量、收藏、投币、分享、点赞 ----------------------------------------------------------------------- 其它说明 / Other Description: 本程序为太极创客团队制作的免费视频教程《零基础入门学用物联网 》中一部分。该教程系统的 向您讲述ESP8266的物联网应用相关的软件和硬件知识。以下是该教程目录页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "taichimaker"; // 连接WiFi名(此处使用taichimaker为示例) // 请将您需要连接的WiFi名填入引号中 const char* password = "XXXXXXXX"; // 连接WiFi密码(此处使用12345678为示例) // 请将您需要连接的WiFi密码填入引号中 const char* host = "api.bilibili.com"; // 将要连接的服务器地址 const int httpPort = 80; // 将要连接的服务器端口 // 哔哩哔哩API服务器HTTP请求所需信息 String bvid = "XXXXXXXXXX"; // 哔哩哔哩视频BV号 void setup(){ Serial.begin(9600); Serial.println(""); // 连接WiFi connectWiFi(); } void loop(){ // 建立哔哩哔哩API请求资源地址 String reqRes = "/x/web-interface/archive/stat?bvid=" + bvid; // 向哔哩哔哩服务器服务器请求信息并对信息进行解析 httpRequest(reqRes); delay(3000); } // 向哔哩哔哩服务器请求信息并对信息进行解析 void httpRequest(String reqRes){ WiFiClient client; // 建立http请求信息 String httpRequest = String("GET ") + reqRes + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"; Serial.println(""); Serial.print("Connecting to "); Serial.print(host); // 尝试连接服务器 if (client.connect(host, 80)){ Serial.println(" Success!"); // 向服务器发送http请求信息 client.print(httpRequest); Serial.println("Sending request: "); Serial.println(httpRequest); // 获取并显示服务器响应状态行 String status_response = client.readStringUntil('\n'); Serial.print("status_response: "); Serial.println(status_response); // 使用find跳过HTTP响应头 if (client.find("\r\n\r\n")) { Serial.println("Found Header End. Start Parsing."); } // 利用ArduinoJson库解析哔哩哔哩API服务器响应信息 //String serverJson = client.readString(); //Serial.println(serverJson); parseInfo(client); } else { Serial.println(" connection failed!"); } //断开客户端与服务器连接工作 client.stop(); } // 连接WiFi void connectWiFi(){ WiFi.begin(ssid, password); // 启动网络连接 Serial.print("Connecting to "); // 串口监视器输出网络连接信息 Serial.print(ssid); Serial.println(" ..."); // 告知用户NodeMCU正在尝试WiFi连接 int i = 0; // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值 } // 同时NodeMCU将通过串口监视器输出连接时长读秒。 // 这个读秒是通过变量i每隔一秒自加1来实现的。 Serial.println(""); // WiFi连接成功后 Serial.println("Connection established!"); // NodeMCU将通过串口监视器输出"连接成功"信息。 Serial.print("IP address: "); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用 Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。 } // 利用ArduinoJson库解析哔哩哔哩API服务器响应信息 void parseInfo(WiFiClient client){ const size_t capacity = JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(15) + 170; DynamicJsonDocument doc(capacity); deserializeJson(doc, client); int code = doc["code"]; const char* message = doc["message"]; int ttl = doc["ttl"]; JsonObject data = doc["data"]; long data_aid = data["aid"]; const char* data_bvid = data["bvid"]; int data_view = data["view"]; int data_danmaku = data["danmaku"]; int data_reply = data["reply"]; int data_favorite = data["favorite"]; int data_coin = data["coin"]; int data_share = data["share"]; int data_like = data["like"]; int data_now_rank = data["now_rank"]; int data_his_rank = data["his_rank"]; int data_no_reprint = data["no_reprint"]; int data_copyright = data["copyright"]; const char* data_argue_msg = data["argue_msg"]; const char* data_evaluation = data["evaluation"]; Serial.println("======================="); Serial.print("Bo Fang: "); // 串口监视器输出播放数量 Serial.println(data_view); Serial.print("Dan Mu: "); // 串口监视器输出弹幕数量 Serial.println(data_danmaku); Serial.print("Ping Lun: "); // 串口监视器输出评论数量 Serial.println(data_reply); Serial.print("Shou Cang: "); // 串口监视器输出收藏数量 Serial.println(data_favorite); Serial.print("Tou Bi: "); // 串口监视器输出投币数量 Serial.println(data_coin); Serial.print("Fen Xiang: "); // 串口监视器输出分享数量 Serial.println(data_share); Serial.print("Huo Zan: "); // 串口监视器输出获赞数量 Serial.println(data_like); Serial.println("======================="); } |