js教程

油猴JS脚本-采集微信公众号数据

我的站长站 2020-08-14 人阅读

因为公司平时需要运营记录微信公众号推文的阅读数、点赞数、评论数,所以经常会浪费大把时间去统计,所以为了帮助她人,就利用工作闲暇之余制作了这一款油猴脚本,可以抓取微信公众号平台推文的文章数据,并制作成execl报表并下载。

油猴JS脚本-采集微信公众号数据

采集微信公众号教程

参考网上的教程再加上自己平时学的一些js,才把数据拿到手,如果你也想制作属于自己的油猴脚本,可以参考《简单的油猴脚本编写教程》

此次制作无非就是使用jquery的选择器拿到html内容,原理相对简单,但是打包成报表的时候搞了很久,但是幸好在百度找到一篇《HTML table导出到Excel中的解决办法》才完成了最后的报表导出功能。

// ==UserScript==
// @icon            https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png
// @name            微信公众号数据采集
// @namespace       [url=https://www.youngxj.cn]杨小杰博客[/url]
// @author          Youngxj
// @description     获取微信公众号文章发布的文章标题、阅读数、点赞数、评论数,并下载成表格
// @match           *://mp.weixin.qq.com/cgi-bin/home*
// @require         https://cdn.bootcss.com/jquery/1.8.3/jquery.min.js
// @version         0.0.3
// @grant           GM_addStyle
// ==/UserScript==
(function() {
    'use strict';
    // 脚本制作参考教程:https://blog.csdn.net/weixin_30635053/article/details/95395672
    //与元数据块中的@grant值相对应,功能是生成一个style样式
    GM_addStyle('#down_wixin_btn{color:#fa7d3c;}');
    //视频下载按钮的html代码
    var down_btn_html = '<div class="weui-desktop-online-faq__switch_content" id="down_wixin_btn"> <div class="text">获取数据</div>  </div>';
    //将以上拼接的html代码插入到网页里的ul标签中
    var ul_tag = $(".weui-desktop-online-faq__switch_content");
    if (ul_tag) {
        ul_tag.append(down_btn_html);
    }
    // 插入div块
    var textar = '<div class="weixin_data_textarea" style="display:none;"></div>';
    $('body').append(textar);
    var timer;
    var WxTool = {
        // 把页面的表格转化为excel下载下来
        // 参考链接:https://www.cnblogs.com/anniey/p/7738278.html
        getExplorer: function() {
            //获取浏览器
            var explorer = window.navigator.userAgent;
            if (explorer.indexOf("MSIE") >= 0 || (explorer.indexOf("Windows NT 6.1;") >= 0 && explorer.indexOf("Trident/7.0;") >= 0)) {
                return 'ie';
            } else if (explorer.indexOf("Firefox") >= 0) {
                return 'Firefox';
            } else if (explorer.indexOf("Chrome") >= 0) {
                return 'Chrome';
            } else if (explorer.indexOf("Opera") >= 0) {
                return 'Opera';
            } else if (explorer.indexOf("Safari") >= 0) {
                return 'Safari';
            }
        },
        excels: function(table) {
            if (WxTool.getExplorer() == 'ie') {
                var curTbl = document.getElementById(table);
                var oXl = new ActiveXObject("Excel.Application"); //创建AX对象excel 
                var oWB = oXL.Workbooks.Add(); //获取workbook对象
                var xlsheet = oWB.Worksheets(1); //激活当前sheet
                var sel = document.body.createTextRange();
                sel.moveToElementText(curTbl); //把表格中的内容移到TextRange中 
                sel.select; //全选TextRange中内容
                sel.execCommand("Copy"); //复制TextRange中内容
                xlsheet.Paste(); //粘贴到活动的EXCEL中
                oXL.Visible = true; //设置excel可见属性
                try {
                    var filename = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
                } catch (e) {
                    window.print("Nested catch caught " + e);
                } finally {
                    oWB.SaveAs(filename);
                    oWB.Close(savechanges = false);
                    oXL.Quit();
                    oXL = null; //结束excel进程,退出完成
                    timer = window.setInterval("WxTool.Cleanup();", 1);
                }
            } else {
                WxTool.tableToExcel("weixin_data_table");
            }
        },
        Cleanup: function() {
            window.clearInterval(timer);
            CollectGarbage(); //CollectGarbage,是IE的一个特有属性,用于释放内存的
        },
        base64: function(s) {
            return window.btoa(unescape(encodeURIComponent(s)))
        },
        format: function(s, c) {
            return s.replace(/{(w+)}/g, function(m, p) {
                return c[p];
            })
        },
        tableToExcel: function() {
            return WxTool.zzzz("weixin_data_table", '微信公众号数据采集');
        },
        zzzz: function(table, name) {
            var uri = 'data:application/vnd.ms-excel;base64,',
                template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>';
            if (!table.nodeType) table = document.getElementById(table);
            var ctx = {
                worksheet: name || 'Worksheet',
                table: table.innerHTML
            };
            window.location.href = uri + WxTool.base64(WxTool.format(template, ctx))
        }
    };
    $(function() {
        //执行下载按钮的单击事件并调用下载函数
        $("#down_wixin_btn").click(function() {
        	// 微信公众号目前的数据节点是这样的,微信公众号平台更新可能会导致节点改变,稍微改变即可
        	var title = $('.weui-desktop-mass__item .weui-desktop-mass-appmsg .weui-desktop-mass-appmsg__title span');
	        var yuedu = $('.weui-desktop-mass__item .appmsg-view span');
	        var dianzan = $('.weui-desktop-mass__item .appmsg-haokan span');
	        var pinglun = $('.weui-desktop-mass__item .js_comment_info .weui-desktop-link');
            var arrTime = new Array();
            var arrTitle = new Array();
            var arrYuedu = new Array();
            var arrDianzan = new Array();
            var arrPinglun = new Array();
            $.each(title, function(index, val) {
                var times = $(val).parent().parent().parent().parent().parent().prev();
                var timess = $(times).children('em').html();
                arrTime.push(timess);
                arrTitle.push($(val).html());
            });
            $.each(yuedu, function(index, val) {
                arrYuedu.push($(val).html());
            });
            $.each(dianzan, function(index, val) {
                arrDianzan.push($(val).html());
            });
            $.each(pinglun, function(index, val) {
                arrPinglun.push($(val).html());
            });
            // 组装数据
            var newHtml = '';
            $.each(arrTitle, function(index, val) {
                newHtml += '<tr><td>' + arrTime[index] + '</td><td>' + arrTitle[index] + '</td><td>' + arrYuedu[index] + '</td><td>' + arrDianzan[index] + '</td><td>' + arrPinglun[index] + '</td></tr>';
            });
            // 拼接table
            var textDataStart = '<table class="weixin_data_table" id="weixin_data_table">
             <thead>
                 <tr>
                 	<th class="time">时间</th>
                     <th class="title">标题</th>
                     <th class="read_num">阅读数</th>
                     <th class="dianzan_num">点赞数</th>
                     <th class="pinglun_num">评论数</th>
                 </tr>
             </thead>
             <tbody>';
            var textData = $('#weixin_data').val();
            var textDateEnd = '</tbody></table>';
            $('.weixin_data_textarea').html(textDataStart + textData + newHtml + textDateEnd);
            WxTool.excels('weixin_data_table');
        });
    });
})();

