let talkTimer = null; const cacheKey = 'talksCache'; const cacheTimeKey = 'talksCacheTime'; const cacheDuration = 30 * 60 * 1000; // 缓存有效期 30分钟 function indexTalk() { if (talkTimer) { clearInterval(talkTimer); talkTimer = null; } if (!document.getElementById('bber-talk')) return; function toText(ls) { return ls.map(item => { let c = item.content || ''; const hasImg = /\!\[.*?\]\(.*?\)/.test(c); const hasLink = /\[.*?\]\(.*?\)/.test(c); c = c .replace(/#(.*?)\s/g, '') .replace(/\{.*?\}/g, '') .replace(/\!\[.*?\]\(.*?\)/g, '') .replace(/\[.*?\]\(.*?\)/g, ''); const icons = []; if (item.images?.length && !hasImg) icons.push('fa-solid fa-image'); if (item.extension_type === 'VIDEO') icons.push('fa-solid fa-video'); if (item.extension_type === 'MUSIC') icons.push('fa-solid fa-music'); if (item.extension_type === 'WEBSITE' && !hasLink) icons.push('fa-solid fa-link'); if (item.extension_type === 'GITHUBPROJ' && !hasLink) icons.push('fab fa-github'); if (icons.length) c += ' ' + icons.map(i => ``).join(' '); return c; }); } // 渲染与轮播 function talk(ls) { let html = ''; ls.forEach((item, i) => { html += `
  • ${item}
  • `; }); let box = document.querySelector("#bber-talk .talk-list"); if (!box) return; box.innerHTML = html; talkTimer = setInterval(() => { if (box.children.length > 0) { box.appendChild(box.children[0]); } }, 3000); } const cachedData = localStorage.getItem(cacheKey); const cachedTime = localStorage.getItem(cacheTimeKey); const currentTime = new Date().getTime(); // 判断缓存是否有效 if (cachedData && cachedTime && (currentTime - cachedTime < cacheDuration)) { const data = toText(JSON.parse(cachedData)); talk(data.slice(0, 6)); // 使用缓存渲染数据 } else { fetch('https://mm.biss.click/api/echo/page', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ page: 1, pageSize: 30 }) }) .then(res => res.json()) .then(data => { // 适配新版结构:code=1 且 data.items 存在 if (data.code === 1 && data.data && Array.isArray(data.data.items)) { localStorage.setItem(cacheKey, JSON.stringify(data.data.items)); localStorage.setItem(cacheTimeKey, currentTime.toString()); const formattedData = toText(data.data.items); talk(formattedData.slice(0, 6)); } else { console.warn('Unexpected API response format:', data); } }) .catch(error => console.error('Error fetching data:', error)); } } // pjax 支持 function whenDOMReady() { indexTalk(); } whenDOMReady(); document.addEventListener("pjax:complete", whenDOMReady);