承接《如何制作自己的b站追番表》一文,上次博主介绍了使用b站api制作自己的追番表,但对json数据获取和更新没有过多介绍,这里给大家介绍一下使用nodejs获取b站追番数据,便捷更新数据的方法。
I.使用须知
1.电脑需安装node.js
II.操作教程
新建文件bili.js和文件夹json,添加以下代码:
十年後の八月·2020-03-11·10741 次阅读
承接《如何制作自己的b站追番表》一文,上次博主介绍了使用b站api制作自己的追番表,但对json数据获取和更新没有过多介绍,这里给大家介绍一下使用nodejs获取b站追番数据,便捷更新数据的方法。
1.电脑需安装node.js
新建文件bili.js和文件夹json,添加以下代码:
const http = require('http');
const url = require('url');
const myhost = "api.bilibili.com";
//设置cookies
const mycookie = "你的cookies";
const ps = 10; //每个json含有的番剧数量
const vmid = 6535656; //uid
const type = 1;
const num = 28; //总文件数(total/ps+1)
class Url {
/**
* 传入对象返回url参数
* @param {Object} data {a:1}
* @returns {string}
*/
getParam(data){
let url = '';
for(var k in data){
let value = data[k] !==undefined ? data[k] : '';
url += `&${k}=${encodeURIComponent(value)}`
}
return url ? url.substring(1) : ''
}
/**
* 将url和参数拼接成完整地址
* @param {string} url url地址
* @param {Json} data json对象
* @returns {string}
*/
getUrl(url, data){
//看原始url地址中开头是否带?,然后拼接处理好的参数
return url += (url.indexOf('?') < 0 ? '?' : '') + this.getParam(data)
}
}
function nodePostGetRequest(HOST, PORT, method, bodydata, callBackFunction, path, cookie,i) {
//把将要发送的body转换为json格式
var body = bodydata;
var bodyString = JSON.stringify(body);
//http 头部
var headers = {
'Content-Type': 'application/json',
'Content-Length': bodyString.length,
'Cookie': cookie
};
//用与发送的参数类型
var options = {
host: HOST, //ip
port: PORT, //port
path: path, //get方式使用的地址
method: method, //get方式或post方式
headers: headers
};
var req = http.request(options, function(res) {
res.setEncoding('utf-8');
var responseString = '';
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
//这里接收的参数是字符串形式,需要格式化成json格式使用
// var resultObject = JSON.parse(responseString);
// console.log('-----resBody-----', resultObject);
writeJson(responseString,i);
});
req.on('error', function(e) {
// TODO: handle error.
console.log('-----error-------', e);
});
});
req.write(bodyString);
req.end();
}
//写入文件
function writeJson(responseString,i){
var fs = require("fs");
// 要写入的文件 要写入的内容 a追加|w写入(默认)|r(读取) 回调函数
var filesrc = "./json/" + i + ".json";
fs.writeFile(filesrc,responseString,{flag:"w"},function (err) {
if(err){
return console.log(err);
}else {
console.log("写入"+filesrc+"成功");
}
})
// console.log(json); //打印json
}
function getbangumi(num){
for (var i = 1; i <= num; i++) {
let URL = new Url();
let mypath = URL.getUrl("/x/space/bangumi/follow/list",{type:type,pn:i,ps:ps,vmid:vmid});
(function(i) {
nodePostGetRequest(myhost, 80, 'GET', null, writeJson, mypath, mycookie,i);
})(i);
}
}
getbangumi(num);
mycookie需登录自己的b站账号查看添加(b站模拟登录博主暂时不会,大佬别喷)
ps为每个json文件包含的番剧数量,可以根据自己网站展示不同灵活设置。(便于展示和设置分页,博主采用的是每页展示10个番剧)
num为总的json文件数量,根据ps值的不同json文件数量也不同,可以自行测试。
num = 总追番数 / 每页番剧数 + 1
vmid为自己的b站账号uid, 登陆自己的b站账号,点击个人空间获取自己的uid 。
使用powershell或cmd进入bili.js所在目录,输入命令node bili.js运行程序。
运行结束可以看到json文件夹下保存了很多json文件,这些就是你的b站追番数据了,参考 《如何制作自己的b站追番表》 一文,即可对数据进行处理解析,展现在自己的页面上了!
刷新数据只需重新运行bili.js,将新的json文件上传覆盖即可
关于数据展示和分页显示,网上有很多js插件和教程,可以自己DIY下。分页教程博主以后有时间会写(大概 )
最后的效果可以看博主的导航——清单——番组
Comments | 2 条评论
学到了
催更分页教程