本文将讲解如何在Neptune开发板中发送GET请求去获取bilibili粉丝数,并通过CJSON解析回传的数据将获取到bilibili粉丝数输出至串口。

1、环境准备
1.1 开发环境、编译环境搭建,参考官方文档,参考链接如下:
Neptune开发板的环境搭建及使用
1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取
git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git 
2、材料准备
1、Neptune HarmonyOS物联网 IOT模组
3、使用库介绍
由于W800上已经移植了lwip(一个小型开源的TCP/IP协议栈),所以在开发板上面进行网络编程相对来说还是比较方便,相关的API:
//device/winnermicro/neptune/sdk_liteos/src/network/lwip2.0.3/include
关于CJSON库使用openHarmony 提供的第三方CJSON库,位置在于://third_party/cJSON如需使用需要将"//build/lite/config/component/cJSON:cjson_static",
添加到"//device/winnermicro/neptune/sdk_liteos/BUILD.gn"

4、编写代码
4.1、首先需要让开发板连接上网络,这里使用润和官方提供的wifi_connecter.h 中API连接网络:

    WifiDeviceConfig config = {0};// 准备AP的配置参数strcpy(config.ssid, PARAM_HOTSPOT_SSID);strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);config.securityType = WIFI_SEC_TYPE_PSK;osDelay(10);//连接Wifiint netId = ConnectToHotspot(&config);

4.2、bilibili粉丝数的获取原理:
使用固定的链接加用户ID:
api.bilibili.com/x/relation/stat?vmid=+B站用户uid
例如新华社UID:473837611是,地址为:
api.bilibili.com/x/relation/stat?vmid=473837611
直接在浏览器里面输入就可以得到数据

{"code":0,"message":"0","ttl":1,"data":{"mid":473837611,"following":52,"whisper":0,"black":0,"follower":2971170}}

通过在线CJSON解析后为:

可以看到其follower(粉丝数)值。

4.3、定义GET请求的header

//http组包宏,获取bilibili的http接口参数
#define WEB_SERVER          "api.bilibili.com"
#define WEB_PORT            "80"
#define WEB_URL             "/x/relation/stat?vmid=用户UID"//http请求包
static const char *REQUEST = "GET "WEB_URL" HTTP/1.1\r\n""Host: "WEB_SERVER":"WEB_PORT"\r\n""Connection: close\r\n""\r\n";

