B站视频推荐程序信息
B站视频推荐程序开发起因和过程记录
工程暂时没有完工!也没有上传Github!
本文仅用来记录我开发B站视频重新推荐程序和网站相关事宜
起因
起因当然是对B站的视频推荐机制感到不满意,尤其是首页的推荐视频,我喜欢的视频不见踪迹,甚至部分方面(如化学、生物、物理、历史)等方面内容奇少无比,有的甚至基本绝迹。推荐的视频也让我完全不感兴趣,甚至感到恶心。出于此种原因,我决定制作一个用于重新制作专属于我的视频推荐程序。
工作流程
基本情况
首先,这个程序需要一个运行的环境,它可以在本地,也可以在远端运行,两种不同的运行环境意味着完全不一样的代码和设计逻辑。我初步考虑之后,认为若本地运行,在更新首页时再搜索视频,并放在首页不合适。主要是因为运算量偏大,若本地运行向B站服务器请求次数太多还会被封IP。
综合考虑下来,我决定将代码部署在Github上,每日凌晨定时执行Action,构建好一个静态网站,里面放上400多个视频(因为我喜欢长视频,400+足够看一天了,如果运行时间允许还可以再增加视频数量),这样就保证我一天的视频需求了。
爬取视频数据
在我开发的过程中,第一步便是首先从B站爬取一系列的视频下来,毕竟得有视频数据才能分析我喜不喜欢这个视频嘛。
起初我是想通过一般的爬虫方法获取数据的,也就是模拟正常用户请求数据,然后分析数据。不过这样的问题就是请求次数有限制,也很慢,很难收集够足够数量的数据。
但是在学习的过程中,我发现B站官方提供了爬虫的API接口,而且使用Curl可以就像正常网站一样链接、获取数据,于是我果断转向这种方法获取数据,毕竟我想这样获取数据没有速率限制,而且很方便,只需要 多设置一个Cookie: curl_easy_setopt(curl,CURLOPT_COOKIE,cookie);
,就可以正常使用了。(只不过返回的是Json格式而非Html格式罢了)
以请求搜索 “选择公理” 为例,只不过将请求的网址改为:"https://api.bilibili.com/x/web-interface/search/all/v2?keyword=选择公理&search_type=video&page_size=10"
即可。需要解释的是后面填入的参数,比如keyword
、search_type
、page_size
,这些也不难理解,查看一下教程就解决的问题,这里附上一个好用的API查询的网址(不是官方网站,因为没有官方网站)。而官方网站仅仅作为参考,因为这个网站不是为爬虫写的。
下面也再补充几个我找到的好用的文章/文档
- 评论API1
关于插件
考虑到不同的人有不同的需求,我自己不同时候需求也不完全相同,但是如果需求改变就重新编译整个项目属实不好,所以考虑到这样的个性化需求,我觉得通过插件的方式加载个性化的代码,包括筛选视频等地方我都计划调用插件的代码
插件实现形式
毕竟我从未做过插件化开发,更别说C++的插件化开发了,同时我还希望插件可以兼容任何编程语言,以方便任何人做插件。在询问AI之后,共两种解决方法,一个采用进程间通信,每个插件都是一个独立的进程,好处是程序故障不相互影响,但是坏处是消耗资源,控制也不方便,毕竟我还要提供API接口。所以最后我选择的使用动态链接库.dll加载插件,坏处是插件故障会影响主程序,好处是效率高,调用方便。
dll库使用
首先我花了不少时间来学习dll库如何使用的,学习这部分的读者请前往我的文章查看更多信息。
为了方便所有人使用我的代码,我还希望支持插件系统支持几乎所有主流语言,比如Java(我的本命语言)、C/C++、JavaScript、Python,但是目前工程还没有做到那里,所以就暂时不讨论这一部分。