esp32获取B站粉丝数

ESP32获取B站粉丝数

声明

个人学习笔记,仅做参考,能力有限,如有错误请不吝赐教

参考资料

  1. https://zhuanlan.zhihu.com/p/115986084
  2. 官方例程examples\protocols\http_request

环境

idf+vscode+wsl

硬件

WROOM-32D

原理

用户的粉丝数据在固定的链接加用户ID,如下所示

api.bilibili.com/x/web-interface/card?mid= + B站用户uid

我的UID是285794647,地址为

api.bilibili.com/x/web-interface/card?mid=285794647

直接在浏览器里面输入就可以得到数据

这个数据是JSON格式的,可以找一个在线JSON格式化的网站格式化一下,就看起来很清楚了

里面的fans就是粉丝数量

步骤

  1. 从B站获取数据,调用http api,或者用tcp模拟http请求
  2. 从数据中获取粉丝数,调用json解析库或者直接匹配字符串

实现

esp idf 有现成的http request示例examples\protocols\http_request

1.配置连接的wifi

2.修改请求地址

3.获取数据

unsigned char get_fans_from_rx_data(char data,unsigned int * p_fans)
{
    unsigned char ret=false;
    static unsigned char sta=0;
    static unsigned int temp_fans=0;
    switch (sta)
    {
    case 0:
        if(data=='f')
        {
            sta++;
        }
    break;
    case 1:
        if(data=='a')
        {
            sta++;
        }
        else if(data!='f')
        {
            sta=0;
        }
    break;
    case 2:
        if(data=='n')
        {
            sta++;
        }
        else 
        {
            sta=0;
        }
    break;
    case 3:
        if(data=='s')
        {
            sta++;
        }
        else 
        {
            sta=0;
        }
    break;
    case 4:
        if(data=='\"')
        {
            sta++;
        }
        else 
        {
            sta=0;
        }
    break;
    case 5:
        if(data==':')
        {
            sta++;
            temp_fans=0;
        }
        else 
        {
            sta=0;
        }
    break;
    default:
        if (data>='0'&&data<='9')
        {
            temp_fans*=10;
            temp_fans+=data-'0';
        }
        else
        {
            
            sta=0;
            ret=true;
            *p_fans=temp_fans;

        }
        break;
    }
    return ret;

}

踩坑记录

一开始使用完例程后,处于假死状态,我在关键的地方加上日志,发现调用example_connect()后就没有反会

这个函数是在examples\common_components\protocol_examples_common\connect.c中

实际调试的时候发现,等了一个信号量后等不到了

这个值初始化的时候为1

但是我看默认是使能了IPV6,所以这个值是2

但是,路由器不知为什么获取不到ipv6,所以就一直在等待获取,造成假死

解决

1.用手机开热点,正常

2.关闭IPV6,连接路由器,正常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值