【前端】统计博客园总阅读量

✨效果展示

在博客后台页面打开控制台 运行以下代码

截止2024-1-9,总阅读量已达28w!!

image-20240109195743060


✨代码实现

/**
    输入博客地址用户名
    例如 https://www.cnblogs.com/Flat-White 请输入 Flat-White
*/
function countBlogReadings(CnblogsName){
    console.log("正在统计 "+CnblogsName+" 的博客的总阅读量...");

    //任务线程内部的全局变量数组,用于保存数据
    var statisticsArray = [];

    //发送ajax请求博客园
    function getReadData(page){
        //是否还要继续
        var flag = false;

        //使用XMLHttpRequest对象请求博客园
        var xhr = new XMLHttpRequest();            
        xhr.open('GET', "https://www.cnblogs.com/"+CnblogsName+"/default.html?page=" + page, false);//同步
        xhr.setRequestHeader("Content-Type", "text/html; charset=utf-8"); //设置响应格式
        xhr.onreadystatechange = function() {
          // readyState == 4说明请求已完成
          if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) { 
            //使用正则处理HTML字符串,需要设置全局标识
                //var myRe = /huanzi-qch(\s*)阅读(\s*)[(]+[1-9]\d+[)]/g;
                var myRe = /阅读(\s*)[(]+[1-9]\d+[)]/g;
                var resultArray = xhr.responseText.match(myRe);

                //合并到全局变量数组中
                statisticsArray = statisticsArray.concat(resultArray);

                //判断这个即可:resultArray.length > 0     如果还有文章集合,则返回true
                if(resultArray && resultArray.length > 0){
                    flag = true;
                }
          }
        };
        xhr.send();

        return flag;
    }


    //循环调用getReadData,默认最大页数 100 (100页,每页10条记录,相对于1000篇博客,已经够多了吧?)
    for(var i = 1;i < 100;i++){
        //如果返回false则立即跳出循环
        if(!getReadData(i)){ break;}
    }

    //处理全局数组
    for(var i = 0;i < statisticsArray.length;i++){
        if(statisticsArray[i]){
            //只保留数字部分
            statisticsArray[i] = statisticsArray[i].match(/[1-9]\d+/)[0];
        }else{
            statisticsArray.splice(i, 1);
        }
    }

    //数组求和,需要返回主线程的最终值
    var count = eval(statisticsArray.join("+"));

  	const currentDate = new Date();
		const year = currentDate.getFullYear();
		const month = (currentDate.getMonth() + 1).toString().padStart(2, '0');
		const day = currentDate.getDate().toString().padStart(2, '0');
		const hours = currentDate.getHours().toString().padStart(2, '0');
		const minutes = currentDate.getMinutes().toString().padStart(2, '0');
		const seconds = currentDate.getSeconds().toString().padStart(2, '0');
		const formattedTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  	console.log("统计结束");
		console.log("截止:" + formattedTime + " 总阅读量为:"+count);
}
countBlogReadings('Flat-White');

✨参考及引用

https://www.cnblogs.com/jichi/p/15759964.html


⭐转载请注明出处

本文作者:双份浓缩馥芮白

原文链接:https://www.cnblogs.com/Flat-White/p/17955141

版权所有,如需转载请注明出处。

posted @ 2024-01-09 19:28  双份浓缩馥芮白  阅读(41)  评论(0编辑  收藏  举报