由于本人一直使用收趣云书签来存储自己稍后阅读(不读)的文章博客(拖延症太重了),但是最近发现收趣已经好久没有更新了,所以需要导出存储的站点数据,以备后边万一访问不了了,但由于收趣的导出是收费功能,所以自己就写了小脚本,自动导出数据。
方法如下:
打开收趣
有两种方法
此方法是是页面滑倒最底端(获取到全部的标签),然后 复制下边代码到 页面的控制台,回车执行, 把数据以json形式打印到控制台,然后复制到本地文件中格式化即可
var list = $('.cardFixedHeight');
var arr = [];
list.each(function() {
var tag = $(this).find('div[categoryids]').text();
var dataTime = $(this).find('.date').text();
var alink = $(this).find('.bookmarkLink').attr('href');
var name = $(this).find('.bookmarkTitle').text();
var introduct = $(this).find('.introduct').text();
var bookmarkView = $(this).find('.bookmarkView').html();
arr.push({
tag: tag,
dataTime: dataTime,
alink: alink,
name: name,
introduct: introduct,
bookmarkView: bookmarkView
})
})
console.log(arr);
此方法比较傻瓜,直接打开页面登录用户,然后打开控制台,复制下边代码,
页面会自动滑动到最底端(拉取全部数据), 然后会自动执行输出一个json文件,打开文件格式化内容即可。
也可以直接设置格式化处理 JSON.stringify(getData(), null, '\t'))
, 那么导出的文件无需格式化,文件内存也会相应大一些
scroll();
// 获取总数
var total = userInfo.markCount;
var times = null;
var nowDate = getFormatDate()
function scroll() {
console.log('key', window.arrKey, total);
bodys = document.body.scrollHeight + 100;
if (window.arrKey == total) {
clearTimeout(times);
downloadUserData()
} else {
times = window.scrollTo(0, bodys);
setTimeout(() => {
scroll();
}, 100)
}
}
// downloadUserData()
function downloadUserData() {
exportRaw(`收趣书签-${nowDate}.json`, JSON.stringify(getData(), null, '\t'));
}
function fakeClick(obj) {
let ev = document.createEvent('MouseEvents');
ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, 0, null);
obj.dispatchEvent(ev);
}
function exportRaw(name, data) {
let urlObject = window.URL || window.webkitUrl || window;
let export_blob = new Blob([data]);
let save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
save_link.href = urlObject.createObjectURL(export_blob);
save_link.download = name;
fakeClick(save_link);
}
function getData() {
var list = document.querySelectorAll('.cardFixedHeight');
var arr = [];
Array.prototype.slice.call(list).forEach((ele, index) => {
let id = index;
let item = ele.innerHTML;
let tag = ele.querySelector('div[categoryids]').innerText;
let dataTime = ele.querySelector('.date').innerText;
let alink = ele.querySelector('.bookmarkLink').getAttribute('href');
let name = ele.querySelector('.bookmarkTitle').innerText;
let bookmarkView = ele.querySelector('.bookmarkView').innerHTML;
let sourceLog = ele.querySelector('.sourceLog')?.getAttribute('src') || null;
let sourceName = ele.querySelector('.sourceName').innerText;
arr.push({
id,
tag,
dataTime,
alink,
name,
bookmarkView,
sourceLog,
sourceName
})
})
return arr;
}
function getFormatDate() {
/**
* 日期格式化(原型扩展或重载)
* 格式 YYYY/yyyy/ 表示年份
* MM/M 月份
* dd/DD/d/D 日期
* @param {formatStr} 格式模版
* @type string
* @returns 日期字符串
*/
Date.prototype.format = function(formatStr){
var str = formatStr;
var Week = ['日','一','二','三','四','五','六'];
str=str.replace(/yyyy|YYYY/,this.getFullYear());
str=str.replace(/MM/,(this.getMonth()+1)>9?(this.getMonth()+1).toString():'0' + (this.getMonth()+1));
str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());
return str;
}
return new Date().format("yyyy-MM-dd");
}
页面是每30ms向下滑动100像素,然后触发下拉加载更多,此处有可能根据网速问题会频繁执行,可以根据网速自行设置。