完整油猴插件安装地址:https://greasyfork.org/zh-CN/scripts/395157-%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86

相关专题
公众号
公众号
2020-11-21 116

公众号专题为您整理了关于微信公众号相关资源,包含微信公众号模板,微信公众号源码,微信公众号软件工具等等,助您快速学习使用公众号....

相关推荐
  • JS脚本
  • 去除csdn必须登录复制代码限制JS脚本

    前言现在搜索IT相关的内容都是csdn的结果,下载要登录不说,复制代码也要登录,真是有点麻烦,分享一段去除csdn必须登录复制代码限制JS脚本,可以把页面模式变成可编辑即可随便复制了,附上代码javascript:document.body.contentEditable=&#39;true&#39;;docume...

    js教程 141 3年前
  • jQuery3.6.0更新说明

    即使存在JSONP错误也返回JSON在以前的版本中,当JSONP请求返回错误时,返回通常仍是一个可执行脚本。3.6.0版本已经更改了默认行为,以尝试在这种情况下执行脚本。当遇到错误时,正常的脚本仍将被跳过。修正一个值得强调的bug是关于将焦点重定向到焦点处理程...

    js教程 193 3年前
  • 自用的JavaScript过滤XSS攻击方法

    什么是XSS攻击XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击。本来缩小应该是CSS,但为了和层叠样式(Cascading Style Sheet,CSS)有所区分,故称XSS。对于攻击者来说,能够让受害者浏览器...

    js教程 104 3年前
最新更新
  • js返回上一页、刷新页面代码大全

    返回上一页代码:<a href="javascript:history.go(-1)">返回上一页</a>onclick返回上一页代码:<a href="javasc...

    js教程 2天前
  • js语言!=与!==的区别

    != (不等于)!= 是松散的不等于运算符。它在比较两个值时,会先进行类型转换(type coercion),然后再比较值是否不...

    js教程 6天前
  • JS防止网站被扒的解决方法

    这个代码能够直接保护整个站,而不再是单个页面,直接把代码放到自己的网站上,如果是博客建议放到header.php头部...

    js教程 3周前
  • Hexo插件开发实战教程

    Hexo的插件嵌入有两种方式,一种是通过脚本(Scripts)的方式引入,一种是通过插件(Packages)的方式将自定义的插件内...

    js教程 1个月前
  • JavaScript定时删除指定元素方法

    JavaScript定时删除指定元素一般用到自动隐藏的效果功能上面,主要用到了JS的setTimeout语法。下面是一个定时...

    js教程 1个月前