有兴趣的读者就自由完善吧
index.js
const rp = require("request-promise-native");
var fs = require("fs");
var nodeFile = fs.readFileSync('./node.json','utf-8'); //读取当前节点JSON数据文件,这个文件读者可以参考下面的代码,自己修改成自动更新的JSON文件
const nodeData = JSON.parse(nodeFile.toString());
var nodeIdList = [];//节点机构号数组
/**
* 处理一下,做字符串拼接,由于URL不允许 : 的情况,因此替换为 %3A
*/
for(var index=0;index<nodeData.data.length;index++){
if(nodeData.data[index].dynamicFields.taskCount!=0){
nodeIdList.push(nodeData.data[index].identityId.substring(0,8)+"%3A"+nodeData.data[index].identityId.substring(9))
console.log(nodeIdList[index])
}
}
/**
* 查询机构号对应的数据,并且以JSON的形式保存到本地taskAll文件夹中
*/
async function fetchNode(NodeId) {
console.log(`正在向Metis查询 ${NodeId} 的数据...`);
const results = await rp({
uri: "https://test.technocore.network/scan/task/listTaskByIdentityId?identityId="+NodeId+"&pageNo=1&pageSize="+10000,
headers: {
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
"strict-origin-when-cross-origin": "stats",
},
json: true
});
/**
* 保存文件
*/
await fs.promises.writeFile(
`./test/${NodeId}.json`,
JSON.stringify(results, null, 2)
);
}
async function main() {
for (var i=0;i<nodeIdList.length;i++) {
console.log(nodeIdList[i],"开始运行内容抓取脚本......");
await fetchNode(nodeIdList[i]);
console.log('"'+nodeIdList[i]+'.json",抓取完毕!');
}
console.log("全部抓取完毕!");
}
main()
Analysis.js 没有全局去重
var fs = require("fs");
//开始时间
var starttime = '2022-03-24 08:00:00:000';
var startdate = new Date(starttime).getTime();
//console.log(startdate)
//结束时间
var endtime = '2022-03-24 17:39:00:000';
var enddate = new Date(endtime).getTime();
//console.log(enddate)
//读取当前节点JSON数据文件,这个文件读者可以参考下面的代码,自己修改成自动更新的JSON文件
var nodeFile = fs.readFileSync('./node.json','utf-8');
const nodeData = JSON.parse(nodeFile.toString());
var nodeIdList = [];//节点机构号数组
/**
* 处理一下,做字符串拼接,由于URL不允许 : 的情况,因此替换为 %3A
*/
for(var index=0;index<nodeData.data.length;index++){
if(nodeData.data[index].dynamicFields.taskCount!=0){
nodeIdList.push(nodeData.data[index].identityId.substring(0,8)+"%3A"+nodeData.data[index].identityId.substring(9))
}
}
var tasks = []; //全局任务数据数组
var checkTaskCount = 0; //查询期间任务成功数量
//读取对应节点的JSON文件
for(var index=0;index<nodeIdList.length;index++){
var count=0;
var nodeIdData = fs.readFileSync('./test/'+nodeIdList[index]+'.json','utf-8');
const nodeIdJSON = JSON.parse(nodeIdData.toString());
for(var i=0;i<nodeIdJSON.data.length;i++){
if(nodeIdJSON.data[i].createAt>=startdate && nodeIdJSON.data[i].createAt<=enddate && nodeIdJSON.data[i].status==4){
var taskNames = [];
taskNames[0]=nodeIdJSON.data[i].taskName;
taskNames[1]=nodeIdJSON.data[i].createAt;
taskNames[2]=nodeIdJSON.data[i].userId;
count++;
checkTaskCount++;
tasks.push(taskNames);
}
}
console.log("当前节点:"+nodeIdList[index]+"的成功次数为:",count)
}
console.log("查询日期内成功任务数共计:",checkTaskCount)
var AnalysisList = []; //去重清洗后的任务数组
//按照userId排序
for(var x=0;x<tasks.length-1;x++){
for(var y=0;y<tasks.length-1-x;y++){
if(tasks[y][2]>tasks[y+1][2]){
var taskTemp = tasks[y+1];
tasks[y+1]=tasks[y];
tasks[y]=taskTemp;
}
}
}
//按照userId去重
for (let i = 0; i < tasks.length-1; i++) {
if (tasks[i][2] != tasks[i+1][2]) {
AnalysisList.push(tasks[i]);
}
}
//按照时间戳排序
for(var x=0;x<AnalysisList.length-1;x++){
for(var y=0;y<AnalysisList.length-1-x;y++){
if(AnalysisList[y][1]>AnalysisList[y+1][1]){
var taskTemp = AnalysisList[y+1];
AnalysisList[y+1]=AnalysisList[y];
AnalysisList[y]=taskTemp;
}
}
}
//时间转换函数
function getTimes(timestemp){
var date = new Date(timestemp);
var Y = date.getFullYear() + '-';
var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
var D = date.getDate() + ' ';
var h = date.getHours() + ':';
var m = date.getMinutes() + ':';
var s = date.getSeconds();
var timeReal = Y+M+D+h+m+s;
return timeReal;
}
if(AnalysisList.length<50){
var thisCount=0;
for(var j=0;j<AnalysisList.length;j++){
console.log("任务名称:"+AnalysisList[j][0]+",创建时间:"+getTimes(AnalysisList[j][1])+",使用者ID:"+AnalysisList[j][2]);
thisCount++;
}
console.log("AnalysisListLength:",AnalysisList.length)
console.log(thisCount)
}else{
var thisCount=0;
for(var j=0;j<50;j++){
console.log("任务名称:"+AnalysisList[j][0]+",创建时间:"+getTimes(AnalysisList[j][1])+",使用者ID:"+AnalysisList[j][2]);
thisCount++;
}
console.log("AnalysisListLength:",AnalysisList.length)
console.log(thisCount)
}
Analysis.js 全局去重,原理是调整执行顺序
var fs = require("fs");
//读取当前节点JSON数据文件,这个文件读者可以参考下面的代码,自己修改成自动更新的JSON文件
var nodeFile = fs.readFileSync('./node.json','utf-8');
const nodeData = JSON.parse(nodeFile.toString());
var nodeIdList = [];//节点机构号数组
/**
* 处理一下,做字符串拼接,由于URL不允许 : 的情况,因此替换为 %3A
*/
for(var index=0;index<nodeData.data.length;index++){
if(nodeData.data[index].dynamicFields.taskCount!=0){
nodeIdList.push(nodeData.data[index].identityId.substring(0,8)+"%3A"+nodeData.data[index].identityId.substring(9))
}
}
var tasks = []; //全局任务数据数组
var checkTaskCount = 0; //查询期间任务成功数量
//读取对应节点的JSON文件
for(var index=0;index<nodeIdList.length;index++){
var count=0;
var nodeIdData = fs.readFileSync('./test/'+nodeIdList[index]+'.json','utf-8');
const nodeIdJSON = JSON.parse(nodeIdData.toString());
for(var i=0;i<nodeIdJSON.data.length;i++){
if(nodeIdJSON.data[i].status==4){
var taskNames = [];
taskNames[0]=nodeIdJSON.data[i].taskName;
taskNames[1]=nodeIdJSON.data[i].createAt;
taskNames[2]=nodeIdJSON.data[i].userId;
count++;
checkTaskCount++;
tasks.push(taskNames);
}
}
console.log("当前节点:"+nodeIdList[index]+"的成功次数为:",count)
}
var AnalysisList = []; //去重清洗后的任务数组
//按照userId排序
for(var x=0;x<tasks.length-1;x++){
for(var y=0;y<tasks.length-1-x;y++){
if(tasks[y][2]>tasks[y+1][2]){
var taskTemp = tasks[y+1];
tasks[y+1]=tasks[y];
tasks[y]=taskTemp;
}
}
}
//按照userId去重
for (let i = 0; i < tasks.length-1; i++) {
if (tasks[i][2] != tasks[i+1][2]) {
AnalysisList.push(tasks[i]);
}
}
//按照时间戳排序
for(var x=0;x<AnalysisList.length-1;x++){
for(var y=0;y<AnalysisList.length-1-x;y++){
if(AnalysisList[y][1]>AnalysisList[y+1][1]){
var taskTemp = AnalysisList[y+1];
AnalysisList[y+1]=AnalysisList[y];
AnalysisList[y]=taskTemp;
}
}
}
//时间转换函数
function getTimes(timestemp){
var date = new Date(timestemp);
var Y = date.getFullYear() + '-';
var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
var D = date.getDate() + ' ';
var h = date.getHours() + ':';
var m = date.getMinutes() + ':';
var s = date.getSeconds();
var timeReal = Y+M+D+h+m+s;
return timeReal;
}
//搜索开始时间
var startLast = '2022-03-25 08:00:00:000';
var BeginDate = new Date(startLast).getTime();
console.log(BeginDate)
//搜索结束时间
var endLast = '2022-03-26 08:00:00:000';
var OverDate = new Date(endLast).getTime();
console.log(OverDate)
var thisCount=0;
for(var j=0;j<AnalysisList.length;j++){
if(AnalysisList[j][1]>=BeginDate && AnalysisList[j][1]<=OverDate){
console.log("任务名称:"+AnalysisList[j][0]+",创建时间:"+getTimes(AnalysisList[j][1])+",使用者ID:"+AnalysisList[j][2]);
thisCount++;
}else{
continue;
}
}
console.log("AnalysisListLength:",AnalysisList.length)
console.log("查询日期内的成功地址数量:",thisCount)