4.4、创建一个Socket并连接以及写入请求

 const struct addrinfo hints = {.ai_family = AF_INET,.ai_socktype = SOCK_STREAM,};struct addrinfo *res;struct in_addr *addr;int sockfd,response;char recv_buf[1024];char response_buf[1024];int index;while(1) {//DNS域名解析int err = getaddrinfo(WEB_SERVER,WEB_PORT,&hints,&res);if(err != 0 || res == NULL) {printf("DNS lookup failed err=%d res=%p\r\n", err, res);osDelay(50);continue;}//打印获取的IPaddr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;//printf("DNS lookup succeeded. IP=%s\r\n", inet_ntoa(*addr));//新建socketsockfd = socket(res->ai_family, res->ai_socktype, 0);if(sockfd < 0) {printf("... Failed to allocate socket.\r\n");close(sockfd);freeaddrinfo(res);osDelay(50);continue;}//连接ipif(connect(sockfd, res->ai_addr, res->ai_addrlen) != 0) {//printf("... socket connect failed errno=%d\r\n", errno);perror("socket connect failed errno\r\n");close(sockfd);freeaddrinfo(res);osDelay(50);continue;}freeaddrinfo(res);//发送http包if (write(sockfd, REQUEST, strlen(REQUEST)) < 0) {printf("... socket send failed\r\n");close(sockfd);osDelay(50);continue;}

4.5、接受获取到的数据

        do {memset(recv_buf,0,sizeof(recv_buf));response = read(sockfd, recv_buf, sizeof(recv_buf)-1);strcat(response_buf,recv_buf);} while(response > 0);

4.6、解析json数据,由于上述以讲述cjson数据的构成所以直接书写json数据函数,并将解析粉丝数打印:

void cjson_struct_info(char *text)
{cJSON *root,*data;cJSON *follower;//截取有效jsonchar *index=strchr(text,'{');strcpy(text,index);root = cJSON_Parse(text);if(root!=NULL){data = cJSON_GetObjectItem(root, "data");follower = cJSON_GetObjectItem(data,"follower");printf("follower:%d\r\n",follower->valueint);}cJSON_Delete(root);
}

4.7、编译、烧录,并测试最后的完成效果。

——————

原创:老王丨鸿蒙hms开发者高级认证持证人!学习更多鸿蒙OS相关开发技术可以关注我的公众号:鸿蒙开发者老王

婴儿级教学,手伤害教你用鸿蒙OS获取B站粉丝数!!相关推荐

  1. 教你如何使用hexo以及nginx、github搭建属于自己的博客(操心的妈妈级教学)

    教你如何使用hexo以及nginx.github搭建属于自己的博客(妈妈级教学) ~~ 1.解释一下你要的服务器的效果以及对应的操作 ~~ 首先你要有自己的一台服务器,可以是云服务器,或者你可以用自己 ...

  2. 手把手教你使用Hugo搭建个人博客网站|保姆级教学

    搭建个人博客网上目前用的比较多的博客框架是Hexo.Hugo.Jekyll.本文详细介绍利用最新的Hugo(基于Go语言的博客框架)在windows上搭建个人博客网站,从域名注册到后期维护,全程保姆级 ...

  3. 初级中学计算机知识,计算机基础知识(初级中学级教学方案课程教案).doc

    计算机基础知识(初级中学级教学方案课程教案).doc ,.第一章 计算机基础教学目的让学生掌握计算机的基础内容,如特点:内.外部组成:系统组成等教学重点定义:内.外部组成:指法分工:产生和发展:趋势: ...

  4. 防范网络陷阱与计算机病毒教学设计,粤教版信息技术第二册上第6课防范网络陷阱与计算机病毒教学设计(1).doc...

    粤教版信息技术第二册上第6课防范网络陷阱与计算机病毒教学设计(1).doc 文档编号:238804 文档页数:3 上传时间: 2018-06-06 文档级别:普通资源 文档类型:doc 文档大小:11 ...

  5. 计算机的操作系统教学设计,川教版信息技术七上第9课《计算机操作系统》教学设计1.doc...

    川教版信息技术七上第9课<计算机操作系统>教学设计1.doc 文档编号:702830 文档页数:4 上传时间: 2019-07-30 文档级别: 文档类型:doc 文档大小:115.00K ...

  6. 保姆级教程:手把手教你搭建个人网站

    保姆级教程:手把手教你搭建个人网站 前言 准备与搭建 1.Git管理工具的下载与安装 2.nodejs环境安装 3.hexo博客框架下载 npm换国内源 使用npm下载hexo博客框架 初始化mybl ...

  7. Java EE系列(九)——Java EE连接Mysql数据库(JDBC保姆级教学)

    最近几天,peter xiao所在的项目小组也逐渐开始进行做最后的Java web课程大作业了,我们组所做的是运动会报名服务系统,其中涉及到很多数据的增删查改,所以需要依靠Mysql数据库来解决这些问 ...

  8. 手牵手教你写代码,从入门到精通

    如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...

  9. 「保姆级教学」入门级java程序——薪资转换器

    往期「保姆级教学」目录 「保姆级教学」iOS下JDK环境配置 文章目录 往期「保姆级教学」目录 前言 第二日任务 1.java基础语法 2.掌握java基本输入输出 3.掌握java基本数据类型和变量 ...

  10. Fortran保姆级教学——考试所有知识点看这一篇就够了

    Fortran保姆级教学--考试所有知识点看这一篇就够了 临近期末本人复习的同时将整个fortran课堂知识整理了下来,希望学弟学妹们今后学这门课的时候不至于在csdn找不到系统的教程,也希望能帮到需 ...

最新文章

  1. 成功解决 threading Exception unhandled RuntimeError
  2. 正则表达式 特殊符号系列 通配符系列
  3. GitHub笔记(二)——远程仓库的操作
  4. java 中允许键重复的,二叉搜索树的定义是否允许重复键?
  5. Java实例化对象过程中的内存分配
  6. 转盘脚本编辑器学习1
  7. 齐浩亮 计算机科学与技术,齐浩亮
  8. HDU 6129 Just do it 组合数学 杨辉三角 递推
  9. HTML5安全风险详析之三:WebSQL攻击
  10. docker 下使用 Hyperf(win10)
  11. 数字电路实验怎么接线视频讲解_铆钉是怎么被铆接的,多种铆钉动画演示(内附视频讲解)...
  12. python真好玩 pdf 下载_Python真好玩:教孩子学编程_PDF电子书
  13. 知乎日报富文本处理android,一个追求高效的学习者手机里装有哪些APP?
  14. GooglTest GoogleMock 实践感想三 死亡测试初步(1)
  15. 漏洞库:爬取NVD-美国国家信息安全漏洞库
  16. JavaSocket编程之Netty框架线程模型
  17. winform textbox行间距调整
  18. 【路径规划】基于matlab卡尔曼滤波、三次插值极速赛道赛车路径规划【含Matlab源码 2158期】
  19. 机器学习-RNN机器翻译
  20. 生物安全实验室P1、P2、P3、P4等级的区别

热门文章

  1. 3D数学基础:向量运算
  2. 超级简单好用的免费CRM客户管理软件,推荐!
  3. Word中使用表格排版公式时,表格内序号纵向居中的问题。
  4. 事物运动的状态和方式是谁提出的_为什么信息是事物运动的状态和方式??
  5. qt creator报错 error: C1083: 无法打开包括文件:“QMediaPlayer”
  6. GIS等级考试知识集锦
  7. AI在医疗领域的应用 | “AI+传统行业”全盘点
  8. LimeSDR系列产品介绍(一):板卡级(Board Level)产品
  9. 跳一跳python源码_跳一跳源码(python 实现 跳一跳游戏 代码解析)
  10. Scratch编程——跳一跳