自动获取 ‘上报 up media’ 新闻数据, 并保存到浏览器本地localStorage中。
// ==UserScript==
// @name 每分钟自动获取 ‘上报 up media’ 新闻数据
// @namespace http://tampermonkey.net/
// @match *://*.upmedia*.mg/*
// @match *://*.upmedia.*/*
// @grant none
// @version 1.0.1
// @author slowFever
// @description 自动获取 ‘上报 up media’ 新闻数据, 并保存到浏览器本地localStorage中。
// @icon https://www.upmedia.mg/images/favicon.png
// @license MIT
// ==/UserScript==
(function () {
'use strict';
// 保存 setInterval 的 ID
let intervalId;
function getNewsData() {
// 定义对象来存储数据
let newsData = {
data: []
};
// 获取所有的 <li> 元素
let items = document.querySelectorAll('#marquee ul li');
if (items.length > 0) {
// 遍历每个 <li> 元素并提取数据
items.forEach(item => {
let textElement = item.querySelector('a');
let timeElement = item.querySelector('.time');
if (textElement && timeElement) {
let newsItem = {
text: textElement.textContent.trim(),
time: timeElement.textContent.trim()
};
newsData.data.push(newsItem);
}
});
if (newsData.data.length > 0) localStorage.setItem('newsData', JSON.stringify(newsData));
// 输出结果
console.log(JSON.parse(localStorage.getItem('newsData')));
} else {
console.error('error: No news items found.');
// 在 newsData 中存入错误信息
newsData.data.push(null);
newsData.errors = {
errorInfo: 'No news items found.',
errorTime: new Date().toLocaleString()
};
console.log(JSON.parse(localStorage.getItem('newsData')));
setTimeout(() => {
// 清除定时任务
clearInterval(intervalId);
console.log('定时任务已结束');
}, 50)
}
}
// 定义一个要执行的任务函数
function myTask() {
const now = new Date();
// 执行任务
getNewsData();
console.log(`任务在 ${now.toLocaleTimeString()} 被执行`);
}
// 定义一个工具函数来启动定时器
function startTaskEveryMinute() {
// 首先执行一次任务
myTask();
// 计算当前时间到下一分钟的剩余时间
const now = new Date();
const millisecondsUntilNextMinute = (60 - now.getSeconds()) * 1000 - now.getMilliseconds();
// 设置一个一次性的定时器,在下一个完整的分钟执行任务
setTimeout(() => {
// 每分钟执行一次任务
intervalId = setInterval(myTask, 60000);
// 每分钟刷新一次页面
setInterval(() => {
location.reload();
}, 60000); // 60000 毫秒 = 1 分钟
}, millisecondsUntilNextMinute);
}
// 启动定时任务
startTaskEveryMinute();
})();