导出即刻收藏
当前为
// ==UserScript==
// @name 即刻收藏导出
// @namespace https://xhs.mundane.ink
// @version 0.2
// @description 导出即刻收藏
// @match https://web.okjike.com/me/*
// @match https://web.okjike.com/u/*/collection
// @license MIT
// @run-at document-start
// @grant unsafeWindow
// @icon data:image/png;base64,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
// ==/UserScript==
(function () {
"use strict";
console.log("即刻脚本生效了");
const collectionList = [];
const btnScroll = document.createElement("button");
btnScroll.innerHTML = "自动滚动";
btnScroll.style.position = "fixed";
btnScroll.style.top = "160px";
btnScroll.style.right = "20px";
btnScroll.style.backgroundColor = "#056b00";
btnScroll.style.color = "#fff";
btnScroll.style.padding = "8px";
btnScroll.style.borderRadius = "6px";
btnScroll.style.zIndex = "1000";
const btnCount = document.createElement("button");
btnCount.innerHTML = "捕获数量:" + collectionList.length;
btnCount.style.position = "fixed";
btnCount.style.top = "210px";
btnCount.style.right = "20px";
btnCount.style.backgroundColor = "#056b00";
btnCount.style.color = "#fff";
btnCount.style.padding = "8px";
btnCount.style.borderRadius = "6px";
btnCount.style.zIndex = "1000";
const btnExport = document.createElement("button");
btnExport.innerHTML = "导出收藏";
btnExport.style.position = "fixed";
btnExport.style.top = "260px";
btnExport.style.right = "20px";
btnExport.style.backgroundColor = "#056b00";
btnExport.style.color = "#fff";
btnExport.style.padding = "8px";
btnExport.style.borderRadius = "6px";
btnExport.style.zIndex = "1000";
document.body.appendChild(btnExport);
document.body.appendChild(btnScroll);
document.body.appendChild(btnCount);
let isScrolling = false;
let timerId;
function simulateScroll() {
// window.scrollBy(0, 200);
window.scrollBy({ top: 200, left: 0, behavior: "smooth" });
}
function startScroll() {
if (isScrolling) {
return;
}
isScrolling = true;
btnScroll.innerHTML = "停止滚动";
btnScroll.style.backgroundColor = "#ff2442";
timerId = setInterval(simulateScroll, 200);
}
function cancelScroll() {
if (!isScrolling) {
return;
}
isScrolling = false;
btnScroll.style.backgroundColor = "#056b00";
btnScroll.innerHTML = "自动滚动";
if (timerId) {
clearInterval(timerId);
}
}
// 给按钮添加点击事件
btnScroll.addEventListener("click", function () {
if (isScrolling) {
cancelScroll();
} else {
startScroll();
}
});
btnExport.addEventListener("click", function () {
const header = "链接,内容\n";
// 导出csv文件
const csvContent =
"data:text/csv;charset=utf-8,\uFEFF" +
header +
collectionList
.map((item) => {
return `${item.url},${item.content}`;
})
.join("\n");
const encodedUri = encodeURI(csvContent);
const link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "即刻收藏.csv");
document.body.appendChild(link);
link.click();
link.remove();
});
function csvEscapeStr(str) {
return `"${str
.replace(/"/g, '""')
.replace(/#/g, "")
.replace(/\n/g, "\\n")
.replace(/\r/g, "\\r")}"`;
}
// 拦截 fetch 请求
const originFetch = fetch;
window.unsafeWindow.fetch = (url, options) => {
return originFetch(url, options).then(async (response) => {
if (url === "https://web-api.okjike.com/api/graphql") {
const responseClone = response.clone();
let res = await responseClone.json();
intercept(res);
const responseNew = new Response(JSON.stringify(res), response);
return responseNew;
} else {
return response;
}
});
};
function intercept(res) {
if (
res.data &&
res.data.viewer &&
res.data.viewer.collections &&
res.data.viewer.collections.nodes
) {
const nodes = res.data.viewer.collections.nodes;
const collections = nodes.map((node) => {
return {
url: csvEscapeStr(`https://web.okjike.com/originalPost/${node.id}`),
content: csvEscapeStr(node.content),
};
});
collectionList.push(...collections);
btnCount.innerHTML = "捕获数量:" + collectionList.length;
}
}
})();