不想错过然然的每一个动态?不想错过然然的每一条视频?不想错过魂的直播?
介绍
这是作者练习C#编写Http应用的一款小程序。
本程序通过异步监听bilibili-API来达到获取更新动态的信息。(因为是Demo,姑且没有加入线程池)
目标成品将会有成熟UI,并且加入线程池监控一个魂所有人。
思路
寻找B站API
运用浏览器自带的开发者模式,对NetWork进行监控,用Fetch/XHR过滤掉其他无关信息。
频道监控
先打开B站的频道:https://www.bilibili.com/v/channel/17532487?
在NetWork中我们发现了url为https://api.bilibili.com/x/web-interface/web/channel/featured/list?的GET请求。
观察发现字段为:
Params | Value |
---|---|
channel_id | int |
offset | str |
page_size | int |
sort_type | str |
通过对Json文本中data.list的列表进行监控就可以知道热度榜和最新视频。
空间监控
打开然比的空间:https://space.bilibili.com/672328094/dynamic
在NetWork中我们发现了https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?的GET请求。
观察发现字段为:
Params | Value |
---|---|
host_mid | int |
offset | str |
在该Json文本中有data.items的列表,通过监控列表来知道是否有新动态发布。
直播监控
打开然比的空间:https://space.bilibili.com/672328094/dynamic
在NetWork中我们发现了https://api.bilibili.com/x/space/wbi/acc/info?的GET请求。
观察发现字段为:
Params | Value |
---|---|
mid | int |
在该Json文本中监控data.live_room便可,data.live_room.livestatus为0则未开播,为1则开播。
成品
对HttpClient进行异步操作便可在不影响主线程基础上进行操作,增加了灵活性。
定时任务采用了System.Timers.Timer。
public async Task run() { Console.ForegroundColor = ConsoleColor.Cyan; t.Elapsed += async (sender, e) => await refreshDataAsync(); t.AutoReset = true; t.Enabled = true; }
此处在定时任务中用了lambda语法简化了语法。
为了提醒用户动态更新,导入了kernel.dll的beep来播放声音。
详情见Github主页。