B站粉丝计数器
原理
通过粉丝API下载统计数据,然后通过ifstream读取文件,再通过find函数和substr函数得到统计数据,并将其输出
代码
#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <windows.h>
#include <urlmon.h>
#include <ctime>
#pragma comment(lib, "urlmon.lib")
using namespace std;
void main()
{
CreateDirectory("./files", NULL); //创建文件夹
start:
/*获取系统时间*/
time_t timer;
time(&timer);
tm *t_tm = localtime(&timer);
/*下载API(mid=后加你的UID号,可根据需求更改).*/
URLDownloadToFile(NULL, "https://api.bilibili.com/x/relation/stat?vmid=387312095", "./files/Fans", 0, 0);
bool Dw = false; //是否下载稿件统计API
if (t_tm->tm_hour == 12&&Dw == false) {
/*因为粉丝数据是实时更新,稿件统计数据是12点更新。所以只需在12时
下载一次即可。*/
URLDownloadToFile(NULL, "https://api.bilibili.com/x/space/upstat?mid=387312095", "./files/Contributions", 0, 0);
Dw = true;
}
system("cls");
/*读取API*/
ifstream ifs,ifs2;
string buf, buf2;
ifs.open("./files/Fans", ios::in);
if (!ifs.is_open())
{
printf("打开粉丝API文件失败!\n\a");
exit(0);
}
while (getline(ifs, buf)) //关注
{
//切割字符串,下同。
cout << buf.substr(buf.find("follower"),buf.find("}}")- buf.find("follower") )<<endl;
}
ifs2.open("./files/Contributions", ios::in);
if (!ifs2.is_open())
{
printf("打开稿件统计API文件失败!\n\a");
exit(0);
}
while (getline(ifs2, buf2))
{
cout << buf2.substr(buf2.find("view"),buf2.find("}")- buf2.find("view") )<< endl; //播放量
cout << buf2.substr(buf2.find("like"), buf2.find("}}") - buf2.find("like")) << endl; //点赞
}
Sleep(1000);
DeleteFileA("./files/Fans");
DeleteFileA("./files/Contributions");
goto start;
}
演示效果
(可用Ctrl+滚轮来调整大小)