|
|
@@ -0,0 +1,195 @@
|
|
|
+function getDaysAgo(n) {
|
|
|
+ const timestamp = Date.now() - (n * 24 * 60 * 60 * 1000);
|
|
|
+ const date = new Date(timestamp);
|
|
|
+
|
|
|
+ const year = date.getFullYear();
|
|
|
+ const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
|
+ const day = String(date.getDate()).padStart(2, '0');
|
|
|
+
|
|
|
+ return `${year}-${month}-${day}`;
|
|
|
+}
|
|
|
+
|
|
|
+function csvToArray(csvString) {
|
|
|
+ const lines = csvString.split('\n');
|
|
|
+ const result = [];
|
|
|
+
|
|
|
+ for (let line of lines) {
|
|
|
+ // 跳过空行
|
|
|
+ if (line.trim() === '') continue;
|
|
|
+
|
|
|
+ // 按逗号分割,并去除每个字段的空白
|
|
|
+ const row = line.split(',').map(field => field.trim());
|
|
|
+ result.push(row);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+function arrayToCSV(array) {
|
|
|
+ return array.map(row =>
|
|
|
+ row.map(field => String(field)).join(',')
|
|
|
+ ).join('\n');
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function creatToday(fileList) {
|
|
|
+ for (let index = 1; index < fileList.length - 1; index++) {
|
|
|
+ fileList[index][2] = fileList[index][5]
|
|
|
+ fileList[index][3] = fileList[index][6]
|
|
|
+ fileList[index][4] = fileList[index][7]
|
|
|
+ fileList[index][5] = ""
|
|
|
+ fileList[index][6] = ""
|
|
|
+ fileList[index][7] = ""
|
|
|
+ fileList[index][8] = ""
|
|
|
+ fileList[index][9] = ""
|
|
|
+ fileList[index][10] = ""
|
|
|
+ }
|
|
|
+ const fileData = {
|
|
|
+ filename: getDaysAgo(0) + '.csv',
|
|
|
+ content: arrayToCSV(fileList)
|
|
|
+ };
|
|
|
+
|
|
|
+ // 调用保存方法
|
|
|
+ window.electronAPI.saveFile(fileData).then(result => {
|
|
|
+ if (result.success) {
|
|
|
+ console.log('文件保存成功:', result.path);
|
|
|
+ } else {
|
|
|
+ console.error('文件保存失败:', result.error);
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function saveFile(adtaArr, next) {
|
|
|
+ // 保存数据
|
|
|
+ const fileData = {
|
|
|
+ filename: getDaysAgo(0) + '.csv',
|
|
|
+ content: arrayToCSV(adtaArr)
|
|
|
+ };
|
|
|
+
|
|
|
+ // 调用保存方法
|
|
|
+ window.electronAPI.saveFile(fileData).then(result => {
|
|
|
+ if (result.success) {
|
|
|
+ console.log('文件保存成功:', result.path);
|
|
|
+ setTimeout(() => {
|
|
|
+ if (next) checkData(adtaArr, next)
|
|
|
+ }, 1000);
|
|
|
+ } else {
|
|
|
+ console.error('文件保存失败:', result.error);
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+function cutString (original, before, after, index) {
|
|
|
+ index = index || 0;
|
|
|
+ if (typeof index === "number") {
|
|
|
+ const P = original.indexOf(before, index);
|
|
|
+ if (P > -1) {
|
|
|
+ if (after) {
|
|
|
+ const f = original.indexOf(after, P + before.length);
|
|
|
+ return (f>-1)? original.slice(P + before.toString().length, f):console.error("Tool [在文本中找不到 参数三 "+after+"]");
|
|
|
+ } else {
|
|
|
+ return original.slice(P + before.toString().length);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.error("Tool [在文本中找不到 参数一 " + before + "]");
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.error("Tool [sizeTransition:" + index + "不是一个整数!]");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function checkData (adtaArr) {
|
|
|
+ for (let index = 0; index < adtaArr.length; index++) {
|
|
|
+ const element = adtaArr[index];
|
|
|
+ console.log(element)
|
|
|
+ if (element[1].includes('https://') && element[5] === '') {
|
|
|
+ console.log(element[1])
|
|
|
+ if (location.href.slice(0, 40) == element[1].slice(0, 40)) {
|
|
|
+ setTimeout(() => {
|
|
|
+ document.querySelector('.yt-truncated-text__absolute-button').click()
|
|
|
+ setTimeout(() => {
|
|
|
+ let pdInfo = document.querySelector('.style-scope.ytd-about-channel-renderer').innerText
|
|
|
+ let bfsl = parseInt(cutString(pdInfo,'视频\n\n\t', '次观看'))
|
|
|
+ let spsl = parseInt(cutString(pdInfo,'订阅者\n\n\t', '个视频'))
|
|
|
+ let dyrs = parseInt(cutString(pdInfo,'注册\n\n\t', '位订阅者'))
|
|
|
+ bfsl = bfsl ? bfsl : 0
|
|
|
+ spsl = spsl ? spsl : 0
|
|
|
+ dyrs = dyrs ? dyrs : 0
|
|
|
+ console.log(bfsl, spsl, dyrs)
|
|
|
+ adtaArr[index][5] = bfsl
|
|
|
+ adtaArr[index][6] = spsl
|
|
|
+ adtaArr[index][7] = dyrs
|
|
|
+ adtaArr[index][8] = bfsl - parseInt(adtaArr[index][2])
|
|
|
+ adtaArr[index][9] = spsl - parseInt(adtaArr[index][3])
|
|
|
+ adtaArr[index][10] = dyrs - parseInt(adtaArr[index][4])
|
|
|
+ saveFile(adtaArr, true)
|
|
|
+ }, 3000);
|
|
|
+ }, 2000);
|
|
|
+ } else {
|
|
|
+ location.href = element[1]
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 汇总计算
|
|
|
+ adtaArr[adtaArr.length - 1][2] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][3] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][4] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][5] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][6] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][7] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][8] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][9] = 0
|
|
|
+ adtaArr[adtaArr.length - 1][10] = 0
|
|
|
+ for (let index = 1; index < adtaArr.length - 1; index++) {
|
|
|
+ const element = adtaArr[index];
|
|
|
+ adtaArr[adtaArr.length - 1][2] += parseInt(element[2])
|
|
|
+ adtaArr[adtaArr.length - 1][3] += parseInt(element[3])
|
|
|
+ adtaArr[adtaArr.length - 1][4] += parseInt(element[4])
|
|
|
+ adtaArr[adtaArr.length - 1][5] += parseInt(element[5])
|
|
|
+ adtaArr[adtaArr.length - 1][6] += parseInt(element[6])
|
|
|
+ adtaArr[adtaArr.length - 1][7] += parseInt(element[7])
|
|
|
+ adtaArr[adtaArr.length - 1][8] += parseInt(element[8])
|
|
|
+ adtaArr[adtaArr.length - 1][9] += parseInt(element[9])
|
|
|
+ adtaArr[adtaArr.length - 1][10] += parseInt(element[10])
|
|
|
+ }
|
|
|
+ saveFile(adtaArr, false)
|
|
|
+ alert('所有项目已经检查完!')
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// 调用保存方法
|
|
|
+window.electronAPI.readFile({filename: getDaysAgo(0) + '.csv', encoding: "utf8"}).then(result => {
|
|
|
+ if (result.success) {
|
|
|
+ console.log(result.content);
|
|
|
+ // 如果内容是空的,则读取昨天的
|
|
|
+ if (result.content == '') {
|
|
|
+ window.electronAPI.readFile({filename: getDaysAgo(1) + '.csv', encoding: "utf8"}).then(result2 => {
|
|
|
+ if (result2.success) {
|
|
|
+ console.log(result2.content);
|
|
|
+ // 如果内容是空的,则读取昨天的
|
|
|
+ if (result2.content == '') {
|
|
|
+ alert('缺少昨天的数据!')
|
|
|
+ } else {
|
|
|
+ let fileData = csvToArray(result2.content)
|
|
|
+ creatToday(fileData)
|
|
|
+ console.log(fileData)
|
|
|
+ checkData(fileData)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.error('文件读取失败:', result2.error);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 读取加载文件
|
|
|
+ let fileData = csvToArray(result.content)
|
|
|
+ console.log(fileData)
|
|
|
+ checkData(fileData)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.error('文件读取失败:', result.error);
|
|
|
+ }
|
|
|
+});
|