// ==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.4
// @grant GM_addStyle
// @downloadURL https://update.greasyfork.icu/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.user.js
// @updateURL https://update.greasyfork.icu/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.meta.js
// ==/UserScript==
(function() {
'use strict';
// 脚本制作参考教程:https://blog.csdn.net/weixin_30635053/article/details/95395672
$(function(){
//2020年4月13日 修正按钮不显示
//与元数据块中的@grant值相对应,功能是生成一个style样式
GM_addStyle('#down_wixin_btn .text{color:brown;}');
// 插入div块
var textar = '
';
//下载按钮的html代码
var down_btn_html = '';
//将以上拼接的html代码插入到网页里的ul标签中
var ul_tag = $(".weui-desktop-online-faq__switch_content");
if (ul_tag) {
ul_tag.append(down_btn_html);
}
$('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 = '';
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 += '' + arrTime[index] + ' | ' + arrTitle[index] + ' | ' + arrYuedu[index] + ' | ' + arrDianzan[index] + ' | ' + arrPinglun[index] + ' |
';
});
// 拼接table
var textDataStart = '\
\
\
时间 | \
标题 | \
阅读数 | \
点赞数 | \
评论数 | \
\
\
';
var textData = $('#weixin_data').val();
var textDateEnd = '
';
$('.weixin_data_textarea').html(textDataStart + textData + newHtml + textDateEnd);
WxTool.excels('weixin_data_table');
});
});
})();