Arduino usa la placa de desarrollo esp8266 para leer la cantidad de seguidores en la página web de Bilibili usando el método https, etc.

referencia

http://www.taichi-maker.com/homepage/iot-development/iot-dev-reference/esp8266-c-plus-plus-reference/http-client-secure/certificate-fingerprint/
http://www. taichi-maker.com/homepage/iot-development/iot-platform/esp8266-bilibil-api-tutorial/esp8266-bilibili-api-application/
https://www.bilibili.com/read/cv17367361/

Problemas encontrados

1. No sé por qué el ejemplo en Tai Chi Maker no puede obtener los datos devueltos y muestra la redirección 307. Personalmente creo que se debe al problema del método de acceso http. En la operación real, si usa el carácter de conexión de
http +datos, el navegador saltará automáticamente. 2. Comienza con https
. Usando el ejemplo de Tai Chi Maker, simplemente cambiando http a https no obtendrá los datos correctos.
3. Teniendo en cuenta la confidencialidad de https y la diferencia en los métodos de acceso de http, decidí usar la biblioteca https yo mismo.
Según mi experiencia personal en el uso de esta biblioteca, finalmente obtuve el efecto deseado, que se mostrará más adelante en combinación con oled.

Flujo general del programa

Insertar descripción de la imagen aquí

programa

En primer lugar, el programa se modifica según el programa del programa de muestra (asegúrese de que la biblioteca esp8266 esté instalada antes de que se muestre).
Insertar descripción de la imagen aquí

/**
   BasicHTTPSClient.ino

    Created on: 20.08.2018

*/

#include <Arduino.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>

//需要自己修改的内容
//修改自己的密钥,也可在下面直接忽略安全访问,就不需要密钥了
// Fingerprint for demo URL, expires on June 2, 2021, needs to be updated well before this date
//0xEB ,0x78, 0xA8 ,0x16 ,0x32, 0x76, 0x12,0xD8, 0x51 ,0xFF
const uint8_t fingerprint[20] = {
    
     0xA9, 0xB8, 0x02 ,0xDF, 0xD6, 0xE7 ,0x32, 0x1D, 0xB9, 0xE8, 0xFF };
const char *ssid = "Tenda_7881A0";    //你的网络名称
const char *password = "88888888"; //你的网络密码
const String UID = "231216575";      //host+path+UID组成了访问网页的url
const String host = "https://api.bilibili.com";
const String path = "/x/relation/stat?vmid=";
//修改结束,其他基本不需要修改

ESP8266WiFiMulti WiFiMulti;

void setup() {
    
    

  Serial.begin(115200);  //设置显示串口波特率
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    
    
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);    //客户模式
  WiFiMulti.addAP(ssid, password);  //设置连接的wifi密码和名称
}

void loop() {
    
    
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {
    
    

    std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);

    client->setFingerprint(fingerprint);
    // Or, if you happy to ignore the SSL certificate, then use the following line instead:
    // client->setInsecure();  //也可以不使用指纹证书登录

    HTTPClient https;

    Serial.print("[HTTPS] begin...\n");
    if (https.begin(*client, host+path+UID)) {
    
      // HTTPS

      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = https.GET();  //访问url返回的状态码

      // httpCode will be negative on error
      if (httpCode > 0) {
    
    
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
    
    
          String payload = https.getString();
          Serial.println(payload);
          de_json(payload);  //将请求到的json数据进行解析显示
        }
      } else {
    
    
        Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
      }

      https.end();
    } else {
    
    
      Serial.printf("[HTTPS] Unable to connect\n");
    }
  }

  Serial.println("Wait 10s before next round...");
  delay(3000);
}
void de_json(String input){
    
    

  //从这里开始是使用辅助工具生成的
  StaticJsonDocument<256> doc;

  DeserializationError error = deserializeJson(doc, input);

  if (error) {
    
    
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }

  int code = doc["code"]; // 0
  const char* message = doc["message"]; // "0"
  int ttl = doc["ttl"]; // 1

  JsonObject data = doc["data"];
  long data_mid = data["mid"]; // 231216575
  int data_following = data["following"]; // 154
  int data_whisper = data["whisper"]; // 0
  int data_black = data["black"]; // 0
  int data_follower = data["follower"]; // 1  
  //辅助工具得到的代码到这里结束,下面是自己想要显示的内容

  Serial.println("=======================");
  Serial.println(ttl);   
  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("=======================");
}

Preparativos necesarios para el procedimiento.

Lo siguiente depende de la situación real de su navegador, el método de visualización puede ser diferente (yo personalmente uso edge)

Vea la URL de los datos de Bilibili que necesita

Obtenga los datos requeridos de host, ruta y UID
. 1. Busque la página web que muestra los datos requeridos
Insertar descripción de la imagen aquí
. 2. Encuentre la información de solicitud para los datos requeridos.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Desde aquí puede encontrar los tres datos requeridos.

Buscar huella digital de autenticación

Finalmente, obtienes la huella digital SHA-1. Tenga en cuenta que esto tiene un límite de tiempo.
Insertar descripción de la imagen aquí

Primero obtenga manualmente la forma básica de datos del navegador.

Método de obtención: Convertir el host+ruta+uid obtenido previamente a la URL del navegador , ingresarlo en el navegador y obtener un formato similar al siguiente archivo json
Insertar descripción de la imagen aquí

Utilice herramientas auxiliares json para obtener texto analizado rápidamente

**El propósito de usar la herramienta de conversión:** Para que el acceso a los datos sea más conveniente,
Insertar descripción de la imagen aquí
el método de uso de la herramienta auxiliar es el siguiente: En el segundo paso, coloque el texto de datos json obtenido en
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_43794311/article/details/133140939
Recomendado
Clasificación