把大致框架搭好1
This commit is contained in:
106
frontend/60sapi/热搜榜单/HackerNews榜单/css/background.css
Normal file
106
frontend/60sapi/热搜榜单/HackerNews榜单/css/background.css
Normal file
@@ -0,0 +1,106 @@
|
||||
/* 彩虹背景相关样式 */
|
||||
body {
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
#ff6b6b 0%,
|
||||
#4ecdc4 12.5%,
|
||||
#45b7d1 25%,
|
||||
#96ceb4 37.5%,
|
||||
#feca57 50%,
|
||||
#ff9ff3 62.5%,
|
||||
#54a0ff 75%,
|
||||
#5f27cd 87.5%,
|
||||
#00d2d3 100%
|
||||
);
|
||||
background-size: 400% 400%;
|
||||
animation: rainbowGradient 15s ease infinite;
|
||||
background-attachment: fixed;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@keyframes rainbowGradient {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
25% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 100%;
|
||||
}
|
||||
75% {
|
||||
background-position: 0% 100%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
/* 彩虹装饰层 */
|
||||
body::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background:
|
||||
radial-gradient(circle at 20% 20%, rgba(255, 107, 107, 0.15) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 80%, rgba(78, 205, 196, 0.15) 0%, transparent 50%),
|
||||
radial-gradient(circle at 40% 80%, rgba(69, 183, 209, 0.12) 0%, transparent 40%),
|
||||
radial-gradient(circle at 60% 20%, rgba(150, 206, 180, 0.12) 0%, transparent 40%),
|
||||
radial-gradient(circle at 80% 40%, rgba(254, 202, 87, 0.1) 0%, transparent 35%);
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
animation: float 20s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
/* 彩虹粒子效果 */
|
||||
body::after {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image:
|
||||
radial-gradient(circle at 10% 10%, rgba(255, 107, 107, 0.8) 2px, transparent 2px),
|
||||
radial-gradient(circle at 30% 20%, rgba(78, 205, 196, 0.8) 1.5px, transparent 1.5px),
|
||||
radial-gradient(circle at 50% 30%, rgba(69, 183, 209, 0.8) 1px, transparent 1px),
|
||||
radial-gradient(circle at 70% 40%, rgba(150, 206, 180, 0.8) 2px, transparent 2px),
|
||||
radial-gradient(circle at 90% 50%, rgba(254, 202, 87, 0.8) 1.5px, transparent 1.5px),
|
||||
radial-gradient(circle at 20% 60%, rgba(255, 159, 243, 0.8) 1px, transparent 1px),
|
||||
radial-gradient(circle at 40% 70%, rgba(84, 160, 255, 0.8) 2px, transparent 2px),
|
||||
radial-gradient(circle at 60% 80%, rgba(95, 39, 205, 0.8) 1.5px, transparent 1.5px),
|
||||
radial-gradient(circle at 80% 90%, rgba(0, 210, 211, 0.8) 1px, transparent 1px);
|
||||
background-size: 200px 200px, 250px 250px, 180px 180px, 300px 300px, 220px 220px, 160px 160px, 280px 280px, 240px 240px, 200px 200px;
|
||||
animation: sparkle 25s linear infinite;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0% {
|
||||
transform: translateY(0px) rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: translateY(-15px) rotate(2deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sparkle {
|
||||
0%, 100% {
|
||||
transform: translateX(0) translateY(0) scale(1);
|
||||
}
|
||||
25% {
|
||||
transform: translateX(-10px) translateY(-5px) scale(1.1);
|
||||
}
|
||||
50% {
|
||||
transform: translateX(10px) translateY(-10px) scale(0.9);
|
||||
}
|
||||
75% {
|
||||
transform: translateX(-5px) translateY(-15px) scale(1.05);
|
||||
}
|
||||
}
|
||||
1037
frontend/60sapi/热搜榜单/HackerNews榜单/css/style.css
Normal file
1037
frontend/60sapi/热搜榜单/HackerNews榜单/css/style.css
Normal file
File diff suppressed because it is too large
Load Diff
77
frontend/60sapi/热搜榜单/HackerNews榜单/index.html
Normal file
77
frontend/60sapi/热搜榜单/HackerNews榜单/index.html
Normal file
@@ -0,0 +1,77 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>🔥 HackerNews 热门榜单</title>
|
||||
<link rel="stylesheet" href="css/background.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header class="header">
|
||||
<div class="header-icon">🌈</div>
|
||||
<h1 class="title">🔥 HackerNews 热门榜单 💻</h1>
|
||||
<p class="subtitle">全球技术社区 · 实时热门话题</p>
|
||||
|
||||
<div class="tab-container">
|
||||
<button class="tab-btn active" data-type="top">
|
||||
<span class="tab-icon">🏆</span>
|
||||
热门榜
|
||||
</button>
|
||||
<button class="tab-btn" data-type="new">
|
||||
<span class="tab-icon">🆕</span>
|
||||
最新榜
|
||||
</button>
|
||||
<button class="tab-btn" data-type="best">
|
||||
<span class="tab-icon">⭐</span>
|
||||
最佳榜
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="update-time">
|
||||
<span class="time-icon">⏰</span>
|
||||
<span id="updateTime">加载中...</span>
|
||||
</div>
|
||||
|
||||
<button id="refreshBtn" class="refresh-btn">
|
||||
<span class="btn-icon">🔄</span>
|
||||
刷新数据
|
||||
</button>
|
||||
</header>
|
||||
|
||||
<div class="loading" id="loading">
|
||||
<div class="loading-content">
|
||||
<div class="rainbow-spinner"></div>
|
||||
<div class="loading-text">
|
||||
<span class="loading-emoji">🚀</span>
|
||||
<p>正在获取最新榜单...</p>
|
||||
<div class="loading-dots">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="news-list" id="newsList">
|
||||
<!-- 新闻列表将动态生成 -->
|
||||
</div>
|
||||
|
||||
<div class="error-message" id="errorMessage" style="display: none;">
|
||||
<div class="error-content">
|
||||
<div class="error-icon">💥</div>
|
||||
<h3>加载失败了</h3>
|
||||
<p>网络连接出现问题,请稍后重试</p>
|
||||
<button onclick="loadNewsList()" class="retry-btn">
|
||||
<span>🔄</span>
|
||||
重新加载
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="js/script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
338
frontend/60sapi/热搜榜单/HackerNews榜单/js/script.js
Normal file
338
frontend/60sapi/热搜榜单/HackerNews榜单/js/script.js
Normal file
@@ -0,0 +1,338 @@
|
||||
// API接口列表
|
||||
const API_ENDPOINTS = [
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
];
|
||||
|
||||
// 当前使用的API索引
|
||||
let currentApiIndex = 0;
|
||||
let currentType = 'top';
|
||||
|
||||
// DOM元素
|
||||
const loadingElement = document.getElementById('loading');
|
||||
const newsListElement = document.getElementById('newsList');
|
||||
const errorMessageElement = document.getElementById('errorMessage');
|
||||
const updateTimeElement = document.getElementById('updateTime');
|
||||
const refreshBtn = document.getElementById('refreshBtn');
|
||||
const tabBtns = document.querySelectorAll('.tab-btn');
|
||||
|
||||
// 页面加载完成后自动加载数据
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
loadNewsList();
|
||||
initTabEvents();
|
||||
});
|
||||
|
||||
// 初始化标签事件
|
||||
function initTabEvents() {
|
||||
tabBtns.forEach(btn => {
|
||||
btn.addEventListener('click', function() {
|
||||
const type = this.getAttribute('data-type');
|
||||
if (type !== currentType) {
|
||||
currentType = type;
|
||||
updateActiveTab(this);
|
||||
loadNewsList();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 更新活跃标签
|
||||
function updateActiveTab(activeBtn) {
|
||||
tabBtns.forEach(btn => btn.classList.remove('active'));
|
||||
activeBtn.classList.add('active');
|
||||
}
|
||||
|
||||
// 刷新按钮点击事件
|
||||
refreshBtn.addEventListener('click', function() {
|
||||
loadNewsList();
|
||||
});
|
||||
|
||||
// 加载新闻列表
|
||||
async function loadNewsList() {
|
||||
showLoading();
|
||||
hideError();
|
||||
|
||||
try {
|
||||
const data = await fetchData();
|
||||
displayNewsList(data.data);
|
||||
updateRefreshTime();
|
||||
} catch (error) {
|
||||
console.error('加载失败:', error);
|
||||
showError();
|
||||
}
|
||||
|
||||
hideLoading();
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
async function fetchData() {
|
||||
for (let i = 0; i < API_ENDPOINTS.length; i++) {
|
||||
const apiUrl = API_ENDPOINTS[currentApiIndex];
|
||||
|
||||
try {
|
||||
const response = await fetch(`${apiUrl}/v2/hacker-news/${currentType}`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
timeout: 10000
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.code === 200 && data.data) {
|
||||
return data;
|
||||
} else {
|
||||
throw new Error('数据格式错误');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`API ${apiUrl} 请求失败:`, error);
|
||||
currentApiIndex = (currentApiIndex + 1) % API_ENDPOINTS.length;
|
||||
|
||||
if (i === API_ENDPOINTS.length - 1) {
|
||||
throw new Error('所有API接口都无法访问');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 显示新闻列表
|
||||
function displayNewsList(newsData) {
|
||||
newsListElement.innerHTML = '';
|
||||
|
||||
newsData.forEach((item, index) => {
|
||||
const newsItem = createNewsItem(item, index + 1);
|
||||
newsListElement.appendChild(newsItem);
|
||||
});
|
||||
}
|
||||
|
||||
// 创建新闻项目
|
||||
function createNewsItem(item, rank) {
|
||||
const newsItem = document.createElement('div');
|
||||
newsItem.className = 'news-item';
|
||||
|
||||
const rankClass = rank <= 5 ? 'news-rank top-5' : 'news-rank';
|
||||
const formattedScore = formatScore(item.score);
|
||||
const formattedTime = formatTime(item.created);
|
||||
|
||||
// 根据排名添加特殊标识
|
||||
let rankEmoji = '';
|
||||
if (rank === 1) rankEmoji = '🏆';
|
||||
else if (rank === 2) rankEmoji = '🥈';
|
||||
else if (rank === 3) rankEmoji = '🥉';
|
||||
else if (rank <= 10) rankEmoji = '💎';
|
||||
else rankEmoji = '⭐';
|
||||
|
||||
// 根据评分添加热度指示
|
||||
let heatLevel = '';
|
||||
if (item.score >= 1000) heatLevel = '🔥🔥🔥';
|
||||
else if (item.score >= 500) heatLevel = '🔥🔥';
|
||||
else if (item.score >= 100) heatLevel = '🔥';
|
||||
else heatLevel = '💫';
|
||||
|
||||
newsItem.innerHTML = `
|
||||
<div class="news-header">
|
||||
<div class="${rankClass}">${rank}</div>
|
||||
<div class="news-score">${heatLevel} ${formattedScore}</div>
|
||||
</div>
|
||||
<div class="news-title">${rankEmoji} ${escapeHtml(item.title)}</div>
|
||||
<div class="news-meta">
|
||||
<div class="news-author">👤 ${escapeHtml(item.author)}</div>
|
||||
<div class="news-time">🕒 ${formattedTime}</div>
|
||||
</div>
|
||||
<a href="${item.link}" target="_blank" class="news-link">
|
||||
🚀 阅读全文
|
||||
</a>
|
||||
`;
|
||||
|
||||
return newsItem;
|
||||
}
|
||||
|
||||
// 格式化评分
|
||||
function formatScore(score) {
|
||||
if (score >= 1000) {
|
||||
return (score / 1000).toFixed(1) + 'K';
|
||||
} else {
|
||||
return score.toString();
|
||||
}
|
||||
}
|
||||
|
||||
// 格式化时间
|
||||
function formatTime(timeStr) {
|
||||
try {
|
||||
const date = new Date(timeStr);
|
||||
const now = new Date();
|
||||
const diff = now - date;
|
||||
const minutes = Math.floor(diff / (1000 * 60));
|
||||
const hours = Math.floor(minutes / 60);
|
||||
const days = Math.floor(hours / 24);
|
||||
|
||||
if (days > 0) {
|
||||
return `${days}天前`;
|
||||
} else if (hours > 0) {
|
||||
return `${hours}小时前`;
|
||||
} else if (minutes > 0) {
|
||||
return `${minutes}分钟前`;
|
||||
} else {
|
||||
return '刚刚';
|
||||
}
|
||||
} catch (error) {
|
||||
return timeStr;
|
||||
}
|
||||
}
|
||||
|
||||
// HTML转义
|
||||
function escapeHtml(text) {
|
||||
const div = document.createElement('div');
|
||||
div.textContent = text;
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
// 更新刷新时间
|
||||
function updateRefreshTime() {
|
||||
const now = new Date();
|
||||
const timeStr = now.toLocaleString('zh-CN', {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit'
|
||||
});
|
||||
updateTimeElement.textContent = `最后更新: ${timeStr}`;
|
||||
|
||||
// 添加成功提示
|
||||
showSuccessMessage('🌈 数据已更新');
|
||||
}
|
||||
|
||||
// 显示成功消息
|
||||
function showSuccessMessage(message) {
|
||||
// 移除之前的提示
|
||||
const existingToast = document.querySelector('.success-toast');
|
||||
if (existingToast) {
|
||||
existingToast.remove();
|
||||
}
|
||||
|
||||
const toast = document.createElement('div');
|
||||
toast.className = 'success-toast';
|
||||
toast.textContent = message;
|
||||
toast.style.cssText = `
|
||||
position: fixed;
|
||||
top: 20px;
|
||||
right: 20px;
|
||||
background: linear-gradient(135deg, #ff6b6b, #4ecdc4, #45b7d1);
|
||||
color: white;
|
||||
padding: 12px 20px;
|
||||
border-radius: 25px;
|
||||
box-shadow: 0 4px 20px rgba(255, 107, 107, 0.3);
|
||||
z-index: 1000;
|
||||
font-weight: 600;
|
||||
font-size: 0.9em;
|
||||
animation: rainbowToastSlide 0.5s ease-out;
|
||||
backdrop-filter: blur(10px);
|
||||
`;
|
||||
|
||||
document.body.appendChild(toast);
|
||||
|
||||
// 3秒后自动移除
|
||||
setTimeout(() => {
|
||||
toast.style.animation = 'rainbowToastSlideOut 0.5s ease-in forwards';
|
||||
setTimeout(() => toast.remove(), 500);
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
// 显示加载状态
|
||||
function showLoading() {
|
||||
loadingElement.style.display = 'block';
|
||||
newsListElement.style.display = 'none';
|
||||
}
|
||||
|
||||
// 隐藏加载状态
|
||||
function hideLoading() {
|
||||
loadingElement.style.display = 'none';
|
||||
newsListElement.style.display = 'block';
|
||||
}
|
||||
|
||||
// 显示错误信息
|
||||
function showError() {
|
||||
errorMessageElement.style.display = 'block';
|
||||
newsListElement.style.display = 'none';
|
||||
}
|
||||
|
||||
// 隐藏错误信息
|
||||
function hideError() {
|
||||
errorMessageElement.style.display = 'none';
|
||||
}
|
||||
|
||||
// 添加CSS动画到页面
|
||||
if (!document.querySelector('#toast-styles')) {
|
||||
const style = document.createElement('style');
|
||||
style.id = 'toast-styles';
|
||||
style.textContent = `
|
||||
@keyframes rainbowToastSlide {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateX(100px) scale(0.8);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateX(0) scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rainbowToastSlideOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: translateX(0) scale(1);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateX(100px) scale(0.8);
|
||||
}
|
||||
}
|
||||
|
||||
.success-toast {
|
||||
background-size: 200% 200%;
|
||||
animation: rainbowToastSlide 0.5s ease-out, toastRainbow 2s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
@keyframes toastRainbow {
|
||||
0%, 100% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
// 自动刷新 (每5分钟)
|
||||
setInterval(function() {
|
||||
loadNewsList();
|
||||
}, 5 * 60 * 1000);
|
||||
|
||||
// 键盘快捷键支持
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'r' && (e.ctrlKey || e.metaKey)) {
|
||||
e.preventDefault();
|
||||
loadNewsList();
|
||||
}
|
||||
|
||||
// 数字键切换标签
|
||||
if (e.key >= '1' && e.key <= '3') {
|
||||
e.preventDefault();
|
||||
const typeMap = { '1': 'top', '2': 'new', '3': 'best' };
|
||||
const targetType = typeMap[e.key];
|
||||
const targetBtn = document.querySelector(`[data-type="${targetType}"]`);
|
||||
if (targetBtn && targetType !== currentType) {
|
||||
currentType = targetType;
|
||||
updateActiveTab(targetBtn);
|
||||
loadNewsList();
|
||||
}
|
||||
}
|
||||
});
|
||||
7
frontend/60sapi/热搜榜单/HackerNews榜单/接口集合.json
Normal file
7
frontend/60sapi/热搜榜单/HackerNews榜单/接口集合.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
]
|
||||
87
frontend/60sapi/热搜榜单/HackerNews榜单/返回接口.json
Normal file
87
frontend/60sapi/热搜榜单/HackerNews榜单/返回接口.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"code": 200,
|
||||
"message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
|
||||
"data": [
|
||||
{
|
||||
"id": 45087396,
|
||||
"title": "We should have the ability to run any code we want on hardware we own",
|
||||
"link": "https://hugotunius.se/2025/08/31/what-every-argument-about-sideloading-gets-wrong.html",
|
||||
"score": 995,
|
||||
"author": "K0nserv",
|
||||
"created": "2025-08-31 21:46:26",
|
||||
"created_at": 1756676786000
|
||||
},
|
||||
{
|
||||
"id": 45053029,
|
||||
"title": "Why countries trade with each other while fighting",
|
||||
"link": "https://news.mit.edu/2025/why-countries-trade-each-other-while-fighting-mariya-grinberg-book-0828",
|
||||
"score": 32,
|
||||
"author": "LorenDB",
|
||||
"created": "2025-08-28 14:58:28",
|
||||
"created_at": 1756393108000
|
||||
},
|
||||
{
|
||||
"id": 45086020,
|
||||
"title": "Eternal Struggle",
|
||||
"link": "https://yoavg.github.io/eternal/",
|
||||
"score": 481,
|
||||
"author": "yurivish",
|
||||
"created": "2025-08-31 19:04:03",
|
||||
"created_at": 1756667043000
|
||||
},
|
||||
{
|
||||
"id": 45052960,
|
||||
"title": "C++: Strongly Happens Before?",
|
||||
"link": "https://nekrozqliphort.github.io/posts/happens-b4/",
|
||||
"score": 16,
|
||||
"author": "signa11",
|
||||
"created": "2025-08-28 14:54:37",
|
||||
"created_at": 1756392877000
|
||||
},
|
||||
{
|
||||
"id": 45087971,
|
||||
"title": "Nintendo Switch 2 Dock USB-C Compatibility",
|
||||
"link": "https://www.lttlabs.com/blog/2025/08/30/nintendo-switch-2-dock",
|
||||
"score": 192,
|
||||
"author": "croes",
|
||||
"created": "2025-08-31 23:21:46",
|
||||
"created_at": 1756682506000
|
||||
},
|
||||
{
|
||||
"id": 45082731,
|
||||
"title": "“This telegram must be closely paraphrased before being communicated to anyone”",
|
||||
"link": "https://history.stackexchange.com/questions/79371/this-telegram-must-be-closely-paraphrased-before-being-communicated-to-anyone",
|
||||
"score": 645,
|
||||
"author": "azeemba",
|
||||
"created": "2025-08-31 12:39:47",
|
||||
"created_at": 1756643987000
|
||||
},
|
||||
{
|
||||
"id": 45089256,
|
||||
"title": "What Is Complexity in Chess?",
|
||||
"link": "https://lichess.org/@/Toadofsky/blog/what-is-complexity/pKo1swFh",
|
||||
"score": 41,
|
||||
"author": "fzliu",
|
||||
"created": "2025-09-01 03:45:33",
|
||||
"created_at": 1756698333000
|
||||
},
|
||||
{
|
||||
"id": 45087815,
|
||||
"title": "Lewis and Clark marked their trail with laxatives",
|
||||
"link": "https://offbeatoregon.com/2501d1006d_biliousPills-686.077.html",
|
||||
"score": 141,
|
||||
"author": "toomuchtodo",
|
||||
"created": "2025-08-31 22:54:26",
|
||||
"created_at": 1756680866000
|
||||
},
|
||||
{
|
||||
"id": 45083952,
|
||||
"title": "Jujutsu for everyone",
|
||||
"link": "https://jj-for-everyone.github.io/",
|
||||
"score": 363,
|
||||
"author": "Bogdanp",
|
||||
"created": "2025-08-31 15:31:04",
|
||||
"created_at": 1756654264000
|
||||
}
|
||||
]
|
||||
}
|
||||
40
frontend/60sapi/热搜榜单/微博热搜榜/css/background.css
Normal file
40
frontend/60sapi/热搜榜单/微博热搜榜/css/background.css
Normal file
@@ -0,0 +1,40 @@
|
||||
.background-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.rainbow-gradient {
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
left: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: linear-gradient(
|
||||
217deg,
|
||||
rgba(255, 0, 0, 0.6),
|
||||
rgba(255, 0, 0, 0) 70.71%
|
||||
), linear-gradient(
|
||||
127deg,
|
||||
rgba(0, 255, 0, 0.6),
|
||||
rgba(0, 255, 0, 0) 70.71%
|
||||
), linear-gradient(
|
||||
336deg,
|
||||
rgba(0, 0, 255, 0.6),
|
||||
rgba(0, 0, 255, 0) 70.71%
|
||||
);
|
||||
animation: rainbow-rotate 15s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes rainbow-rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
155
frontend/60sapi/热搜榜单/微博热搜榜/css/style.css
Normal file
155
frontend/60sapi/热搜榜单/微博热搜榜/css/style.css
Normal file
@@ -0,0 +1,155 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
|
||||
color: #333;
|
||||
background-color: #f5f5f5;
|
||||
position: relative;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
background-color: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
padding-bottom: 15px;
|
||||
border-bottom: 1px solid #eaeaea;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
color: #07a35a;
|
||||
margin-bottom: 10px;
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.update-time {
|
||||
color: #888;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.hot-list {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.hot-item {
|
||||
padding: 15px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 8px;
|
||||
background-color: white;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.hot-item:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.hot-rank {
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
color: #ff8200;
|
||||
margin-right: 15px;
|
||||
min-width: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hot-rank.top-1 {
|
||||
color: #ff4500;
|
||||
}
|
||||
|
||||
.hot-rank.top-2, .hot-rank.top-3 {
|
||||
color: #ff6600;
|
||||
}
|
||||
|
||||
.hot-content {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.hot-title {
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: 5px;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.hot-title:hover {
|
||||
color: #07a35a;
|
||||
}
|
||||
|
||||
.hot-value {
|
||||
font-size: 0.85rem;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.loading {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
footer {
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
padding-top: 15px;
|
||||
border-top: 1px solid #eaeaea;
|
||||
color: #888;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
/* 手机端 */
|
||||
@media (max-width: 576px) {
|
||||
.container {
|
||||
padding: 15px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.hot-item {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.hot-rank {
|
||||
font-size: 1rem;
|
||||
min-width: 25px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.hot-title {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 平板端 */
|
||||
@media (min-width: 577px) and (max-width: 992px) {
|
||||
.container {
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 电脑端 - 默认样式已经设置 */
|
||||
34
frontend/60sapi/热搜榜单/微博热搜榜/index.html
Normal file
34
frontend/60sapi/热搜榜单/微博热搜榜/index.html
Normal file
@@ -0,0 +1,34 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>微博热搜榜</title>
|
||||
<link rel="stylesheet" href="./css/style.css">
|
||||
<link rel="stylesheet" href="./css/background.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="background-container">
|
||||
<div class="rainbow-gradient"></div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>微博热搜榜</h1>
|
||||
<div class="update-time" id="updateTime"></div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="hot-list" id="hotList">
|
||||
<div class="loading">加载中...</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>数据来源于微博热搜榜</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script src="./js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
94
frontend/60sapi/热搜榜单/微博热搜榜/js/main.js
Normal file
94
frontend/60sapi/热搜榜单/微博热搜榜/js/main.js
Normal file
@@ -0,0 +1,94 @@
|
||||
// API接口列表
|
||||
const API_ENDPOINTS = [
|
||||
"https://60s-cf.viki.moe/v2/weibo",
|
||||
"https://60s.viki.moe/v2/weibo",
|
||||
"https://60s.b23.run/v2/weibo",
|
||||
"https://60s.114128.xyz/v2/weibo",
|
||||
"https://60s-cf.114128.xyz/v2/weibo"
|
||||
];
|
||||
|
||||
// 当前使用的API索引
|
||||
let currentApiIndex = 0;
|
||||
|
||||
// DOM元素
|
||||
const hotListElement = document.getElementById('hotList');
|
||||
const updateTimeElement = document.getElementById('updateTime');
|
||||
|
||||
// 格式化时间
|
||||
function formatDate(date) {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const hours = String(date.getHours()).padStart(2, '0');
|
||||
const minutes = String(date.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(date.getSeconds()).padStart(2, '0');
|
||||
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||
}
|
||||
|
||||
// 渲染热搜列表
|
||||
function renderHotList(data) {
|
||||
hotListElement.innerHTML = '';
|
||||
|
||||
data.forEach((item, index) => {
|
||||
const hotItem = document.createElement('div');
|
||||
hotItem.className = 'hot-item';
|
||||
|
||||
const rankClass = index < 3 ? `top-${index + 1}` : '';
|
||||
|
||||
hotItem.innerHTML = `
|
||||
<div class="hot-rank ${rankClass}">${index + 1}</div>
|
||||
<div class="hot-content">
|
||||
<a href="${item.link}" class="hot-title" target="_blank">${item.title}</a>
|
||||
${item.hot_value ? `<div class="hot-value">${item.hot_value}</div>` : ''}
|
||||
</div>
|
||||
`;
|
||||
|
||||
hotListElement.appendChild(hotItem);
|
||||
});
|
||||
|
||||
// 更新时间
|
||||
updateTimeElement.textContent = `更新时间:${formatDate(new Date())}`;
|
||||
}
|
||||
|
||||
// 获取微博热搜数据
|
||||
async function fetchWeiboHotList() {
|
||||
try {
|
||||
const response = await fetch(API_ENDPOINTS[currentApiIndex]);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error('网络响应不正常');
|
||||
}
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (result.code === 200 && result.data) {
|
||||
renderHotList(result.data);
|
||||
} else {
|
||||
throw new Error('数据格式错误');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取数据失败:', error);
|
||||
|
||||
// 尝试切换到下一个API
|
||||
currentApiIndex = (currentApiIndex + 1) % API_ENDPOINTS.length;
|
||||
|
||||
// 显示错误信息
|
||||
hotListElement.innerHTML = `
|
||||
<div class="loading">
|
||||
获取数据失败,正在尝试其他接口...
|
||||
</div>
|
||||
`;
|
||||
|
||||
// 延迟后重试
|
||||
setTimeout(fetchWeiboHotList, 2000);
|
||||
}
|
||||
}
|
||||
|
||||
// 页面加载完成后获取数据
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
fetchWeiboHotList();
|
||||
|
||||
// 每隔5分钟刷新一次数据
|
||||
setInterval(fetchWeiboHotList, 5 * 60 * 1000);
|
||||
});
|
||||
7
frontend/60sapi/热搜榜单/微博热搜榜/接口集合.json
Normal file
7
frontend/60sapi/热搜榜单/微博热搜榜/接口集合.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
]
|
||||
261
frontend/60sapi/热搜榜单/微博热搜榜/返回接口.json
Normal file
261
frontend/60sapi/热搜榜单/微博热搜榜/返回接口.json
Normal file
@@ -0,0 +1,261 @@
|
||||
{
|
||||
"code": 200,
|
||||
"message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
|
||||
"data": [
|
||||
{
|
||||
"title": "00后男生0.6秒飞针采血惊呆患者",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=00%E5%90%8E%E7%94%B7%E7%94%9F0.6%E7%A7%92%E9%A3%9E%E9%92%88%E9%87%87%E8%A1%80%E6%83%8A%E5%91%86%E6%82%A3%E8%80%85"
|
||||
},
|
||||
{
|
||||
"title": "普京带3位副总理10多位部长到中国",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%99%AE%E4%BA%AC%E5%B8%A63%E4%BD%8D%E5%89%AF%E6%80%BB%E7%90%8610%E5%A4%9A%E4%BD%8D%E9%83%A8%E9%95%BF%E5%88%B0%E4%B8%AD%E5%9B%BD"
|
||||
},
|
||||
{
|
||||
"title": "始终高举上海精神旗帜",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%A7%8B%E7%BB%88%E9%AB%98%E4%B8%BE%E4%B8%8A%E6%B5%B7%E7%B2%BE%E7%A5%9E%E6%97%97%E5%B8%9C"
|
||||
},
|
||||
{
|
||||
"title": "女生苦练化妆1年的变化",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%A5%B3%E7%94%9F%E8%8B%A6%E7%BB%83%E5%8C%96%E5%A6%861%E5%B9%B4%E7%9A%84%E5%8F%98%E5%8C%96"
|
||||
},
|
||||
{
|
||||
"title": "香港1200架无人机重现日本投降矣",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E9%A6%99%E6%B8%AF1200%E6%9E%B6%E6%97%A0%E4%BA%BA%E6%9C%BA%E9%87%8D%E7%8E%B0%E6%97%A5%E6%9C%AC%E6%8A%95%E9%99%8D%E7%9F%A3"
|
||||
},
|
||||
{
|
||||
"title": "尚公主全阵容官宣",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%B0%9A%E5%85%AC%E4%B8%BB%E5%85%A8%E9%98%B5%E5%AE%B9%E5%AE%98%E5%AE%A3"
|
||||
},
|
||||
{
|
||||
"title": "真的可以永远相信刘宇舞台",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E7%9C%9F%E7%9A%84%E5%8F%AF%E4%BB%A5%E6%B0%B8%E8%BF%9C%E7%9B%B8%E4%BF%A1%E5%88%98%E5%AE%87%E8%88%9E%E5%8F%B0"
|
||||
},
|
||||
{
|
||||
"title": "九三阅兵徒步方队铿锵步伐",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E4%B9%9D%E4%B8%89%E9%98%85%E5%85%B5%E5%BE%92%E6%AD%A5%E6%96%B9%E9%98%9F%E9%93%BF%E9%94%B5%E6%AD%A5%E4%BC%90"
|
||||
},
|
||||
{
|
||||
"title": "唐朝诡事录",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%94%90%E6%9C%9D%E8%AF%A1%E4%BA%8B%E5%BD%95"
|
||||
},
|
||||
{
|
||||
"title": "抗战胜利80周年第3场记者招待会",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%8A%97%E6%88%98%E8%83%9C%E5%88%A980%E5%91%A8%E5%B9%B4%E7%AC%AC3%E5%9C%BA%E8%AE%B0%E8%80%85%E6%8B%9B%E5%BE%85%E4%BC%9A"
|
||||
},
|
||||
{
|
||||
"title": "王曼昱钱天一3比2蒯曼孙颖莎",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E7%8E%8B%E6%9B%BC%E6%98%B1%E9%92%B1%E5%A4%A9%E4%B8%803%E6%AF%942%E8%92%AF%E6%9B%BC%E5%AD%99%E9%A2%96%E8%8E%8E"
|
||||
},
|
||||
{
|
||||
"title": "张维伊对96岁的姥姥说长命百岁",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%BC%A0%E7%BB%B4%E4%BC%8A%E5%AF%B996%E5%B2%81%E7%9A%84%E5%A7%A5%E5%A7%A5%E8%AF%B4%E9%95%BF%E5%91%BD%E7%99%BE%E5%B2%81"
|
||||
},
|
||||
{
|
||||
"title": "孟子义李昀锐定妆照",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%AD%9F%E5%AD%90%E4%B9%89%E6%9D%8E%E6%98%80%E9%94%90%E5%AE%9A%E5%A6%86%E7%85%A7"
|
||||
},
|
||||
{
|
||||
"title": "以为张艺兴穿的蓝色抹胸",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E4%BB%A5%E4%B8%BA%E5%BC%A0%E8%89%BA%E5%85%B4%E7%A9%BF%E7%9A%84%E8%93%9D%E8%89%B2%E6%8A%B9%E8%83%B8"
|
||||
},
|
||||
{
|
||||
"title": "尚公主开机",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%B0%9A%E5%85%AC%E4%B8%BB%E5%BC%80%E6%9C%BA"
|
||||
},
|
||||
{
|
||||
"title": "心动的信号8",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%BF%83%E5%8A%A8%E7%9A%84%E4%BF%A1%E5%8F%B78"
|
||||
},
|
||||
{
|
||||
"title": "霍建华病娇疯批演爽了",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E9%9C%8D%E5%BB%BA%E5%8D%8E%E7%97%85%E5%A8%87%E7%96%AF%E6%89%B9%E6%BC%94%E7%88%BD%E4%BA%86"
|
||||
},
|
||||
{
|
||||
"title": "普京抵达天津",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%99%AE%E4%BA%AC%E6%8A%B5%E8%BE%BE%E5%A4%A9%E6%B4%A5"
|
||||
},
|
||||
{
|
||||
"title": "龚俊的体面只给旅游前几天",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E9%BE%9A%E4%BF%8A%E7%9A%84%E4%BD%93%E9%9D%A2%E5%8F%AA%E7%BB%99%E6%97%85%E6%B8%B8%E5%89%8D%E5%87%A0%E5%A4%A9"
|
||||
},
|
||||
{
|
||||
"title": "开学焦虑更严重的另有其人",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%BC%80%E5%AD%A6%E7%84%A6%E8%99%91%E6%9B%B4%E4%B8%A5%E9%87%8D%E7%9A%84%E5%8F%A6%E6%9C%89%E5%85%B6%E4%BA%BA"
|
||||
},
|
||||
{
|
||||
"title": "那英小发雷霆",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E9%82%A3%E8%8B%B1%E5%B0%8F%E5%8F%91%E9%9B%B7%E9%9C%86"
|
||||
},
|
||||
{
|
||||
"title": "居然有演员一句台词背1小时",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%B1%85%E7%84%B6%E6%9C%89%E6%BC%94%E5%91%98%E4%B8%80%E5%8F%A5%E5%8F%B0%E8%AF%8D%E8%83%8C1%E5%B0%8F%E6%97%B6"
|
||||
},
|
||||
{
|
||||
"title": "谁教魏哲鸣冷脸跳这些的",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E8%B0%81%E6%95%99%E9%AD%8F%E5%93%B2%E9%B8%A3%E5%86%B7%E8%84%B8%E8%B7%B3%E8%BF%99%E4%BA%9B%E7%9A%84"
|
||||
},
|
||||
{
|
||||
"title": "朱孝天爆冷出局",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%9C%B1%E5%AD%9D%E5%A4%A9%E7%88%86%E5%86%B7%E5%87%BA%E5%B1%80"
|
||||
},
|
||||
{
|
||||
"title": "俄军称掌握战略主动权",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E4%BF%84%E5%86%9B%E7%A7%B0%E6%8E%8C%E6%8F%A1%E6%88%98%E7%95%A5%E4%B8%BB%E5%8A%A8%E6%9D%83"
|
||||
},
|
||||
{
|
||||
"title": "谈恋爱3个月定律",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E8%B0%88%E6%81%8B%E7%88%B13%E4%B8%AA%E6%9C%88%E5%AE%9A%E5%BE%8B"
|
||||
},
|
||||
{
|
||||
"title": "沈腾说错了最怕人笨还不勤快",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%B2%88%E8%85%BE%E8%AF%B4%E9%94%99%E4%BA%86%E6%9C%80%E6%80%95%E4%BA%BA%E7%AC%A8%E8%BF%98%E4%B8%8D%E5%8B%A4%E5%BF%AB"
|
||||
},
|
||||
{
|
||||
"title": "王菲最新状态",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E7%8E%8B%E8%8F%B2%E6%9C%80%E6%96%B0%E7%8A%B6%E6%80%81"
|
||||
},
|
||||
{
|
||||
"title": "张紫宁转行当拉拉队经理人了",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%BC%A0%E7%B4%AB%E5%AE%81%E8%BD%AC%E8%A1%8C%E5%BD%93%E6%8B%89%E6%8B%89%E9%98%9F%E7%BB%8F%E7%90%86%E4%BA%BA%E4%BA%86"
|
||||
},
|
||||
{
|
||||
"title": "金价大涨两大原因",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E9%87%91%E4%BB%B7%E5%A4%A7%E6%B6%A8%E4%B8%A4%E5%A4%A7%E5%8E%9F%E5%9B%A0"
|
||||
},
|
||||
{
|
||||
"title": "陕西Shaanxi官方标准拼音",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E9%99%95%E8%A5%BFShaanxi%E5%AE%98%E6%96%B9%E6%A0%87%E5%87%86%E6%8B%BC%E9%9F%B3"
|
||||
},
|
||||
{
|
||||
"title": "边伯贤跳刀马刀马",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E8%BE%B9%E4%BC%AF%E8%B4%A4%E8%B7%B3%E5%88%80%E9%A9%AC%E5%88%80%E9%A9%AC"
|
||||
},
|
||||
{
|
||||
"title": "冷冻太久的肉就不要再吃了",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%86%B7%E5%86%BB%E5%A4%AA%E4%B9%85%E7%9A%84%E8%82%89%E5%B0%B1%E4%B8%8D%E8%A6%81%E5%86%8D%E5%90%83%E4%BA%86"
|
||||
},
|
||||
{
|
||||
"title": "95后00后恋爱有代沟",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=95%E5%90%8E00%E5%90%8E%E6%81%8B%E7%88%B1%E6%9C%89%E4%BB%A3%E6%B2%9F"
|
||||
},
|
||||
{
|
||||
"title": "易烊千玺抢票",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%98%93%E7%83%8A%E5%8D%83%E7%8E%BA%E6%8A%A2%E7%A5%A8"
|
||||
},
|
||||
{
|
||||
"title": "孙闻被乒协处罚",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%AD%99%E9%97%BB%E8%A2%AB%E4%B9%92%E5%8D%8F%E5%A4%84%E7%BD%9A"
|
||||
},
|
||||
{
|
||||
"title": "这居然是白举纲",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E8%BF%99%E5%B1%85%E7%84%B6%E6%98%AF%E7%99%BD%E4%B8%BE%E7%BA%B2"
|
||||
},
|
||||
{
|
||||
"title": "纪凌尘出演孟子义新剧",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E7%BA%AA%E5%87%8C%E5%B0%98%E5%87%BA%E6%BC%94%E5%AD%9F%E5%AD%90%E4%B9%89%E6%96%B0%E5%89%A7"
|
||||
},
|
||||
{
|
||||
"title": "外卖员妈妈暴雨中将孩子托付派出所",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%A4%96%E5%8D%96%E5%91%98%E5%A6%88%E5%A6%88%E6%9A%B4%E9%9B%A8%E4%B8%AD%E5%B0%86%E5%AD%A9%E5%AD%90%E6%89%98%E4%BB%98%E6%B4%BE%E5%87%BA%E6%89%80"
|
||||
},
|
||||
{
|
||||
"title": "我点外卖没用上券就这样",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%88%91%E7%82%B9%E5%A4%96%E5%8D%96%E6%B2%A1%E7%94%A8%E4%B8%8A%E5%88%B8%E5%B0%B1%E8%BF%99%E6%A0%B7"
|
||||
},
|
||||
{
|
||||
"title": "孙颖莎小时候真来过新疆",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%AD%99%E9%A2%96%E8%8E%8E%E5%B0%8F%E6%97%B6%E5%80%99%E7%9C%9F%E6%9D%A5%E8%BF%87%E6%96%B0%E7%96%86"
|
||||
},
|
||||
{
|
||||
"title": "印尼首都交通瘫痪",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%8D%B0%E5%B0%BC%E9%A6%96%E9%83%BD%E4%BA%A4%E9%80%9A%E7%98%AB%E7%97%AA"
|
||||
},
|
||||
{
|
||||
"title": "停狗位停满了小狗",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%81%9C%E7%8B%97%E4%BD%8D%E5%81%9C%E6%BB%A1%E4%BA%86%E5%B0%8F%E7%8B%97"
|
||||
},
|
||||
{
|
||||
"title": "怪不得校服裤子屁股锃亮",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%80%AA%E4%B8%8D%E5%BE%97%E6%A0%A1%E6%9C%8D%E8%A3%A4%E5%AD%90%E5%B1%81%E8%82%A1%E9%94%83%E4%BA%AE"
|
||||
},
|
||||
{
|
||||
"title": "这一幕幕中国浪漫看得心暖暖",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E8%BF%99%E4%B8%80%E5%B9%95%E5%B9%95%E4%B8%AD%E5%9B%BD%E6%B5%AA%E6%BC%AB%E7%9C%8B%E5%BE%97%E5%BF%83%E6%9A%96%E6%9A%96"
|
||||
},
|
||||
{
|
||||
"title": "林书豪退役",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E6%9E%97%E4%B9%A6%E8%B1%AA%E9%80%80%E5%BD%B9"
|
||||
},
|
||||
{
|
||||
"title": "小猫咪舔毛把自己累睡着",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%B0%8F%E7%8C%AB%E5%92%AA%E8%88%94%E6%AF%9B%E6%8A%8A%E8%87%AA%E5%B7%B1%E7%B4%AF%E7%9D%A1%E7%9D%80"
|
||||
},
|
||||
{
|
||||
"title": "iPhone17国行预计涨价500元",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=iPhone17%E5%9B%BD%E8%A1%8C%E9%A2%84%E8%AE%A1%E6%B6%A8%E4%BB%B7500%E5%85%83"
|
||||
},
|
||||
{
|
||||
"title": "土耳其总统埃尔多安抵达天津",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%9C%9F%E8%80%B3%E5%85%B6%E6%80%BB%E7%BB%9F%E5%9F%83%E5%B0%94%E5%A4%9A%E5%AE%89%E6%8A%B5%E8%BE%BE%E5%A4%A9%E6%B4%A5"
|
||||
},
|
||||
{
|
||||
"title": "脱口秀和Ta的朋友们",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E8%84%B1%E5%8F%A3%E7%A7%80%E5%92%8CTa%E7%9A%84%E6%9C%8B%E5%8F%8B%E4%BB%AC"
|
||||
},
|
||||
{
|
||||
"title": "孟子义暮晚摇",
|
||||
"hot_value": 0,
|
||||
"link": "https://s.weibo.com/weibo?q=%E5%AD%9F%E5%AD%90%E4%B9%89%E6%9A%AE%E6%99%9A%E6%91%87"
|
||||
}
|
||||
]
|
||||
}
|
||||
52
frontend/60sapi/热搜榜单/抖音热搜榜/css/background.css
Normal file
52
frontend/60sapi/热搜榜单/抖音热搜榜/css/background.css
Normal file
@@ -0,0 +1,52 @@
|
||||
/* 背景相关样式 */
|
||||
body {
|
||||
background: linear-gradient(135deg, #e8f5e8 0%, #c8e6c9 25%, #a5d6a7 50%, #81c784 75%, #66bb6a 100%);
|
||||
background-attachment: fixed;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 背景装饰元素 */
|
||||
body::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image:
|
||||
radial-gradient(circle at 20% 80%, rgba(120, 200, 120, 0.15) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(100, 180, 100, 0.15) 0%, transparent 50%),
|
||||
radial-gradient(circle at 40% 40%, rgba(140, 220, 140, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 60% 70%, rgba(160, 240, 160, 0.08) 0%, transparent 40%);
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
/* 浮动装饰圆点 */
|
||||
body::after {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image:
|
||||
radial-gradient(circle at 10% 10%, rgba(76, 175, 80, 0.1) 2px, transparent 2px),
|
||||
radial-gradient(circle at 90% 90%, rgba(76, 175, 80, 0.08) 1px, transparent 1px),
|
||||
radial-gradient(circle at 30% 80%, rgba(76, 175, 80, 0.06) 1.5px, transparent 1.5px),
|
||||
radial-gradient(circle at 70% 20%, rgba(76, 175, 80, 0.05) 1px, transparent 1px);
|
||||
background-size: 100px 100px, 150px 150px, 80px 80px, 120px 120px;
|
||||
animation: float 20s ease-in-out infinite alternate;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0% {
|
||||
transform: translateY(0px) rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: translateY(-10px) rotate(1deg);
|
||||
}
|
||||
}
|
||||
956
frontend/60sapi/热搜榜单/抖音热搜榜/css/style.css
Normal file
956
frontend/60sapi/热搜榜单/抖音热搜榜/css/style.css
Normal file
@@ -0,0 +1,956 @@
|
||||
/* 重置样式 */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #2e7d32;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
/* 容器 */
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
animation: containerFadeIn 0.8s ease-out;
|
||||
}
|
||||
|
||||
@keyframes containerFadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 头部 */
|
||||
.header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
padding: 35px 25px;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 8px 32px rgba(46, 125, 50, 0.12);
|
||||
backdrop-filter: blur(15px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, transparent, rgba(76, 175, 80, 0.1), transparent);
|
||||
animation: shimmer 3s infinite;
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
0% { left: -100%; }
|
||||
100% { left: 100%; }
|
||||
}
|
||||
|
||||
.header-icon {
|
||||
font-size: 3em;
|
||||
margin-bottom: 10px;
|
||||
animation: bounce 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
|
||||
40% { transform: translateY(-10px); }
|
||||
60% { transform: translateY(-5px); }
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 2.8em;
|
||||
font-weight: 700;
|
||||
color: #1b5e20;
|
||||
margin-bottom: 8px;
|
||||
text-shadow: 0 2px 4px rgba(46, 125, 50, 0.1);
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.1em;
|
||||
color: #4caf50;
|
||||
margin-bottom: 20px;
|
||||
font-weight: 500;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.update-time {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
color: #4caf50;
|
||||
font-size: 0.95em;
|
||||
margin-bottom: 20px;
|
||||
padding: 8px 16px;
|
||||
background: rgba(76, 175, 80, 0.1);
|
||||
border-radius: 20px;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.time-icon {
|
||||
font-size: 1.1em;
|
||||
animation: tick 1s infinite;
|
||||
}
|
||||
|
||||
@keyframes tick {
|
||||
0%, 50% { transform: rotate(0deg); }
|
||||
25% { transform: rotate(15deg); }
|
||||
75% { transform: rotate(-15deg); }
|
||||
}
|
||||
|
||||
.refresh-btn {
|
||||
background: linear-gradient(135deg, #4caf50, #66bb6a, #81c784);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 12px 30px;
|
||||
border-radius: 30px;
|
||||
cursor: pointer;
|
||||
font-size: 1em;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.refresh-btn::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
border-radius: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
transition: all 0.5s ease;
|
||||
}
|
||||
|
||||
.refresh-btn:hover::before {
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.refresh-btn:hover {
|
||||
background: linear-gradient(135deg, #388e3c, #4caf50, #66bb6a);
|
||||
box-shadow: 0 6px 20px rgba(76, 175, 80, 0.4);
|
||||
transform: translateY(-3px);
|
||||
}
|
||||
|
||||
.refresh-btn:active {
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn-icon {
|
||||
font-size: 1.1em;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.refresh-btn:hover .btn-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
/* 加载动画 */
|
||||
.loading {
|
||||
text-align: center;
|
||||
padding: 60px 30px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
border-radius: 20px;
|
||||
margin-bottom: 20px;
|
||||
box-shadow: 0 8px 32px rgba(46, 125, 50, 0.1);
|
||||
backdrop-filter: blur(15px);
|
||||
}
|
||||
|
||||
.loading-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.spinner {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border: 5px solid #e8f5e8;
|
||||
border-top: 5px solid #4caf50;
|
||||
border-radius: 50%;
|
||||
animation: spin 1s linear infinite;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.spinner::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
left: -5px;
|
||||
right: -5px;
|
||||
bottom: -5px;
|
||||
border: 2px solid transparent;
|
||||
border-top: 2px solid #81c784;
|
||||
border-radius: 50%;
|
||||
animation: spin 2s linear infinite reverse;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.loading-text {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.loading-emoji {
|
||||
font-size: 2.5em;
|
||||
animation: pulse 1.5s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0% { transform: scale(1); opacity: 0.8; }
|
||||
100% { transform: scale(1.1); opacity: 1; }
|
||||
}
|
||||
|
||||
.loading-text p {
|
||||
font-size: 1.1em;
|
||||
color: #4caf50;
|
||||
font-weight: 500;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.loading-dots {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.loading-dots span {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: #4caf50;
|
||||
border-radius: 50%;
|
||||
animation: dot-bounce 1.4s ease-in-out infinite both;
|
||||
}
|
||||
|
||||
.loading-dots span:nth-child(1) { animation-delay: -0.32s; }
|
||||
.loading-dots span:nth-child(2) { animation-delay: -0.16s; }
|
||||
|
||||
@keyframes dot-bounce {
|
||||
0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }
|
||||
40% { transform: scale(1.2); opacity: 1; }
|
||||
}
|
||||
|
||||
/* 热搜列表 */
|
||||
.hot-list {
|
||||
display: grid;
|
||||
gap: 20px;
|
||||
animation: fadeInUp 0.6s ease-out;
|
||||
}
|
||||
|
||||
@keyframes fadeInUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.hot-item {
|
||||
background: rgba(255, 255, 255, 0.98);
|
||||
border-radius: 16px;
|
||||
padding: 25px;
|
||||
box-shadow: 0 4px 20px rgba(46, 125, 50, 0.08);
|
||||
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||||
border: 1px solid rgba(76, 175, 80, 0.15);
|
||||
backdrop-filter: blur(10px);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
animation: slideInLeft 0.6s ease-out;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.hot-item:nth-child(odd) {
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
|
||||
.hot-item:nth-child(even) {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
|
||||
@keyframes slideInLeft {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateX(-50px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
.hot-item::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 4px;
|
||||
height: 100%;
|
||||
background: linear-gradient(to bottom, #4caf50, #81c784);
|
||||
transform: scaleY(0);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.hot-item:hover::before {
|
||||
transform: scaleY(1);
|
||||
}
|
||||
|
||||
.hot-item:hover {
|
||||
box-shadow: 0 8px 40px rgba(46, 125, 50, 0.15);
|
||||
transform: translateY(-5px) scale(1.02);
|
||||
border-color: rgba(76, 175, 80, 0.3);
|
||||
}
|
||||
|
||||
.hot-item-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 18px;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.hot-rank {
|
||||
background: linear-gradient(135deg, #4caf50, #66bb6a);
|
||||
color: white;
|
||||
min-width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
flex-shrink: 0;
|
||||
position: relative;
|
||||
box-shadow: 0 3px 10px rgba(76, 175, 80, 0.3);
|
||||
}
|
||||
|
||||
.hot-rank::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -2px;
|
||||
left: -2px;
|
||||
right: -2px;
|
||||
bottom: -2px;
|
||||
background: linear-gradient(45deg, #4caf50, #81c784, #4caf50);
|
||||
border-radius: 50%;
|
||||
z-index: -1;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.hot-item:hover .hot-rank::after {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.hot-rank.top-3 {
|
||||
background: linear-gradient(135deg, #ff6b35, #f7931e, #ffa726);
|
||||
box-shadow: 0 3px 15px rgba(255, 107, 53, 0.4);
|
||||
animation: glow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes glow {
|
||||
0% { box-shadow: 0 3px 15px rgba(255, 107, 53, 0.4); }
|
||||
100% { box-shadow: 0 3px 20px rgba(255, 107, 53, 0.6), 0 0 25px rgba(255, 107, 53, 0.3); }
|
||||
}
|
||||
|
||||
.hot-rank.top-3::before {
|
||||
content: '👑';
|
||||
position: absolute;
|
||||
top: -8px;
|
||||
right: -5px;
|
||||
font-size: 0.7em;
|
||||
animation: crown-bounce 1s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes crown-bounce {
|
||||
0% { transform: translateY(0) rotate(-5deg); }
|
||||
100% { transform: translateY(-2px) rotate(5deg); }
|
||||
}
|
||||
|
||||
.hot-title {
|
||||
font-size: 1.15em;
|
||||
font-weight: 600;
|
||||
color: #1b5e20;
|
||||
flex: 1;
|
||||
line-height: 1.4;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.hot-content {
|
||||
display: flex;
|
||||
gap: 18px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.hot-cover {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
border-radius: 12px;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.hot-cover::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.1) 50%, transparent 70%);
|
||||
transform: translateX(-100%);
|
||||
transition: transform 0.6s ease;
|
||||
}
|
||||
|
||||
.hot-item:hover .hot-cover::after {
|
||||
transform: translateX(100%);
|
||||
}
|
||||
|
||||
.hot-item:hover .hot-cover {
|
||||
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15);
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.hot-info {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.hot-value {
|
||||
color: #e91e63;
|
||||
font-weight: 700;
|
||||
font-size: 1.1em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.hot-value::before {
|
||||
content: '热度';
|
||||
font-size: 1.2em;
|
||||
animation: fire 1.5s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes fire {
|
||||
0% { transform: scale(1); }
|
||||
100% { transform: scale(1.1); }
|
||||
}
|
||||
|
||||
.hot-time {
|
||||
color: #757575;
|
||||
font-size: 0.9em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.hot-time::before {
|
||||
content: '📅日期';
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.hot-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
color: #4caf50;
|
||||
text-decoration: none;
|
||||
font-size: 0.95em;
|
||||
font-weight: 600;
|
||||
padding: 8px 18px;
|
||||
border: 2px solid #4caf50;
|
||||
border-radius: 25px;
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
max-width: fit-content;
|
||||
}
|
||||
|
||||
.hot-link::before {
|
||||
content: '👀';
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.hot-link::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, transparent, rgba(76, 175, 80, 0.2), transparent);
|
||||
transition: left 0.5s ease;
|
||||
}
|
||||
|
||||
.hot-link:hover::after {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.hot-link:hover {
|
||||
background: #4caf50;
|
||||
color: white;
|
||||
transform: scale(1.05);
|
||||
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3);
|
||||
}
|
||||
|
||||
/* 错误信息 */
|
||||
.error-message {
|
||||
text-align: center;
|
||||
padding: 60px 30px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 8px 32px rgba(211, 47, 47, 0.1);
|
||||
backdrop-filter: blur(15px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
.error-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.error-icon {
|
||||
font-size: 4em;
|
||||
animation: shake 1s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes shake {
|
||||
0% { transform: translateX(0); }
|
||||
25% { transform: translateX(-5px) rotate(-5deg); }
|
||||
50% { transform: translateX(5px) rotate(5deg); }
|
||||
75% { transform: translateX(-3px) rotate(-3deg); }
|
||||
100% { transform: translateX(0) rotate(0deg); }
|
||||
}
|
||||
|
||||
.error-content h3 {
|
||||
font-size: 1.5em;
|
||||
color: #d32f2f;
|
||||
margin: 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.error-content p {
|
||||
color: #757575;
|
||||
font-size: 1em;
|
||||
margin: 0;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.retry-btn {
|
||||
background: linear-gradient(135deg, #4caf50, #66bb6a);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 12px 25px;
|
||||
border-radius: 25px;
|
||||
cursor: pointer;
|
||||
font-size: 1em;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.retry-btn:hover {
|
||||
background: linear-gradient(135deg, #388e3c, #4caf50);
|
||||
box-shadow: 0 6px 20px rgba(76, 175, 80, 0.4);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.retry-btn span {
|
||||
font-size: 1.1em;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.retry-btn:hover span {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
/* 平板端适配 (768px - 1024px) */
|
||||
@media (min-width: 768px) and (max-width: 1024px) {
|
||||
.container {
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 40px 30px;
|
||||
}
|
||||
|
||||
.header-icon {
|
||||
font-size: 3.5em;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.hot-list {
|
||||
grid-template-columns: repeat(auto-fit, minmax(450px, 1fr));
|
||||
gap: 25px;
|
||||
}
|
||||
|
||||
.hot-item {
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.hot-cover {
|
||||
width: 85px;
|
||||
height: 85px;
|
||||
}
|
||||
|
||||
.hot-rank {
|
||||
min-width: 42px;
|
||||
height: 42px;
|
||||
font-size: 1.05em;
|
||||
}
|
||||
|
||||
.hot-title {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.hot-value {
|
||||
font-size: 1.15em;
|
||||
}
|
||||
}
|
||||
|
||||
/* 电脑端适配 (1025px+) */
|
||||
@media (min-width: 1025px) {
|
||||
.container {
|
||||
padding: 40px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 50px 40px;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.header-icon {
|
||||
font-size: 4em;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 3.5em;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.hot-list {
|
||||
grid-template-columns: repeat(auto-fit, minmax(550px, 1fr));
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.hot-item {
|
||||
padding: 35px;
|
||||
}
|
||||
|
||||
.hot-rank {
|
||||
min-width: 45px;
|
||||
height: 45px;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.hot-cover {
|
||||
width: 110px;
|
||||
height: 110px;
|
||||
}
|
||||
|
||||
.hot-title {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.hot-value {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.hot-time {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.hot-link {
|
||||
font-size: 1em;
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
/* 电脑端特殊效果 */
|
||||
.hot-item:hover {
|
||||
transform: translateY(-8px) scale(1.03);
|
||||
}
|
||||
|
||||
.hot-item::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 20px;
|
||||
transform: translateY(-50%);
|
||||
font-size: 1.5em;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.hot-item:hover::after {
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
/* 手机端适配 (默认, 767px以下) */
|
||||
@media (max-width: 767px) {
|
||||
.container {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 25px 20px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.header-icon {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 2.2em;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.update-time {
|
||||
font-size: 0.9em;
|
||||
padding: 6px 12px;
|
||||
}
|
||||
|
||||
.refresh-btn {
|
||||
padding: 10px 20px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.hot-item {
|
||||
padding: 20px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.hot-rank {
|
||||
min-width: 35px;
|
||||
height: 35px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.hot-title {
|
||||
font-size: 1.05em;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.hot-content {
|
||||
flex-direction: column;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.hot-cover {
|
||||
width: 100%;
|
||||
height: 180px;
|
||||
align-self: center;
|
||||
max-width: 280px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.hot-info {
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.hot-value {
|
||||
font-size: 1.05em;
|
||||
}
|
||||
|
||||
.hot-time {
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
.hot-link {
|
||||
font-size: 0.9em;
|
||||
padding: 8px 16px;
|
||||
align-self: flex-start;
|
||||
}
|
||||
|
||||
/* 手机端动画优化 */
|
||||
.hot-item {
|
||||
animation-duration: 0.4s;
|
||||
}
|
||||
|
||||
.hot-item:hover {
|
||||
transform: translateY(-2px) scale(1.01);
|
||||
}
|
||||
}
|
||||
|
||||
/* 超小屏幕适配 (480px以下) */
|
||||
@media (max-width: 480px) {
|
||||
.container {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 20px 15px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header-icon {
|
||||
font-size: 2.2em;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 1.9em;
|
||||
letter-spacing: 0.3px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.update-time {
|
||||
font-size: 0.85em;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.refresh-btn {
|
||||
padding: 8px 16px;
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
.hot-list {
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.hot-item {
|
||||
padding: 18px 15px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.hot-item-header {
|
||||
margin-bottom: 15px;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.hot-rank {
|
||||
min-width: 32px;
|
||||
height: 32px;
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
.hot-title {
|
||||
font-size: 1em;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.hot-content {
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.hot-cover {
|
||||
height: 160px;
|
||||
max-width: 260px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.hot-info {
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.hot-value {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.hot-time {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.hot-link {
|
||||
font-size: 0.85em;
|
||||
padding: 6px 14px;
|
||||
}
|
||||
|
||||
/* 超小屏幕性能优化 */
|
||||
.hot-item {
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
}
|
||||
|
||||
.hot-item::before,
|
||||
.hot-item::after,
|
||||
.hot-cover::after,
|
||||
.hot-link::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.loading-content {
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.loading-emoji {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.loading-text p {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.error-icon {
|
||||
font-size: 3em;
|
||||
}
|
||||
|
||||
.error-content h3 {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.error-content p {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
}
|
||||
60
frontend/60sapi/热搜榜单/抖音热搜榜/index.html
Normal file
60
frontend/60sapi/热搜榜单/抖音热搜榜/index.html
Normal file
@@ -0,0 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>抖音热搜榜</title>
|
||||
<link rel="stylesheet" href="css/background.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header class="header">
|
||||
<div class="header-icon">🔥</div>
|
||||
<h1 class="title">📱 抖音热搜榜 🎵</h1>
|
||||
<p class="subtitle">实时热门话题 · 紧跟潮流趋势</p>
|
||||
<div class="update-time">
|
||||
<span class="time-icon">⏰</span>
|
||||
<span id="updateTime">加载中...</span>
|
||||
</div>
|
||||
<button id="refreshBtn" class="refresh-btn">
|
||||
<span class="btn-icon">🔄</span>
|
||||
刷新数据
|
||||
</button>
|
||||
</header>
|
||||
|
||||
<div class="loading" id="loading">
|
||||
<div class="loading-content">
|
||||
<div class="spinner"></div>
|
||||
<div class="loading-text">
|
||||
<span class="loading-emoji">🎭</span>
|
||||
<p>正在获取最新热搜...</p>
|
||||
<div class="loading-dots">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hot-list" id="hotList">
|
||||
<!-- 热搜列表将动态生成 -->
|
||||
</div>
|
||||
|
||||
<div class="error-message" id="errorMessage" style="display: none;">
|
||||
<div class="error-content">
|
||||
<div class="error-icon">😵</div>
|
||||
<h3>加载失败了</h3>
|
||||
<p>网络连接出现问题,请稍后重试</p>
|
||||
<button onclick="loadHotList()" class="retry-btn">
|
||||
<span>🔄</span>
|
||||
重新加载
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="js/script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
300
frontend/60sapi/热搜榜单/抖音热搜榜/js/script.js
Normal file
300
frontend/60sapi/热搜榜单/抖音热搜榜/js/script.js
Normal file
@@ -0,0 +1,300 @@
|
||||
// API接口列表
|
||||
const API_ENDPOINTS = [
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
];
|
||||
|
||||
// 当前使用的API索引
|
||||
let currentApiIndex = 0;
|
||||
|
||||
// DOM元素
|
||||
const loadingElement = document.getElementById('loading');
|
||||
const hotListElement = document.getElementById('hotList');
|
||||
const errorMessageElement = document.getElementById('errorMessage');
|
||||
const updateTimeElement = document.getElementById('updateTime');
|
||||
const refreshBtn = document.getElementById('refreshBtn');
|
||||
|
||||
// 页面加载完成后自动加载数据
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
loadHotList();
|
||||
});
|
||||
|
||||
// 刷新按钮点击事件
|
||||
refreshBtn.addEventListener('click', function() {
|
||||
loadHotList();
|
||||
});
|
||||
|
||||
// 加载热搜列表
|
||||
async function loadHotList() {
|
||||
showLoading();
|
||||
hideError();
|
||||
|
||||
try {
|
||||
const data = await fetchData();
|
||||
displayHotList(data.data);
|
||||
updateRefreshTime();
|
||||
} catch (error) {
|
||||
console.error('加载失败:', error);
|
||||
showError();
|
||||
}
|
||||
|
||||
hideLoading();
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
async function fetchData() {
|
||||
for (let i = 0; i < API_ENDPOINTS.length; i++) {
|
||||
const apiUrl = API_ENDPOINTS[currentApiIndex];
|
||||
|
||||
try {
|
||||
const response = await fetch(`${apiUrl}/v2/douyin`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
timeout: 10000
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.code === 200 && data.data) {
|
||||
return data;
|
||||
} else {
|
||||
throw new Error('数据格式错误');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`API ${apiUrl} 请求失败:`, error);
|
||||
currentApiIndex = (currentApiIndex + 1) % API_ENDPOINTS.length;
|
||||
|
||||
if (i === API_ENDPOINTS.length - 1) {
|
||||
throw new Error('所有API接口都无法访问');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 显示热搜列表
|
||||
function displayHotList(hotData) {
|
||||
hotListElement.innerHTML = '';
|
||||
|
||||
hotData.forEach((item, index) => {
|
||||
const hotItem = createHotItem(item, index + 1);
|
||||
hotListElement.appendChild(hotItem);
|
||||
});
|
||||
}
|
||||
|
||||
// 创建热搜项目
|
||||
function createHotItem(item, rank) {
|
||||
const hotItem = document.createElement('div');
|
||||
hotItem.className = 'hot-item';
|
||||
|
||||
const rankClass = rank <= 3 ? 'hot-rank top-3' : 'hot-rank';
|
||||
const formattedHotValue = formatHotValue(item.hot_value);
|
||||
const formattedTime = formatTime(item.event_time);
|
||||
|
||||
// 根据排名添加特殊标识
|
||||
let rankEmoji = '';
|
||||
if (rank === 1) rankEmoji = '🥇';
|
||||
else if (rank === 2) rankEmoji = '🥈';
|
||||
else if (rank === 3) rankEmoji = '🥉';
|
||||
else if (rank <= 10) rankEmoji = '🔥';
|
||||
else rankEmoji = '📈';
|
||||
|
||||
// 根据热度值添加火焰等级
|
||||
let fireLevel = '';
|
||||
if (item.hot_value >= 11000000) fireLevel = '🔥🔥🔥🔥🔥🔥🔥🔥🔥';
|
||||
else if (item.hot_value >= 1000000) fireLevel = '🔥🔥🔥🔥🔥🔥🔥🔥';
|
||||
else if (item.hot_value >= 9500000) fireLevel = '🔥🔥🔥🔥🔥🔥🔥';
|
||||
else if (item.hot_value >= 9000000) fireLevel = '🔥🔥🔥🔥🔥🔥';
|
||||
else if (item.hot_value >= 8000000) fireLevel = '🔥🔥🔥🔥🔥';
|
||||
else if (item.hot_value >= 7000000) fireLevel = '🔥🔥🔥🔥';
|
||||
else if (item.hot_value >= 6000000) fireLevel = '🔥🔥🔥';
|
||||
else if (item.hot_value >= 5000000) fireLevel = '🔥🔥';
|
||||
else fireLevel = '🔥';
|
||||
|
||||
hotItem.innerHTML = `
|
||||
<div class="hot-item-header">
|
||||
<div class="${rankClass}">${rank}</div>
|
||||
<div class="hot-title">${rankEmoji} ${escapeHtml(item.title)}</div>
|
||||
</div>
|
||||
<div class="hot-content">
|
||||
<img src="${item.cover}" alt="${escapeHtml(item.title)}" class="hot-cover" onerror="handleImageError(this)">
|
||||
<div class="hot-info">
|
||||
<div class="hot-value">${fireLevel} ${formattedHotValue}</div>
|
||||
<div class="hot-time"> ${formattedTime}</div>
|
||||
<a href="${item.link}" target="_blank" class="hot-link">
|
||||
查看详情
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
return hotItem;
|
||||
}
|
||||
|
||||
// 格式化热度值
|
||||
function formatHotValue(value) {
|
||||
if (value >= 100000000) {
|
||||
return (value / 100000000).toFixed(1) + '亿';
|
||||
} else if (value >= 10000) {
|
||||
return (value / 10000).toFixed(1) + '万';
|
||||
} else {
|
||||
return value.toLocaleString();
|
||||
}
|
||||
}
|
||||
|
||||
// 格式化时间
|
||||
function formatTime(timeStr) {
|
||||
try {
|
||||
const formattedTime = timeStr.replace(/\//g, '-');
|
||||
const date = new Date(formattedTime);
|
||||
const now = new Date();
|
||||
const diff = now - date;
|
||||
const minutes = Math.floor(diff / (1000 * 60));
|
||||
const hours = Math.floor(minutes / 60);
|
||||
const days = Math.floor(hours / 24);
|
||||
|
||||
if (days > 0) {
|
||||
return `${days}天前`;
|
||||
} else if (hours > 0) {
|
||||
return `${hours}小时前`;
|
||||
} else if (minutes > 0) {
|
||||
return `${minutes}分钟前`;
|
||||
} else {
|
||||
return '刚刚';
|
||||
}
|
||||
} catch (error) {
|
||||
return timeStr;
|
||||
}
|
||||
}
|
||||
|
||||
// HTML转义
|
||||
function escapeHtml(text) {
|
||||
const div = document.createElement('div');
|
||||
div.textContent = text;
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
// 图片加载错误处理
|
||||
function handleImageError(img) {
|
||||
img.src = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA4MCA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiBmaWxsPSIjZjVmNWY1Ii8+CjxwYXRoIGQ9Ik00MCAyMEM0NCAyMCA0NyAyMyA0NyAyN1Y1M0M0NyA1NyA0NCA2MCA0MCA2MEgxNkMxMiA2MCA5IDU3IDkgNTNWMjdDOSAyMyAxMiAyMCAxNiAyMEg0MFoiIHN0cm9rZT0iI2NjY2NjYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxjaXJjbGUgY3g9IjMzIiBjeT0iMzIiIHI9IjMiIGZpbGw9IiNjY2NjY2MiLz4KPHBhdGggZD0iTTEzIDQ4TDIzIDM4TDMzIDQ4TDQzIDM4TDUzIDQ4IiBzdHJva2U9IiNjY2NjY2MiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=';
|
||||
img.alt = '图片加载失败';
|
||||
}
|
||||
|
||||
// 更新刷新时间
|
||||
function updateRefreshTime() {
|
||||
const now = new Date();
|
||||
const timeStr = now.toLocaleString('zh-CN', {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit'
|
||||
});
|
||||
updateTimeElement.textContent = `最后更新: ${timeStr}`;
|
||||
|
||||
// 添加成功提示
|
||||
showSuccessMessage('🎉 数据已更新');
|
||||
}
|
||||
|
||||
// 显示成功消息
|
||||
function showSuccessMessage(message) {
|
||||
// 移除之前的提示
|
||||
const existingToast = document.querySelector('.success-toast');
|
||||
if (existingToast) {
|
||||
existingToast.remove();
|
||||
}
|
||||
|
||||
const toast = document.createElement('div');
|
||||
toast.className = 'success-toast';
|
||||
toast.textContent = message;
|
||||
toast.style.cssText = `
|
||||
position: fixed;
|
||||
top: 20px;
|
||||
right: 20px;
|
||||
background: linear-gradient(135deg, #4caf50, #66bb6a);
|
||||
color: white;
|
||||
padding: 12px 20px;
|
||||
border-radius: 25px;
|
||||
box-shadow: 0 4px 20px rgba(76, 175, 80, 0.3);
|
||||
z-index: 1000;
|
||||
font-weight: 600;
|
||||
font-size: 0.9em;
|
||||
animation: slideIn 0.3s ease-out;
|
||||
backdrop-filter: blur(10px);
|
||||
`;
|
||||
|
||||
document.body.appendChild(toast);
|
||||
|
||||
// 3秒后自动移除
|
||||
setTimeout(() => {
|
||||
toast.style.animation = 'slideOut 0.3s ease-in forwards';
|
||||
setTimeout(() => toast.remove(), 300);
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
// 添加CSS动画到页面
|
||||
if (!document.querySelector('#toast-styles')) {
|
||||
const style = document.createElement('style');
|
||||
style.id = 'toast-styles';
|
||||
style.textContent = `
|
||||
@keyframes slideIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateX(100px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slideOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: translateX(0);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateX(100px);
|
||||
}
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
// 显示加载状态
|
||||
function showLoading() {
|
||||
loadingElement.style.display = 'block';
|
||||
hotListElement.style.display = 'none';
|
||||
}
|
||||
|
||||
// 隐藏加载状态
|
||||
function hideLoading() {
|
||||
loadingElement.style.display = 'none';
|
||||
hotListElement.style.display = 'block';
|
||||
}
|
||||
|
||||
// 显示错误信息
|
||||
function showError() {
|
||||
errorMessageElement.style.display = 'block';
|
||||
hotListElement.style.display = 'none';
|
||||
}
|
||||
|
||||
// 隐藏错误信息
|
||||
function hideError() {
|
||||
errorMessageElement.style.display = 'none';
|
||||
}
|
||||
|
||||
// 自动刷新 (每5分钟)
|
||||
setInterval(function() {
|
||||
loadHotList();
|
||||
}, 5 * 60 * 1000);
|
||||
7
frontend/60sapi/热搜榜单/抖音热搜榜/接口集合.json
Normal file
7
frontend/60sapi/热搜榜单/抖音热搜榜/接口集合.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
]
|
||||
496
frontend/60sapi/热搜榜单/抖音热搜榜/返回接口.json
Normal file
496
frontend/60sapi/热搜榜单/抖音热搜榜/返回接口.json
Normal file
@@ -0,0 +1,496 @@
|
||||
{
|
||||
"code": 200,
|
||||
"message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
|
||||
"data": [
|
||||
{
|
||||
"title": "九三阅兵具体安排公布",
|
||||
"hot_value": 11821633,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oY1c972B7QzApGweaeQD3fGRo5aLIBrpCAuUSa~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=q01Se46GlLKYNv2klGKP1aM1cT0%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E4%B9%9D%E4%B8%89%E9%98%85%E5%85%B5%E5%85%B7%E4%BD%93%E5%AE%89%E6%8E%92%E5%85%AC%E5%B8%83",
|
||||
"event_time": "2025/09/01 15:20:34",
|
||||
"event_time_at": 1756711234,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "九月第一天",
|
||||
"hot_value": 11327170,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oofTvDaDRCSs4hBFEFVJlAI9BBs0faZAc7IpGf~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=otkowVCSglk%2BS3tPrmBQFq6rIDw%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E5%A4%A9",
|
||||
"event_time": "2025/09/01 07:28:57",
|
||||
"event_time_at": 1756682937,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "遇见上合共享津彩",
|
||||
"hot_value": 11222444,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/oIJeINhBDBAiHADD4gi9Ae0CGALg1BqWI7vg0i~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=K%2BaEx5p%2BDv%2B1h3RgNnH0Yb9WT%2B8%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E9%81%87%E8%A7%81%E4%B8%8A%E5%90%88%E5%85%B1%E4%BA%AB%E6%B4%A5%E5%BD%A9",
|
||||
"event_time": "2025/09/01 11:46:59",
|
||||
"event_time_at": 1756698419,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "2025年开学第一课铭记与奋斗",
|
||||
"hot_value": 11078403,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oA9NgVCRBABg7r70pQue8IzAUlfMaXf3hawOIB~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=3xYeXsD6JpXLDOVp6gYRxrvKFaM%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/2025%E5%B9%B4%E5%BC%80%E5%AD%A6%E7%AC%AC%E4%B8%80%E8%AF%BE%E9%93%AD%E8%AE%B0%E4%B8%8E%E5%A5%8B%E6%96%97",
|
||||
"event_time": "2025/09/01 11:21:13",
|
||||
"event_time_at": 1756696873,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "石宇奇首夺世锦赛男单冠军",
|
||||
"hot_value": 10395092,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/oAf9IAlEuyE3lFiogfBuQFl8gDFqAoAHtFDNkE~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=tamoorhMGYhajvpmVNdX0TuUuZM%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%9F%B3%E5%AE%87%E5%A5%87%E9%A6%96%E5%A4%BA%E4%B8%96%E9%94%A6%E8%B5%9B%E7%94%B7%E5%8D%95%E5%86%A0%E5%86%9B",
|
||||
"event_time": "2025/09/01 07:47:03",
|
||||
"event_time_at": 1756684023,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "告别信息裸奔 国家网络身份认证来了",
|
||||
"hot_value": 10255200,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oskNjrEUQIN9BBRCfeiDTGPE0geX0q6eAAyLr2~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=FrZQSxERPOBd6ktV8K%2Bt%2F3LgJ4A%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%91%8A%E5%88%AB%E4%BF%A1%E6%81%AF%E8%A3%B8%E5%A5%94%20%E5%9B%BD%E5%AE%B6%E7%BD%91%E7%BB%9C%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%9D%A5%E4%BA%86",
|
||||
"event_time": "2025/09/01 10:28:41",
|
||||
"event_time_at": 1756693721,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "记录我的开学第一天",
|
||||
"hot_value": 9133236,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015c000-ce/owTXhhk40MlJDQHi8P2B07AviaBqAL0VI9EQi~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=pTEfiV%2FfsmGuQxNllsV8PqT0RYc%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%AE%B0%E5%BD%95%E6%88%91%E7%9A%84%E5%BC%80%E5%AD%A6%E7%AC%AC%E4%B8%80%E5%A4%A9",
|
||||
"event_time": "2025/09/01 12:43:33",
|
||||
"event_time_at": 1756701813,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "9月起这些新规开始施行",
|
||||
"hot_value": 9105252,
|
||||
"cover": "https://p26-sign.douyinpic.com/tos-cn-p-0015/oEE9BseGagtA7JRBmzYA1aRMoCMAeIxfLFY5gA~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=YgH%2BJdVPmi76okIWTRoyEEZ3iDg%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/9%E6%9C%88%E8%B5%B7%E8%BF%99%E4%BA%9B%E6%96%B0%E8%A7%84%E5%BC%80%E5%A7%8B%E6%96%BD%E8%A1%8C",
|
||||
"event_time": "2025/09/01 11:48:01",
|
||||
"event_time_at": 1756698481,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "李幼斌与李云龙跨时空对话",
|
||||
"hot_value": 8998174,
|
||||
"cover": "https://p26-sign.douyinpic.com/tos-cn-p-0015/oAarINBoAgRIPi9VTEMIfHeA11nDtF7hRDuGcA~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=3x7yTXHYKiIcnNJjznvZjCw%2FW94%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E6%9D%8E%E5%B9%BC%E6%96%8C%E4%B8%8E%E6%9D%8E%E4%BA%91%E9%BE%99%E8%B7%A8%E6%97%B6%E7%A9%BA%E5%AF%B9%E8%AF%9D",
|
||||
"event_time": "2025/09/01 12:01:05",
|
||||
"event_time_at": 1756699265,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "幼儿园第一天开学哀嚎一片",
|
||||
"hot_value": 8962824,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/osbXMAQYgIwwpkDCfeiDpGaE0gb9MXfeAAuLV2~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=w1l8V4VvjuO%2BvOvuQkXiEuXYko0%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%B9%BC%E5%84%BF%E5%9B%AD%E7%AC%AC%E4%B8%80%E5%A4%A9%E5%BC%80%E5%AD%A6%E5%93%80%E5%9A%8E%E4%B8%80%E7%89%87",
|
||||
"event_time": "2025/09/01 11:05:01",
|
||||
"event_time_at": 1756695901,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "田汉把国歌歌词写烟盒上系谣传",
|
||||
"hot_value": 8930615,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-i-0813c001/ogA2AoCCXZMEAGF9f9QAlSACKRgfsC2oAFtIgD~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=7%2F8qsoQJd6TgpAEylOW1VyQrqeY%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%94%B0%E6%B1%89%E6%8A%8A%E5%9B%BD%E6%AD%8C%E6%AD%8C%E8%AF%8D%E5%86%99%E7%83%9F%E7%9B%92%E4%B8%8A%E7%B3%BB%E8%B0%A3%E4%BC%A0",
|
||||
"event_time": "2025/09/01 13:51:28",
|
||||
"event_time_at": 1756705888,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "苏超联赛积分榜",
|
||||
"hot_value": 8838219,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/o4vPLtWIQAaiggBRkQq5kw9ZlIVA0v1iDAILU~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=JJlPUPmWRzT3UPMenizW639pqVg%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%8B%8F%E8%B6%85%E8%81%94%E8%B5%9B%E7%A7%AF%E5%88%86%E6%A6%9C",
|
||||
"event_time": "2025/08/31 22:01:53",
|
||||
"event_time_at": 1756648913,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "一切正开始",
|
||||
"hot_value": 8609507,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015c000-ce/o8wN0EuXoETsyMz0ADCFFaAsFFTQeQf9fAublW~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=5I8uLkfpNYrGArQm%2BXLBa81NhYY%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E4%B8%80%E5%88%87%E6%AD%A3%E5%BC%80%E5%A7%8B",
|
||||
"event_time": "2025/09/01 11:56:50",
|
||||
"event_time_at": 1756699010,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "张玉宁为与球迷起冲突致歉",
|
||||
"hot_value": 8511631,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/oMfoIAFMN5GEWOzpBCDAQfaj7yRArCdByaEUfE~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=59ipMtNxZ8W3R5NNAJamlSOEbPo%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%BC%A0%E7%8E%89%E5%AE%81%E4%B8%BA%E4%B8%8E%E7%90%83%E8%BF%B7%E8%B5%B7%E5%86%B2%E7%AA%81%E8%87%B4%E6%AD%89",
|
||||
"event_time": "2025/09/01 07:53:39",
|
||||
"event_time_at": 1756684419,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "这一口会很疯狂",
|
||||
"hot_value": 8454971,
|
||||
"cover": "https://p26-sign.douyinpic.com/tos-cn-p-0015/oUIozRIBqC0ahA7FimIAmFEBeqDFfZK3Qfo8PE~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=ZBSuTMuu4678gSfReaVIfdK22J8%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%BF%99%E4%B8%80%E5%8F%A3%E4%BC%9A%E5%BE%88%E7%96%AF%E7%8B%82",
|
||||
"event_time": "2025/09/01 10:36:16",
|
||||
"event_time_at": 1756694176,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "邓超鹿晗合唱超级英雄",
|
||||
"hot_value": 8357197,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/oUBPIdtyQx0j8THRZAmZbyATihavQHI0niLIP~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=%2F66dsj8evHN94wNNFCn%2Bfhagee0%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E9%82%93%E8%B6%85%E9%B9%BF%E6%99%97%E5%90%88%E5%94%B1%E8%B6%85%E7%BA%A7%E8%8B%B1%E9%9B%84",
|
||||
"event_time": "2025/09/01 07:45:11",
|
||||
"event_time_at": 1756683911,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "伊萨克加盟利物浦",
|
||||
"hot_value": 7963081,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/ocAw2yaT4I99iDIPh9I3LaIiLBTnBASvH0Q1a~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=v4Gq0Iz87wyZ6lEYYOnKmaeur%2FM%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E4%BC%8A%E8%90%A8%E5%85%8B%E5%8A%A0%E7%9B%9F%E5%88%A9%E7%89%A9%E6%B5%A6",
|
||||
"event_time": "2025/09/01 09:12:12",
|
||||
"event_time_at": 1756689132,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "山东泰山6:0北京国安",
|
||||
"hot_value": 7830358,
|
||||
"cover": "https://p9-sign.douyinpic.com/tos-cn-p-0015/ogtA9BEEJZDJ9SgzBBLfFN0AflNDGoIAQ2I8A8~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=gu6O%2BhGDarr%2BHQe1P%2BHo9pUmBGU%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%B1%B1%E4%B8%9C%E6%B3%B0%E5%B1%B16%3A0%E5%8C%97%E4%BA%AC%E5%9B%BD%E5%AE%89",
|
||||
"event_time": "2025/08/31 20:32:53",
|
||||
"event_time_at": 1756643573,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "又到开学你包书皮了吗",
|
||||
"hot_value": 7828995,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oUAwaPjCIiLAQI6ADQMAm06TBJxPJFAkCpIIi~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=aUkYTtkfaUKbK2DhznXU69sg8SU%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%8F%88%E5%88%B0%E5%BC%80%E5%AD%A6%E4%BD%A0%E5%8C%85%E4%B9%A6%E7%9A%AE%E4%BA%86%E5%90%97",
|
||||
"event_time": "2025/08/31 17:04:09",
|
||||
"event_time_at": 1756631049,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "樊振东德甲首秀两连败",
|
||||
"hot_value": 7754365,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/osOdEdibznClYwP0AABAIZW1eg0gbBmAzjiJfl~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=AyWBGXt%2FFFSp0QBM%2Bd5%2F9B4GPvo%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E6%A8%8A%E6%8C%AF%E4%B8%9C%E5%BE%B7%E7%94%B2%E9%A6%96%E7%A7%80%E4%B8%A4%E8%BF%9E%E8%B4%A5",
|
||||
"event_time": "2025/09/01 07:16:58",
|
||||
"event_time_at": 1756682218,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "为什么说00后的童年含金量高",
|
||||
"hot_value": 7735122,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/ogOQEQsnAACDBICh7LeFWRGCjeZneIB9I3oVFy~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=Htnqu7SupC%2FmvQpF2DDsLDh5FYA%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%AF%B400%E5%90%8E%E7%9A%84%E7%AB%A5%E5%B9%B4%E5%90%AB%E9%87%91%E9%87%8F%E9%AB%98",
|
||||
"event_time": "2025/08/31 16:38:30",
|
||||
"event_time_at": 1756629510,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "刘宇千年直拍",
|
||||
"hot_value": 7734149,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015c000-ce/ostjBSmQ78E8estIXgFlHQxZQALRFfMepbTJWC~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=CPNw9h%2BpBB82qBykpuT11uMVFjo%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%88%98%E5%AE%87%E5%8D%83%E5%B9%B4%E7%9B%B4%E6%8B%8D",
|
||||
"event_time": "2025/08/31 21:39:38",
|
||||
"event_time_at": 1756647578,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "胡塞武装称将对以军袭击发起报复",
|
||||
"hot_value": 7728698,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oseWgjCRBAfgft7c3QUm8JGApnYMaWdJdGj0SB~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=fX6AvTWQvNrihcvEraPHjJIS9iY%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%83%A1%E5%A1%9E%E6%AD%A6%E8%A3%85%E7%A7%B0%E5%B0%86%E5%AF%B9%E4%BB%A5%E5%86%9B%E8%A2%AD%E5%87%BB%E5%8F%91%E8%B5%B7%E6%8A%A5%E5%A4%8D",
|
||||
"event_time": "2025/09/01 09:40:13",
|
||||
"event_time_at": 1756690813,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "手把手教你手机变车机",
|
||||
"hot_value": 7725104,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/o47qAXUjDQN6KLr9AjFSCq92ZBf4okAQEfgSAp~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=OoNNciUVTOwZbl17IUYBOjFyBJ4%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E6%89%8B%E6%9C%BA%E5%8F%98%E8%BD%A6%E6%9C%BA",
|
||||
"event_time": "2025/09/01 11:15:15",
|
||||
"event_time_at": 1756696515,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "莫迪与普京拥抱手拉手热聊",
|
||||
"hot_value": 7723445,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oIaWAojVPLRUILGIyvvg1Sd1ZiLAKiCB6zQIX~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=u1IGnKz%2FAckLe%2BYFCQulFw0ioB8%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%8E%AB%E8%BF%AA%E4%B8%8E%E6%99%AE%E4%BA%AC%E6%8B%A5%E6%8A%B1%E6%89%8B%E6%8B%89%E6%89%8B%E7%83%AD%E8%81%8A",
|
||||
"event_time": "2025/09/01 15:38:27",
|
||||
"event_time_at": 1756712307,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "原来猪猪侠搞抽象领先我20年",
|
||||
"hot_value": 7706786,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oINGyAfS2oFpfAgF2kYxEJAqTbSeEcgotfxeHv~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=S1Ve0ORP5%2BrHumx%2FK7uJbfm8PbM%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%8E%9F%E6%9D%A5%E7%8C%AA%E7%8C%AA%E4%BE%A0%E6%90%9E%E6%8A%BD%E8%B1%A1%E9%A2%86%E5%85%88%E6%88%9120%E5%B9%B4",
|
||||
"event_time": "2025/09/01 10:52:59",
|
||||
"event_time_at": 1756695179,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "北京国安就惨败道歉",
|
||||
"hot_value": 7702358,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oYiXICjfn7uEi3AeK6W04BiXu3iBjigAAs9W0B~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=hgh%2Bfy4Ul82LWgXAL2hkIBMEpJM%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%8C%97%E4%BA%AC%E5%9B%BD%E5%AE%89%E5%B0%B1%E6%83%A8%E8%B4%A5%E9%81%93%E6%AD%89",
|
||||
"event_time": "2025/09/01 09:21:10",
|
||||
"event_time_at": 1756689670,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "港姐冠军陈咏诗是博士生",
|
||||
"hot_value": 7702059,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/okoRaMGvQBCI6KmVeBAAQ1eLEg1HK2foQuM7aB~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=5Lattu1v38oeQ8xGdXiDLcK4fwM%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E6%B8%AF%E5%A7%90%E5%86%A0%E5%86%9B%E9%99%88%E5%92%8F%E8%AF%97%E6%98%AF%E5%8D%9A%E5%A3%AB%E7%94%9F",
|
||||
"event_time": "2025/09/01 10:47:23",
|
||||
"event_time_at": 1756694843,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "王楚钦2:3徐瑛彬",
|
||||
"hot_value": 7699514,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/o00BTIi1ogMR8LBAiQdLmSaIPAuEyIQv1IP48~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=2%2BI5KkQpEugBkQcVCrSLgOtC088%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%8E%8B%E6%A5%9A%E9%92%A62%3A3%E5%BE%90%E7%91%9B%E5%BD%AC",
|
||||
"event_time": "2025/08/31 21:21:08",
|
||||
"event_time_at": 1756646468,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "王源 高音",
|
||||
"hot_value": 7693290,
|
||||
"cover": "https://p26-sign.douyinpic.com/tos-cn-p-0015/oYzDIaQiavwPRBUpanIkjAIWzwLCIgPkAyiOj~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=uXVN6xfkB3tz3iVo0DQuxqeaGk0%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%8E%8B%E6%BA%90%20%E9%AB%98%E9%9F%B3",
|
||||
"event_time": "2025/08/31 20:30:04",
|
||||
"event_time_at": 1756643404,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "俄乌在苏贾前线展开阵地争夺",
|
||||
"hot_value": 7691808,
|
||||
"cover": "https://p9-sign.douyinpic.com/tos-cn-p-0015/oo7iATIG8vA5hIIQBILB4oCgvygsUNzBS1aPi~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=SNzQbbxAJqqtdIkck9kvtRUJnZg%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E4%BF%84%E4%B9%8C%E5%9C%A8%E8%8B%8F%E8%B4%BE%E5%89%8D%E7%BA%BF%E5%B1%95%E5%BC%80%E9%98%B5%E5%9C%B0%E4%BA%89%E5%A4%BA",
|
||||
"event_time": "2025/09/01 12:56:05",
|
||||
"event_time_at": 1756702565,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "范丞丞温柔版一个人的夜变装",
|
||||
"hot_value": 7689433,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oAPLWIAoR3CsXgVBuIQIRiTDyS14gaLPwELAi~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=yp9l95J9xlKf55IEP14P7sD7J%2F4%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%8C%83%E4%B8%9E%E4%B8%9E%E6%B8%A9%E6%9F%94%E7%89%88%E4%B8%80%E4%B8%AA%E4%BA%BA%E7%9A%84%E5%A4%9C%E5%8F%98%E8%A3%85",
|
||||
"event_time": "2025/09/01 15:32:00",
|
||||
"event_time_at": 1756711920,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "用美食致敬这场胜利",
|
||||
"hot_value": 7681826,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/oIFcUfHotAXxALhJEj2EK9SBNp0fQwKhAbCgQD~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=Dkuyg5REqCAMEIsp0Dr%2B%2BkAO%2BmQ%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%94%A8%E7%BE%8E%E9%A3%9F%E8%87%B4%E6%95%AC%E8%BF%99%E5%9C%BA%E8%83%9C%E5%88%A9",
|
||||
"event_time": "2025/09/01 12:08:24",
|
||||
"event_time_at": 1756699704,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "田曦薇猫猫本体藏不住了",
|
||||
"hot_value": 7674729,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015c000-ce/oceyeLnbxAXFERxnPfLR2egAkYaXeRpHfhAQME~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=omEVZta%2FQeV%2FSBRNZ3%2BJF0iMXPQ%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%94%B0%E6%9B%A6%E8%96%87%E7%8C%AB%E7%8C%AB%E6%9C%AC%E4%BD%93%E8%97%8F%E4%B8%8D%E4%BD%8F%E4%BA%86",
|
||||
"event_time": "2025/09/01 14:33:25",
|
||||
"event_time_at": 1756708405,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "少年心气是不可再生之物",
|
||||
"hot_value": 7673518,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-i-0813c001/oAUJIWFyAFCmtGpmAADAQis69JogkCFAA0Eqff~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=YHeldSJZXPEBMLF2i%2Bj%2Fc60oKsQ%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%B0%91%E5%B9%B4%E5%BF%83%E6%B0%94%E6%98%AF%E4%B8%8D%E5%8F%AF%E5%86%8D%E7%94%9F%E4%B9%8B%E7%89%A9",
|
||||
"event_time": "2025/09/01 07:54:31",
|
||||
"event_time_at": 1756684471,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "南通2:1战胜苏州",
|
||||
"hot_value": 7670255,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/o4WAaBigTGBaeBgrqm5Kir0Af6DGO0IAF6IQPA~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=uV2f%2FvbzU4Y9DfhXxnPBc3hOAxY%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%8D%97%E9%80%9A2%3A1%E6%88%98%E8%83%9C%E8%8B%8F%E5%B7%9E",
|
||||
"event_time": "2025/08/31 18:02:42",
|
||||
"event_time_at": 1756634562,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "起猛了差点以为入冬了",
|
||||
"hot_value": 7669368,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015c000-ce/ogA5HPw1xiIwS2szhaBPMZvC1P0LAPPQAigEZ~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=UQNTgz2vyL2UMvzVj2gzBmPbM2A%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%B5%B7%E7%8C%9B%E4%BA%86%E5%B7%AE%E7%82%B9%E4%BB%A5%E4%B8%BA%E5%85%A5%E5%86%AC%E4%BA%86",
|
||||
"event_time": "2025/09/01 14:23:50",
|
||||
"event_time_at": 1756707830,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "终于轮到我围观军训了",
|
||||
"hot_value": 7655201,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015c000-ce/oobwIeLUf4O7iiazJOGAQLZO7DRgCDCBLhI2ez~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=WQn5PvdzvIerbF%2B1iNjF3b6itqQ%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%BB%88%E4%BA%8E%E8%BD%AE%E5%88%B0%E6%88%91%E5%9B%B4%E8%A7%82%E5%86%9B%E8%AE%AD%E4%BA%86",
|
||||
"event_time": "2025/08/31 13:09:34",
|
||||
"event_time_at": 1756616974,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "金铲铲陪伴是李现最长情的告白",
|
||||
"hot_value": 7653496,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015c000-ce/oYPAKIM2vpBnPULXOmBbAEac6KzbOhSiILiLP~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=rsA7DcONzMySFGRNa4PMk6ftyBk%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E9%87%91%E9%93%B2%E9%93%B2%E9%99%AA%E4%BC%B4%E6%98%AF%E6%9D%8E%E7%8E%B0%E6%9C%80%E9%95%BF%E6%83%85%E7%9A%84%E5%91%8A%E7%99%BD",
|
||||
"event_time": "2025/08/31 22:58:48",
|
||||
"event_time_at": 1756652328,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "张予曦妈妈不介意女儿谈姐弟恋",
|
||||
"hot_value": 7650811,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/oEB5A1NsLFeadA9HQoED9TfmQ8jHgUPxACzjw9~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=KF3nedfpt5iPcUZ%2Fv9SyYI0ZSWg%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%BC%A0%E4%BA%88%E6%9B%A6%E5%A6%88%E5%A6%88%E4%B8%8D%E4%BB%8B%E6%84%8F%E5%A5%B3%E5%84%BF%E8%B0%88%E5%A7%90%E5%BC%9F%E6%81%8B",
|
||||
"event_time": "2025/08/31 17:44:23",
|
||||
"event_time_at": 1756633463,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "边伯贤也来刀马刀马了",
|
||||
"hot_value": 7650164,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/ogfBltLZDIGmRGCAseKAeaIBRnQH79gBGOb4kC~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=nLrGTCoyqEGU882IYRhJOStMdpg%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%BE%B9%E4%BC%AF%E8%B4%A4%E4%B9%9F%E6%9D%A5%E5%88%80%E9%A9%AC%E5%88%80%E9%A9%AC%E4%BA%86",
|
||||
"event_time": "2025/08/31 13:44:44",
|
||||
"event_time_at": 1756619084,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "金靖演绎甜美女孩",
|
||||
"hot_value": 7649913,
|
||||
"cover": "https://p11-sign.douyinpic.com/tos-cn-p-0015/o0cBcsRQjiGGFCOOArGzzeIfLBA7FEYojeKwGQ~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=9BY7gGsW39uBcs06t%2BrXTCQ5J5k%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E9%87%91%E9%9D%96%E6%BC%94%E7%BB%8E%E7%94%9C%E7%BE%8E%E5%A5%B3%E5%AD%A9",
|
||||
"event_time": "2025/08/31 19:00:32",
|
||||
"event_time_at": 1756638032,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "一口气看日本如何造出反华体制",
|
||||
"hot_value": 7648850,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oUoyIxcAADE55goYWdhBfFF4HACpRIpy9Xse6K~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=xjjRJGl0AzxkaEnOiVrzRx1hoZ8%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E4%B8%80%E5%8F%A3%E6%B0%94%E7%9C%8B%E6%97%A5%E6%9C%AC%E5%A6%82%E4%BD%95%E9%80%A0%E5%87%BA%E5%8F%8D%E5%8D%8E%E4%BD%93%E5%88%B6",
|
||||
"event_time": "2025/08/30 21:50:31",
|
||||
"event_time_at": 1756561831,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "张艺兴真空西装跳狼与美女",
|
||||
"hot_value": 7646868,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015c000-ce/o4YKfLEIEEwo5stfDSFe0s2TFRjxXAAZDCE9Bl~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=gqBuLvszd8eew81uXP8rf7idtog%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%BC%A0%E8%89%BA%E5%85%B4%E7%9C%9F%E7%A9%BA%E8%A5%BF%E8%A3%85%E8%B7%B3%E7%8B%BC%E4%B8%8E%E7%BE%8E%E5%A5%B3",
|
||||
"event_time": "2025/08/31 22:12:44",
|
||||
"event_time_at": 1756649564,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "罗永浩对谈脱口秀新王何广智",
|
||||
"hot_value": 7644688,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/okQ0qo1AKBQP3g981qQA1FEAzGDYjtFFdfYVeD~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=Mg24ss6tlv%2FY%2B%2B9PS5UdijEG1Dw%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E7%BD%97%E6%B0%B8%E6%B5%A9%E5%AF%B9%E8%B0%88%E8%84%B1%E5%8F%A3%E7%A7%80%E6%96%B0%E7%8E%8B%E4%BD%95%E5%B9%BF%E6%99%BA",
|
||||
"event_time": "2025/09/01 13:56:14",
|
||||
"event_time_at": 1756706174,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "周深的刀马刀马好可爱",
|
||||
"hot_value": 7644052,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/osAPL0laAbWHtEmVBUIKMQDypItTiF3HI0PQi~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=qcK3K8uko38iBuRXDg4uCTaqEPc%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%91%A8%E6%B7%B1%E7%9A%84%E5%88%80%E9%A9%AC%E5%88%80%E9%A9%AC%E5%A5%BD%E5%8F%AF%E7%88%B1",
|
||||
"event_time": "2025/08/31 18:31:56",
|
||||
"event_time_at": 1756636316,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "杜克一哥的对话太好哭了",
|
||||
"hot_value": 7639907,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oofoeQ9VAPDsphKEAiFQbQwCAEwoQgBpLtBC0A~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=wulyNlwPrSoIJu1JKBdKpE142mA%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E6%9D%9C%E5%85%8B%E4%B8%80%E5%93%A5%E7%9A%84%E5%AF%B9%E8%AF%9D%E5%A4%AA%E5%A5%BD%E5%93%AD%E4%BA%86",
|
||||
"event_time": "2025/08/30 21:17:58",
|
||||
"event_time_at": 1756559878,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "外媒全景记录普京抵华现场",
|
||||
"hot_value": 7637541,
|
||||
"cover": "https://p3-sign.douyinpic.com/tos-cn-p-0015/oIGC9LxDIQ6QAI1fG1eEipfA2eZjiGInCHFFEJ~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=HiKj%2FiLGiaN2D5GdS5OlAISbGHo%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E5%A4%96%E5%AA%92%E5%85%A8%E6%99%AF%E8%AE%B0%E5%BD%95%E6%99%AE%E4%BA%AC%E6%8A%B5%E5%8D%8E%E7%8E%B0%E5%9C%BA",
|
||||
"event_time": "2025/09/01 11:59:34",
|
||||
"event_time_at": 1756699174,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
},
|
||||
{
|
||||
"title": "赵丽颖工作室明兰代班营业",
|
||||
"hot_value": 7635755,
|
||||
"cover": "https://p26-sign.douyinpic.com/tos-cn-p-0015c000-ce/oIhHELPBeI6Ieb0A9OpCuWXh0CAAgiuniEweIw~noop.jpeg?lk3s=bfd515bb&x-expires=1756735200&x-signature=xmQOeLdWN4FaeZjFBqtMQuctYv8%3D&from=3218412987",
|
||||
"link": "https://www.douyin.com/search/%E8%B5%B5%E4%B8%BD%E9%A2%96%E5%B7%A5%E4%BD%9C%E5%AE%A4%E6%98%8E%E5%85%B0%E4%BB%A3%E7%8F%AD%E8%90%A5%E4%B8%9A",
|
||||
"event_time": "2025/08/31 20:52:34",
|
||||
"event_time_at": 1756644754,
|
||||
"active_time": "2025-09-01 16:46:46",
|
||||
"active_time_at": 1756745206000
|
||||
}
|
||||
]
|
||||
}
|
||||
495
frontend/60sapi/热搜榜单/猫眼票房排行榜/css/style.css
Normal file
495
frontend/60sapi/热搜榜单/猫眼票房排行榜/css/style.css
Normal file
@@ -0,0 +1,495 @@
|
||||
/* 猫眼票房排行榜 - 淡绿色清新风格样式 */
|
||||
|
||||
/* 重置样式 */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
background: linear-gradient(135deg, #a8e6cf 0%, #dcedc1 50%, #ffd3a5 100%);
|
||||
min-height: 100vh;
|
||||
color: #2d5016;
|
||||
line-height: 1.6;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* 头部样式 */
|
||||
.header {
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 20px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 8px 25px rgba(45, 80, 22, 0.08);
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 2.5rem;
|
||||
color: #2d5016;
|
||||
margin-bottom: 10px;
|
||||
font-weight: 700;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.header p {
|
||||
color: #5a7c65;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
/* 加载状态 */
|
||||
.loading {
|
||||
text-align: center;
|
||||
padding: 40px;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 5px 20px rgba(45, 80, 22, 0.08);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border: 4px solid #e8f5e8;
|
||||
border-top: 4px solid #81c784;
|
||||
border-radius: 50%;
|
||||
animation: spin 1s linear infinite;
|
||||
margin: 0 auto 20px;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
/* 票房排行榜容器 */
|
||||
.ranking-container {
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 20px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 8px 25px rgba(45, 80, 22, 0.08);
|
||||
backdrop-filter: blur(10px);
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
/* 排行榜标题 */
|
||||
.ranking-title {
|
||||
text-align: center;
|
||||
font-size: 1.8rem;
|
||||
font-weight: 700;
|
||||
color: #2d5016;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
/* 票房排行榜列表 */
|
||||
.movie-list {
|
||||
display: grid;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
/* 电影项目 */
|
||||
.movie-item {
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
border-radius: 15px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 4px 15px rgba(45, 80, 22, 0.05);
|
||||
transition: all 0.3s ease;
|
||||
border-left: 5px solid transparent;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.movie-item:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(45, 80, 22, 0.12);
|
||||
}
|
||||
|
||||
/* 前三名特殊样式 */
|
||||
.movie-item.top-1 {
|
||||
border-left-color: #ffd700;
|
||||
background: linear-gradient(135deg, rgba(255, 215, 0, 0.1) 0%, rgba(255, 255, 255, 0.9) 100%);
|
||||
}
|
||||
|
||||
.movie-item.top-2 {
|
||||
border-left-color: #c0c0c0;
|
||||
background: linear-gradient(135deg, rgba(192, 192, 192, 0.1) 0%, rgba(255, 255, 255, 0.9) 100%);
|
||||
}
|
||||
|
||||
.movie-item.top-3 {
|
||||
border-left-color: #cd7f32;
|
||||
background: linear-gradient(135deg, rgba(205, 127, 50, 0.1) 0%, rgba(255, 255, 255, 0.9) 100%);
|
||||
}
|
||||
|
||||
/* 排名徽章 */
|
||||
.rank-badge {
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
right: -10px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: bold;
|
||||
font-size: 1.2rem;
|
||||
color: white;
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.rank-badge.gold {
|
||||
background: linear-gradient(135deg, #ffd700, #ffed4a);
|
||||
}
|
||||
|
||||
.rank-badge.silver {
|
||||
background: linear-gradient(135deg, #c0c0c0, #e2e8f0);
|
||||
}
|
||||
|
||||
.rank-badge.bronze {
|
||||
background: linear-gradient(135deg, #cd7f32, #d69e2e);
|
||||
}
|
||||
|
||||
.rank-badge.regular {
|
||||
background: linear-gradient(135deg, #81c784, #66bb6a);
|
||||
}
|
||||
|
||||
/* 电影信息布局 */
|
||||
.movie-info {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr auto;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.rank-number {
|
||||
font-size: 2rem;
|
||||
font-weight: bold;
|
||||
color: #2d5016;
|
||||
min-width: 60px;
|
||||
}
|
||||
|
||||
.movie-details {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.movie-name {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 700;
|
||||
color: #2d5016;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.movie-year {
|
||||
color: #5a7c65;
|
||||
font-size: 0.95rem;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.box-office {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.box-office-amount {
|
||||
font-size: 1.4rem;
|
||||
font-weight: bold;
|
||||
color: #1b5e20;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.box-office-desc {
|
||||
color: #5a7c65;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* 统计信息 */
|
||||
.stats-container {
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 15px;
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
box-shadow: 0 5px 20px rgba(45, 80, 22, 0.08);
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
gap: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
background: rgba(129, 199, 132, 0.1);
|
||||
border-radius: 10px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 1.5rem;
|
||||
font-weight: bold;
|
||||
color: #2d5016;
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
color: #5a7c65;
|
||||
font-size: 0.9rem;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
/* 更新时间 */
|
||||
.update-time {
|
||||
text-align: center;
|
||||
color: #5a7c65;
|
||||
font-size: 0.9rem;
|
||||
margin-top: 20px;
|
||||
padding: 15px;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/* 错误提示 */
|
||||
.error {
|
||||
text-align: center;
|
||||
padding: 40px;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 5px 20px rgba(45, 80, 22, 0.08);
|
||||
}
|
||||
|
||||
.error h3 {
|
||||
color: #d32f2f;
|
||||
margin-bottom: 15px;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.error p {
|
||||
color: #5a7c65;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* 动画效果 */
|
||||
.fade-in {
|
||||
animation: fadeIn 0.6s ease-in-out;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 平板端适配 (768px - 1024px) */
|
||||
@media screen and (max-width: 1024px) and (min-width: 768px) {
|
||||
.container {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
.ranking-container {
|
||||
padding: 25px;
|
||||
}
|
||||
|
||||
.movie-info {
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.rank-number {
|
||||
font-size: 1.8rem;
|
||||
min-width: 50px;
|
||||
}
|
||||
|
||||
.movie-name {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.box-office-amount {
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 手机端适配 (最大767px) - 优先优化 */
|
||||
@media screen and (max-width: 767px) {
|
||||
.container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 1.8rem;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.header p {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.ranking-container {
|
||||
padding: 20px 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.ranking-title {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.movie-item {
|
||||
padding: 15px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.movie-info {
|
||||
grid-template-columns: 50px 1fr;
|
||||
grid-template-rows: auto auto;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.rank-number {
|
||||
font-size: 1.5rem;
|
||||
min-width: 40px;
|
||||
grid-row: 1 / 3;
|
||||
}
|
||||
|
||||
.movie-details {
|
||||
grid-column: 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
.box-office {
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
text-align: left;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.movie-name {
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.movie-year {
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.box-office-amount {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.box-office-desc {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.rank-badge {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
font-size: 1rem;
|
||||
top: -8px;
|
||||
right: -8px;
|
||||
}
|
||||
|
||||
.stats-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
.update-time {
|
||||
padding: 12px;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 小屏手机适配 (最大480px) */
|
||||
@media screen and (max-width: 480px) {
|
||||
.container {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
.ranking-container {
|
||||
padding: 15px 10px;
|
||||
}
|
||||
|
||||
.movie-item {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.movie-name {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.box-office-amount {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.rank-number {
|
||||
font-size: 1.3rem;
|
||||
min-width: 35px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 高分辨率显示器优化 */
|
||||
@media screen and (min-width: 1440px) {
|
||||
.container {
|
||||
max-width: 1400px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
.movie-list {
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.movie-item {
|
||||
padding: 25px;
|
||||
}
|
||||
|
||||
.movie-name {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.box-office-amount {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
40
frontend/60sapi/热搜榜单/猫眼票房排行榜/index.html
Normal file
40
frontend/60sapi/热搜榜单/猫眼票房排行榜/index.html
Normal file
@@ -0,0 +1,40 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="猫眼票房排行榜 - 展示全球电影总票房排行榜">
|
||||
<meta name="keywords" content="猫眼, 票房, 排行榜, 电影票房, 全球票房">
|
||||
<title>猫眼票房排行榜 | 全球电影总票房</title>
|
||||
|
||||
<!-- 引入CSS样式 -->
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
|
||||
<!-- 网站图标(SVG内联为data URL,避免外部依赖) -->
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🎬</text></svg>">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<!-- 页面头部 -->
|
||||
<header class="header">
|
||||
<h1>
|
||||
<span>🎬</span>
|
||||
猫眼票房排行榜(时更)
|
||||
</h1>
|
||||
<p>展示全球电影总票房排行榜,数据来自权威源头,稳定实时</p>
|
||||
</header>
|
||||
|
||||
<!-- 加载状态 -->
|
||||
<div id="loading" class="loading">
|
||||
<div class="spinner"></div>
|
||||
<p>正在加载票房数据...</p>
|
||||
</div>
|
||||
|
||||
<!-- 内容区域 -->
|
||||
<main id="ranking-content" class="content" style="display: none;"></main>
|
||||
</div>
|
||||
|
||||
<!-- 引入JavaScript -->
|
||||
<script src="js/script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
249
frontend/60sapi/热搜榜单/猫眼票房排行榜/js/script.js
Normal file
249
frontend/60sapi/热搜榜单/猫眼票房排行榜/js/script.js
Normal file
@@ -0,0 +1,249 @@
|
||||
// 猫眼票房排行榜 - JavaScript 实现
|
||||
|
||||
const API = {
|
||||
endpoints: [],
|
||||
currentIndex: 0,
|
||||
params: {
|
||||
encoding: 'json'
|
||||
},
|
||||
localFallback: '返回接口.json',
|
||||
// 初始化API接口列表
|
||||
async init() {
|
||||
try {
|
||||
const res = await fetch('./接口集合.json');
|
||||
const endpoints = await res.json();
|
||||
this.endpoints = endpoints.map(endpoint => `${endpoint}/v2/maoyan`);
|
||||
} catch (e) {
|
||||
// 如果无法加载接口集合,使用默认接口
|
||||
this.endpoints = ['https://60s.viki.moe/v2/maoyan'];
|
||||
}
|
||||
},
|
||||
// 获取当前接口URL
|
||||
getCurrentUrl() {
|
||||
if (this.endpoints.length === 0) return null;
|
||||
const url = new URL(this.endpoints[this.currentIndex]);
|
||||
Object.entries(this.params).forEach(([k, v]) => url.searchParams.append(k, v));
|
||||
return url.toString();
|
||||
},
|
||||
// 切换到下一个接口
|
||||
switchToNext() {
|
||||
this.currentIndex = (this.currentIndex + 1) % this.endpoints.length;
|
||||
return this.currentIndex < this.endpoints.length;
|
||||
},
|
||||
// 重置到第一个接口
|
||||
reset() {
|
||||
this.currentIndex = 0;
|
||||
}
|
||||
};
|
||||
|
||||
let elements = {};
|
||||
|
||||
// 初始化
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
initElements();
|
||||
loadMaoyanList();
|
||||
});
|
||||
|
||||
function initElements() {
|
||||
elements = {
|
||||
container: document.getElementById('ranking-content'),
|
||||
loading: document.getElementById('loading'),
|
||||
updateTime: document.getElementById('api-update-time'),
|
||||
statsTotal: document.getElementById('stats-total'),
|
||||
statsTop10: document.getElementById('stats-top10')
|
||||
};
|
||||
}
|
||||
|
||||
async function loadMaoyanList() {
|
||||
try {
|
||||
showLoading(true);
|
||||
|
||||
// 优先从线上API请求
|
||||
let data = await fetchFromAPI();
|
||||
|
||||
// 如果线上失败,尝试从本地返回接口.json加载
|
||||
if (!data) {
|
||||
data = await fetchFromLocal();
|
||||
}
|
||||
|
||||
if (!data || data.code !== 200 || !data.data) {
|
||||
throw new Error(data && data.message ? data.message : '未能获取到有效数据');
|
||||
}
|
||||
|
||||
renderRanking(data.data);
|
||||
} catch (error) {
|
||||
console.error('加载排行榜失败:', error);
|
||||
showError(error.message || '加载失败,请稍后重试');
|
||||
} finally {
|
||||
showLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchFromAPI() {
|
||||
// 初始化API接口列表
|
||||
await API.init();
|
||||
|
||||
// 重置API索引到第一个接口
|
||||
API.reset();
|
||||
|
||||
// 尝试所有API接口
|
||||
for (let i = 0; i < API.endpoints.length; i++) {
|
||||
try {
|
||||
const url = API.getCurrentUrl();
|
||||
console.log(`尝试接口 ${i + 1}/${API.endpoints.length}: ${url}`);
|
||||
|
||||
const resp = await fetch(url, {
|
||||
cache: 'no-store',
|
||||
timeout: 10000 // 10秒超时
|
||||
});
|
||||
|
||||
if (!resp.ok) {
|
||||
throw new Error(`HTTP ${resp.status}: ${resp.statusText}`);
|
||||
}
|
||||
|
||||
const data = await resp.json();
|
||||
|
||||
if (data && data.code === 200) {
|
||||
console.log(`接口 ${i + 1} 请求成功`);
|
||||
return data;
|
||||
}
|
||||
|
||||
throw new Error(data && data.message ? data.message : '接口返回异常');
|
||||
|
||||
} catch (e) {
|
||||
console.warn(`接口 ${i + 1} 失败:`, e.message);
|
||||
|
||||
// 如果不是最后一个接口,切换到下一个
|
||||
if (i < API.endpoints.length - 1) {
|
||||
API.switchToNext();
|
||||
continue;
|
||||
}
|
||||
|
||||
// 所有接口都失败了
|
||||
console.warn('所有远程接口都失败,尝试本地数据');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchFromLocal() {
|
||||
try {
|
||||
const resp = await fetch(API.localFallback + `?t=${Date.now()}`);
|
||||
if (!resp.ok) throw new Error(`本地文件HTTP ${resp.status}`);
|
||||
const data = await resp.json();
|
||||
return data;
|
||||
} catch (e) {
|
||||
console.error('读取本地返回接口.json失败:', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function renderRanking(payload) {
|
||||
const { list = [], tip = '', update_time = '', update_time_at } = payload || {};
|
||||
|
||||
// 更新时间
|
||||
if (elements.updateTime) {
|
||||
elements.updateTime.textContent = update_time ? `更新时间:${update_time}` : '';
|
||||
}
|
||||
|
||||
// 统计信息
|
||||
if (elements.statsTotal) {
|
||||
elements.statsTotal.textContent = list.length;
|
||||
}
|
||||
if (elements.statsTop10) {
|
||||
elements.statsTop10.textContent = Math.min(10, list.length);
|
||||
}
|
||||
|
||||
// 渲染列表
|
||||
const html = `
|
||||
<section class="stats-container">
|
||||
<div class="stats-grid">
|
||||
<div class="stat-item">
|
||||
<div class="stat-value" id="stats-total">${list.length}</div>
|
||||
<div class="stat-label">入榜影片数量</div>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<div class="stat-value" id="stats-top10">${Math.min(10, list.length)}</div>
|
||||
<div class="stat-label">TOP10 数量</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="ranking-container">
|
||||
<h2 class="ranking-title">全球电影总票房排行榜</h2>
|
||||
<div class="movie-list">
|
||||
${list.map(item => renderMovieItem(item)).join('')}
|
||||
</div>
|
||||
</section>
|
||||
${tip ? `<div class="update-time">${escapeHtml(tip)}</div>` : ''}
|
||||
${update_time ? `<div class="update-time" id="api-update-time">更新时间:${escapeHtml(update_time)}</div>` : ''}
|
||||
`;
|
||||
|
||||
elements.container.innerHTML = html;
|
||||
elements.container.classList.add('fade-in');
|
||||
}
|
||||
|
||||
function renderMovieItem(item) {
|
||||
const rank = item.rank;
|
||||
const cls = rank === 1 ? 'top-1' : rank === 2 ? 'top-2' : rank === 3 ? 'top-3' : '';
|
||||
const badgeCls = rank === 1 ? 'gold' : rank === 2 ? 'silver' : rank === 3 ? 'bronze' : 'regular';
|
||||
|
||||
return `
|
||||
<div class="movie-item ${cls}">
|
||||
<div class="rank-badge ${badgeCls}">${rank}</div>
|
||||
<div class="movie-info">
|
||||
<div class="rank-number">#${rank}</div>
|
||||
<div class="movie-details">
|
||||
<div class="movie-name">${escapeHtml(item.movie_name)}</div>
|
||||
<div class="movie-year">上映年份:${escapeHtml(item.release_year || '')}</div>
|
||||
</div>
|
||||
<div class="box-office">
|
||||
<div class="box-office-amount">${formatCurrencyDesc(item.box_office_desc, item.box_office)}</div>
|
||||
<div class="box-office-desc">总票房</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
function formatCurrencyDesc(desc, num) {
|
||||
if (desc && typeof desc === 'string' && desc.trim()) return desc;
|
||||
if (typeof num === 'number') {
|
||||
// 人民币按亿元显示
|
||||
if (num >= 1e8) return (num / 1e8).toFixed(2) + '亿元';
|
||||
if (num >= 1e4) return (num / 1e4).toFixed(2) + '万元';
|
||||
return num.toLocaleString('zh-CN') + '元';
|
||||
}
|
||||
return '—';
|
||||
}
|
||||
|
||||
function showLoading(show) {
|
||||
if (elements.loading) elements.loading.style.display = show ? 'block' : 'none';
|
||||
if (elements.container) elements.container.style.display = show ? 'none' : 'block';
|
||||
}
|
||||
|
||||
function showError(message) {
|
||||
if (!elements.container) return;
|
||||
elements.container.innerHTML = `
|
||||
<div class="error">
|
||||
<h3>⚠️ 加载失败</h3>
|
||||
<p>${escapeHtml(message)}</p>
|
||||
<p>请稍后重试</p>
|
||||
</div>
|
||||
`;
|
||||
elements.container.style.display = 'block';
|
||||
}
|
||||
|
||||
function escapeHtml(text) {
|
||||
if (text == null) return '';
|
||||
const div = document.createElement('div');
|
||||
div.textContent = String(text);
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
// 键盘刷新快捷键 Ctrl/Cmd + R 刷新数据区域(不刷新整页)
|
||||
window.addEventListener('keydown', (e) => {
|
||||
if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'r') {
|
||||
e.preventDefault();
|
||||
loadMaoyanList();
|
||||
}
|
||||
});
|
||||
7
frontend/60sapi/热搜榜单/猫眼票房排行榜/接口集合.json
Normal file
7
frontend/60sapi/热搜榜单/猫眼票房排行榜/接口集合.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
]
|
||||
171
frontend/60sapi/热搜榜单/猫眼票房排行榜/返回接口.json
Normal file
171
frontend/60sapi/热搜榜单/猫眼票房排行榜/返回接口.json
Normal file
@@ -0,0 +1,171 @@
|
||||
{
|
||||
"code": 200,
|
||||
"message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
|
||||
"data": {
|
||||
"list": [
|
||||
{
|
||||
"rank": 1,
|
||||
"maoyan_id": 243,
|
||||
"movie_name": "阿凡达",
|
||||
"release_year": "2009",
|
||||
"box_office": 21200972239,
|
||||
"box_office_desc": "212.01亿元"
|
||||
},
|
||||
{
|
||||
"rank": 2,
|
||||
"maoyan_id": 248172,
|
||||
"movie_name": "复仇者联盟 4:终局之战",
|
||||
"release_year": "2019",
|
||||
"box_office": 20299852689,
|
||||
"box_office_desc": "203亿元"
|
||||
},
|
||||
{
|
||||
"rank": 3,
|
||||
"maoyan_id": 78461,
|
||||
"movie_name": "阿凡达:水之道",
|
||||
"release_year": "2022",
|
||||
"box_office": 16825062887,
|
||||
"box_office_desc": "168.25亿元"
|
||||
},
|
||||
{
|
||||
"rank": 4,
|
||||
"maoyan_id": 267,
|
||||
"movie_name": "泰坦尼克号",
|
||||
"release_year": "1997",
|
||||
"box_office": 16423064756,
|
||||
"box_office_desc": "164.23亿元"
|
||||
},
|
||||
{
|
||||
"rank": 5,
|
||||
"maoyan_id": 1294273,
|
||||
"movie_name": "哪吒之魔童闹海",
|
||||
"release_year": "2025",
|
||||
"box_office": 15908714214,
|
||||
"box_office_desc": "159.09亿元"
|
||||
},
|
||||
{
|
||||
"rank": 6,
|
||||
"maoyan_id": 78536,
|
||||
"movie_name": "星球大战:原力觉醒",
|
||||
"release_year": "2015",
|
||||
"box_office": 15019898914,
|
||||
"box_office_desc": "150.2亿元"
|
||||
},
|
||||
{
|
||||
"rank": 7,
|
||||
"maoyan_id": 248170,
|
||||
"movie_name": "复仇者联盟 3:无限战争",
|
||||
"release_year": "2018",
|
||||
"box_office": 14882882413,
|
||||
"box_office_desc": "148.83亿元"
|
||||
},
|
||||
{
|
||||
"rank": 8,
|
||||
"maoyan_id": 1254435,
|
||||
"movie_name": "蜘蛛侠:英雄无归",
|
||||
"release_year": "2021",
|
||||
"box_office": 14160042137,
|
||||
"box_office_desc": "141.6亿元"
|
||||
},
|
||||
{
|
||||
"rank": 9,
|
||||
"maoyan_id": 1479534,
|
||||
"movie_name": "头脑特工队 2",
|
||||
"release_year": "2024",
|
||||
"box_office": 12319141075,
|
||||
"box_office_desc": "123.19亿元"
|
||||
},
|
||||
{
|
||||
"rank": 10,
|
||||
"maoyan_id": 78602,
|
||||
"movie_name": "侏罗纪世界",
|
||||
"release_year": "2015",
|
||||
"box_office": 12120986621,
|
||||
"box_office_desc": "121.21亿元"
|
||||
},
|
||||
{
|
||||
"rank": 11,
|
||||
"maoyan_id": 1189879,
|
||||
"movie_name": "狮子王",
|
||||
"release_year": "2019",
|
||||
"box_office": 12051977766,
|
||||
"box_office_desc": "120.52亿元"
|
||||
},
|
||||
{
|
||||
"rank": 12,
|
||||
"maoyan_id": 262,
|
||||
"movie_name": "复仇者联盟",
|
||||
"release_year": "2012",
|
||||
"box_office": 11026033139,
|
||||
"box_office_desc": "110.26亿元"
|
||||
},
|
||||
{
|
||||
"rank": 13,
|
||||
"maoyan_id": 78405,
|
||||
"movie_name": "速度与激情 7",
|
||||
"release_year": "2015",
|
||||
"box_office": 10988354292,
|
||||
"box_office_desc": "109.88亿元"
|
||||
},
|
||||
{
|
||||
"rank": 14,
|
||||
"maoyan_id": 341152,
|
||||
"movie_name": "壮志凌云 2:独行侠",
|
||||
"release_year": "2022",
|
||||
"box_office": 10845892091,
|
||||
"box_office_desc": "108.46亿元"
|
||||
},
|
||||
{
|
||||
"rank": 15,
|
||||
"maoyan_id": 247949,
|
||||
"movie_name": "冰雪奇缘 2",
|
||||
"release_year": "2019",
|
||||
"box_office": 10541240357,
|
||||
"box_office_desc": "105.41亿元"
|
||||
},
|
||||
{
|
||||
"rank": 16,
|
||||
"maoyan_id": 344942,
|
||||
"movie_name": "芭比",
|
||||
"release_year": "2023",
|
||||
"box_office": 10493054406,
|
||||
"box_office_desc": "104.93亿元"
|
||||
},
|
||||
{
|
||||
"rank": 17,
|
||||
"maoyan_id": 78429,
|
||||
"movie_name": "复仇者联盟 2:奥创纪元",
|
||||
"release_year": "2015",
|
||||
"box_office": 10188347873,
|
||||
"box_office_desc": "101.88亿元"
|
||||
},
|
||||
{
|
||||
"rank": 18,
|
||||
"maoyan_id": 1250896,
|
||||
"movie_name": "超级马里奥兄弟大电影",
|
||||
"release_year": "2023",
|
||||
"box_office": 9868050757,
|
||||
"box_office_desc": "98.68亿元"
|
||||
},
|
||||
{
|
||||
"rank": 19,
|
||||
"maoyan_id": 341138,
|
||||
"movie_name": "黑豹",
|
||||
"release_year": "2018",
|
||||
"box_office": 9788853998,
|
||||
"box_office_desc": "97.89亿元"
|
||||
},
|
||||
{
|
||||
"rank": 20,
|
||||
"maoyan_id": 916,
|
||||
"movie_name": "哈利・波特与死亡圣器(下)",
|
||||
"release_year": "2011",
|
||||
"box_office": 9735002643,
|
||||
"box_office_desc": "97.35亿元"
|
||||
}
|
||||
],
|
||||
"tip": "注:内地票房数据实时更新,包括点映及预售票房。港澳台及海外票房为统计数据,每小时更新。汇率采用 2025年1月31日市场汇率,1美元≈7.2514人民币",
|
||||
"update_time": "2025/08/19 14:41:34",
|
||||
"update_time_at": 1755585694385
|
||||
}
|
||||
}
|
||||
7
frontend/60sapi/热搜榜单/网易云榜单列表/接口集合.json
Normal file
7
frontend/60sapi/热搜榜单/网易云榜单列表/接口集合.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
]
|
||||
750
frontend/60sapi/热搜榜单/网易云榜单列表/返回接口.json
Normal file
750
frontend/60sapi/热搜榜单/网易云榜单列表/返回接口.json
Normal file
@@ -0,0 +1,750 @@
|
||||
{
|
||||
"code": 200,
|
||||
"message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
|
||||
"data": [
|
||||
{
|
||||
"id": 19723756,
|
||||
"name": "飙升榜",
|
||||
"description": "云音乐中每天热度上升最快的100首单曲,每日更新。",
|
||||
"cover": "https://p1.music.126.net/rIi7Qzy2i2Y_1QD7cd0MYA==/109951170048506929.jpg",
|
||||
"update_frequency": "每天更新",
|
||||
"updated": "2025-08-27 01:24:43",
|
||||
"updated_at": 1756257883349,
|
||||
"created": "2014-06-30 07:58:56",
|
||||
"created_at": 1404115136883,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=19723756"
|
||||
},
|
||||
{
|
||||
"id": 3779629,
|
||||
"name": "新歌榜",
|
||||
"description": "云音乐新歌榜:云音乐用户一周内收听所有新歌(一月内最新发行) 官方TOP排行榜,每天更新。",
|
||||
"cover": "https://p1.music.126.net/5guhqPBTcIrrhLBotgaT6w==/109951170048511751.jpg",
|
||||
"update_frequency": "每天更新",
|
||||
"updated": "2025-08-27 00:56:52",
|
||||
"updated_at": 1756256212440,
|
||||
"created": "2013-09-09 10:09:58",
|
||||
"created_at": 1378721398225,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=3779629"
|
||||
},
|
||||
{
|
||||
"id": 2884035,
|
||||
"name": "原创榜",
|
||||
"description": "云音乐独立原创音乐人作品官方榜单,以推荐优秀原创作品为目的。每周四网易云音乐首发。申请网易音乐人:http://music.163.com/nmusician/",
|
||||
"cover": "https://p1.music.126.net/BaP9nrocNTL3gGThysv4eQ==/109951170091896587.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 02:53:19",
|
||||
"updated_at": 1755744799157,
|
||||
"created": "2013-07-25 06:05:25",
|
||||
"created_at": 1374732325894,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=2884035"
|
||||
},
|
||||
{
|
||||
"id": 3778678,
|
||||
"name": "热歌榜",
|
||||
"description": "云音乐热歌榜:云音乐用户一周内收听所有线上歌曲官方TOP排行榜,每日更新。",
|
||||
"cover": "https://p1.music.126.net/0SUEG8yDACfx0Bw2MYFv4Q==/109951170048519512.jpg",
|
||||
"update_frequency": "每天更新",
|
||||
"updated": "2025-08-27 00:57:07",
|
||||
"updated_at": 1756256227510,
|
||||
"created": "2013-09-09 10:10:06",
|
||||
"created_at": 1378721406014,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=3778678"
|
||||
},
|
||||
{
|
||||
"id": 991319590,
|
||||
"name": "网易云中文说唱榜",
|
||||
"description": "网易云原创说唱音乐人作品官方榜单,每周五更新。以网易云用户一周播放热度为主,收录2个月内发行的原创说唱作品,按照综合数据排名取前50名。申请网易音乐人:http://music.163.com/nmusician",
|
||||
"cover": "https://p1.music.126.net/GgHbgDfGXHpE2YTchU7IvA==/109951171510498108.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 02:45:48",
|
||||
"updated_at": 1755830748504,
|
||||
"created": "2017-11-10 05:06:29",
|
||||
"created_at": 1510290389440,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=991319590"
|
||||
},
|
||||
{
|
||||
"id": 71384707,
|
||||
"name": "网易云古典榜",
|
||||
"description": "网易云用户一周内收听所有古典音乐官方TOP排行榜,每周四更新。",
|
||||
"cover": "https://p1.music.126.net/urByD_AmfBDBrs7fA9-O8A==/109951167976973225.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 02:59:09",
|
||||
"updated_at": 1755745149157,
|
||||
"created": "2015-05-07 03:22:00",
|
||||
"created_at": 1430968920537,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=71384707"
|
||||
},
|
||||
{
|
||||
"id": 1978921795,
|
||||
"name": "网易云电音榜",
|
||||
"description": "网易云用户一周内收听电子音乐官方TOP排行榜,每周五更新。喜力星电音,用先锋电音带你解锁全新维度和体验!",
|
||||
"cover": "https://p1.music.126.net/hXGObvXfsGtFjFvRhOYAkA==/109951170091888741.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 09:07:49",
|
||||
"updated_at": 1755853669156,
|
||||
"created": "2017-11-16 09:47:12",
|
||||
"created_at": 1510825632233,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=1978921795"
|
||||
},
|
||||
{
|
||||
"id": 14028249541,
|
||||
"name": "网易云全球说唱榜",
|
||||
"description": "想聆听世界的说唱节奏?全球说唱榜每周五更新,聚焦华语地区以外的优秀说唱作品。根据云音乐用户每周播放热度数据,按照综合数据排名取前 50 名。",
|
||||
"cover": "https://p1.music.126.net/0hhFjP6WyIjHYDXKW5E7BA==/109951171535150782.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 01:58:14",
|
||||
"updated_at": 1755827894399,
|
||||
"created": "2025-07-24 06:09:26",
|
||||
"created_at": 1753337366883,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=14028249541"
|
||||
},
|
||||
{
|
||||
"id": 13372522766,
|
||||
"name": "潮流风向榜",
|
||||
"description": "精心挑选云音乐极具声量的音乐作品,呈现歌曲真实热度趋势,榜单每日更新。",
|
||||
"cover": "https://p1.music.126.net/dIKA5e7jCncz2Br1Toxgaw==/109951170621574552.jpg",
|
||||
"update_frequency": "更新74首",
|
||||
"updated": "2025-08-27 04:05:55",
|
||||
"updated_at": 1756267555368,
|
||||
"created": "2025-02-26 06:01:33",
|
||||
"created_at": 1740549693794,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=13372522766"
|
||||
},
|
||||
{
|
||||
"id": 12911403728,
|
||||
"name": "音乐合伙人推荐榜",
|
||||
"description": "音乐合伙人近一个月内推荐过的歌曲官方TOP排行榜,每周一更新。 跟随音乐合伙人的步伐,一起发现那些隐藏的音乐瑰宝。",
|
||||
"cover": "https://p1.music.126.net/s6ITpmGjKbyDpi7DPkqd2w==/109951170187827373.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 04:06:02",
|
||||
"updated_at": 1756094762192,
|
||||
"created": "2024-11-25 07:14:30",
|
||||
"created_at": 1732518870190,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12911403728"
|
||||
},
|
||||
{
|
||||
"id": 12911589513,
|
||||
"name": "音乐合伙人热歌榜",
|
||||
"description": "音乐合伙人近一周评定过的高分热歌官方TOP排行榜,每周一更新。 跟随音乐合伙人的步伐,一起发现那些隐藏的音乐瑰宝。",
|
||||
"cover": "https://p1.music.126.net/RgYxQmB-ZUjkMRo2N1jWnQ==/109951170187823494.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 04:05:58",
|
||||
"updated_at": 1756094758751,
|
||||
"created": "2024-11-25 07:13:46",
|
||||
"created_at": 1732518826543,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12911589513"
|
||||
},
|
||||
{
|
||||
"id": 12911619970,
|
||||
"name": "音乐合伙人留名榜",
|
||||
"description": "音乐合伙人近一个月内留名过的所有歌曲官方TOP排行榜,每周一更新。 跟随音乐合伙人的步伐,一起发现那些隐藏的音乐瑰宝。",
|
||||
"cover": "https://p1.music.126.net/aJJzGIxhkVaD7dX0XBNUnw==/109951170187831145.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 04:05:45",
|
||||
"updated_at": 1756094745722,
|
||||
"created": "2024-11-25 07:12:50",
|
||||
"created_at": 1732518770868,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12911619970"
|
||||
},
|
||||
{
|
||||
"id": 12911379734,
|
||||
"name": "音乐合伙人高分新歌榜",
|
||||
"description": "音乐合伙人近期评定过的所有新歌(一个月内最新发行)官方TOP排行榜,每周一更新。 跟随音乐合伙人的步伐,一起发现那些隐藏的音乐瑰宝。",
|
||||
"cover": "https://p1.music.126.net/bfk15bvanhdPFU7yjPFgWA==/109951170187832038.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 04:05:50",
|
||||
"updated_at": 1756094750117,
|
||||
"created": "2024-11-25 07:11:53",
|
||||
"created_at": 1732518713161,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12911379734"
|
||||
},
|
||||
{
|
||||
"id": 12768855486,
|
||||
"name": "音乐合伙人高分榜",
|
||||
"description": "音乐合伙人的高分歌曲官方榜单,收录近半年来获得音乐合伙人高分推荐的TOP100首歌曲,每日更新。跟随音乐合伙人的步伐,一起发现那些隐藏的音乐瑰宝。",
|
||||
"cover": "https://p1.music.126.net/fPP5T0Z8Ac15qNvRTcHa6g==/109951170074028970.jpg",
|
||||
"update_frequency": "更新27首",
|
||||
"updated": "2025-08-27 04:05:47",
|
||||
"updated_at": 1756267547739,
|
||||
"created": "2024-10-25 03:51:10",
|
||||
"created_at": 1729828270342,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12768855486"
|
||||
},
|
||||
{
|
||||
"id": 5453912201,
|
||||
"name": "黑胶VIP爱听榜",
|
||||
"description": "云音乐站内会员播放热度TOP100的歌曲,每周四更新。\n黑胶们都爱听什么歌曲?\n热门好歌一站式收听,让你念念不忘~\n做尊贵黑胶,畅听品味好歌~",
|
||||
"cover": "https://p1.music.126.net/qo6-o9n5AhMjNyejev38-A==/109951169743111905.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 10:05:01",
|
||||
"updated_at": 1755770701110,
|
||||
"created": "2021-01-08 06:30:24",
|
||||
"created_at": 1610087424470,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=5453912201"
|
||||
},
|
||||
{
|
||||
"id": 71385702,
|
||||
"name": "网易云ACG榜",
|
||||
"description": "网易云用户一周内收听所有ACG音乐官方TOP排行榜,每周四更新。",
|
||||
"cover": "https://p1.music.126.net/na1kEeCS1iZEkzOrs9r_9g==/109951167976973667.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 04:05:02",
|
||||
"updated_at": 1755749102516,
|
||||
"created": "2015-05-07 03:22:15",
|
||||
"created_at": 1430968935040,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=71385702"
|
||||
},
|
||||
{
|
||||
"id": 745956260,
|
||||
"name": "网易云韩语榜",
|
||||
"description": "网易云用户一周内收听所有韩语歌曲官方TOP排行榜,每周四更新。",
|
||||
"cover": "https://p1.music.126.net/5oN9YaFznwNGXkmi8i2Ytw==/109951167430864741.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 04:05:01",
|
||||
"updated_at": 1755749101352,
|
||||
"created": "2017-05-31 03:34:51",
|
||||
"created_at": 1496201691281,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=745956260"
|
||||
},
|
||||
{
|
||||
"id": 180106,
|
||||
"name": "UK排行榜周榜",
|
||||
"description": "UK排行榜",
|
||||
"cover": "https://p1.music.126.net/fhAqiflLy3eU-ldmBQByrg==/109951165613082765.jpg",
|
||||
"update_frequency": "每天更新",
|
||||
"updated": "2025-08-25 03:59:06",
|
||||
"updated_at": 1756094346206,
|
||||
"created": "2013-02-19 02:09:26",
|
||||
"created_at": 1361239766844,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=180106"
|
||||
},
|
||||
{
|
||||
"id": 60198,
|
||||
"name": "美国Billboard榜",
|
||||
"description": "美国Billboard排行榜",
|
||||
"cover": "https://p1.music.126.net/rwRsVIJHQ68gglhA6TNEYA==/109951165611413732.jpg",
|
||||
"update_frequency": "刚刚更新",
|
||||
"updated": "2025-08-27 03:38:38",
|
||||
"updated_at": 1756265918370,
|
||||
"created": "2013-01-22 02:51:16",
|
||||
"created_at": 1358823076818,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=60198"
|
||||
},
|
||||
{
|
||||
"id": 3812895,
|
||||
"name": "Beatport全球电子舞曲榜",
|
||||
"description": "Beatport全球电子舞曲排行榜TOP100(本榜每周三更新)",
|
||||
"cover": "https://p1.music.126.net/oT-RHuPBJiD7WMoU7WG5Rw==/109951166093489621.jpg",
|
||||
"update_frequency": "更新20首",
|
||||
"updated": "2025-08-27 02:29:37",
|
||||
"updated_at": 1756261777726,
|
||||
"created": "2013-09-11 08:03:09",
|
||||
"created_at": 1378886589466,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=3812895"
|
||||
},
|
||||
{
|
||||
"id": 21845217,
|
||||
"name": "KTV唛榜",
|
||||
"description": "KTV唛榜是目前国内首个以全国超过200家KTV点歌平台真实数据的当红歌曲榜单。所涉及的KTV店铺覆盖全国近100多个城市,囊括一、二、三线各级城市及地区。在综合全国各地KTV点唱数据的前提下进行汇总与统计。为了保证信息的及时性,唛榜每周五更新。提供给K迷们最新和最准确的数据。",
|
||||
"cover": "https://p1.music.126.net/5wDP78s43ydVTKt62C8OjQ==/109951165613100063.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2021-11-26 09:56:43",
|
||||
"updated_at": 1637920603975,
|
||||
"created": "2014-07-18 03:11:33",
|
||||
"created_at": 1405653093230,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=21845217"
|
||||
},
|
||||
{
|
||||
"id": 60131,
|
||||
"name": "日本Oricon榜",
|
||||
"description": "日本Oricon数字单曲周榜,每周三更新,欢迎关注。",
|
||||
"cover": "https://p1.music.126.net/aXUPgImt8hhf4cMUZEjP4g==/109951165611417794.jpg",
|
||||
"update_frequency": "每天更新",
|
||||
"updated": "2025-08-22 02:15:24",
|
||||
"updated_at": 1755828924438,
|
||||
"created": "2013-01-08 08:51:24",
|
||||
"created_at": 1357635084874,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=60131"
|
||||
},
|
||||
{
|
||||
"id": 2809513713,
|
||||
"name": "网易云欧美热歌榜",
|
||||
"description": "网易云用户一周内收听所有欧美歌曲官方TOP排行榜,每周四更新。\nWestern Hit Chart (updated every Thursday)",
|
||||
"cover": "https://p1.music.126.net/70_EO_Dc7NT_hhfvsapzcQ==/109951167430862162.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 15:44:14",
|
||||
"updated_at": 1755791054932,
|
||||
"created": "2019-05-22 02:49:33",
|
||||
"created_at": 1558493373769,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=2809513713"
|
||||
},
|
||||
{
|
||||
"id": 2809577409,
|
||||
"name": "网易云欧美新歌榜",
|
||||
"description": "网易云用户一周内收听所有欧美新歌(一月内最新发行)官方TOP排行榜,每天更新。\nWestern New Release Chart (new songs released in last 30 days, updated daily)\n",
|
||||
"cover": "https://p1.music.126.net/0lPWpI9Ejn1OiW2LSbg-qw==/109951167430863224.jpg",
|
||||
"update_frequency": "更新17首",
|
||||
"updated": "2025-08-27 07:16:02",
|
||||
"updated_at": 1756278962152,
|
||||
"created": "2019-05-22 02:46:54",
|
||||
"created_at": 1558493214795,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=2809577409"
|
||||
},
|
||||
{
|
||||
"id": 27135204,
|
||||
"name": "法国 NRJ Vos Hits 周榜",
|
||||
"description": "法国NRJ电台(national Radio de Jeunes)成立于1981年,总部位于法国巴黎。是法国最受欢迎的音乐电台和听众最多的广播电台之一。NRJ音乐奖素有法国的“格莱美”之称。此榜单针对NRJ电台法国本土热门歌曲排行。【每周五更新】",
|
||||
"cover": "https://p1.music.126.net/-fyzrPWd06FfWl_0JDAxMQ==/109951165613108584.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 02:15:42",
|
||||
"updated_at": 1755828942531,
|
||||
"created": "2014-09-04 10:03:33",
|
||||
"created_at": 1409825013948,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=27135204"
|
||||
},
|
||||
{
|
||||
"id": 3001835560,
|
||||
"name": "网易云ACG动画榜",
|
||||
"description": "网易云中每天热度上升最快的100首ACG动画单曲,每日更新。",
|
||||
"cover": "https://p1.music.126.net/SkGlKQ6acixthb77VlD9eQ==/109951164432300406.jpg",
|
||||
"update_frequency": "更新84首",
|
||||
"updated": "2025-08-27 04:05:09",
|
||||
"updated_at": 1756267509031,
|
||||
"created": "2019-09-27 02:03:58",
|
||||
"created_at": 1569549838610,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=3001835560"
|
||||
},
|
||||
{
|
||||
"id": 3001795926,
|
||||
"name": "网易云ACG游戏榜",
|
||||
"description": "网易云中每天热度上升最快的100首ACG游戏单曲,每日更新。",
|
||||
"cover": "https://p1.music.126.net/hivOOHMwEmnn9s_6rgZwEQ==/109951164432303700.jpg",
|
||||
"update_frequency": "更新87首",
|
||||
"updated": "2025-08-27 04:05:18",
|
||||
"updated_at": 1756267518248,
|
||||
"created": "2019-09-27 02:04:56",
|
||||
"created_at": 1569549896656,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=3001795926"
|
||||
},
|
||||
{
|
||||
"id": 3001890046,
|
||||
"name": "网易云ACG VOCALOID榜",
|
||||
"description": "",
|
||||
"cover": "https://p1.music.126.net/Ag7RyRCYiINcd9EtRXf6xA==/109951164432303690.jpg",
|
||||
"update_frequency": "更新87首",
|
||||
"updated": "2025-08-27 04:05:27",
|
||||
"updated_at": 1756267527413,
|
||||
"created": "2019-09-27 02:05:25",
|
||||
"created_at": 1569549925472,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=3001890046"
|
||||
},
|
||||
{
|
||||
"id": 5059644681,
|
||||
"name": "网易云日语榜",
|
||||
"description": "网易云用户一周内收听所有日语歌曲官方TOP排行榜,每周二更新。",
|
||||
"cover": "https://p1.music.126.net/YFBFNI2F-4BveUpv6FKFuw==/109951167430864069.jpg",
|
||||
"update_frequency": "每周二更新",
|
||||
"updated": "2025-08-26 06:05:02",
|
||||
"updated_at": 1756188302867,
|
||||
"created": "2020-06-11 08:10:00",
|
||||
"created_at": 1591863000459,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=5059644681"
|
||||
},
|
||||
{
|
||||
"id": 5059633707,
|
||||
"name": "网易云摇滚榜",
|
||||
"description": "网易云用户一周内收听所有摇滚歌曲官方TOP排行榜,每周五更新。",
|
||||
"cover": "https://p1.music.126.net/LjkX2hktgFD1NXc3W6w0sA==/109951170048522513.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 09:12:43",
|
||||
"updated_at": 1755853963904,
|
||||
"created": "2020-06-11 08:13:33",
|
||||
"created_at": 1591863213389,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=5059633707"
|
||||
},
|
||||
{
|
||||
"id": 5059642708,
|
||||
"name": "网易云国风榜",
|
||||
"description": "网易云用户一周内收听所有国风歌曲官方TOP排行榜,每周五更新。",
|
||||
"cover": "https://p1.music.126.net/kTJC5OBhg8I477X_ZmXyDQ==/109951168539740982.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 03:10:57",
|
||||
"updated_at": 1755832257607,
|
||||
"created": "2020-06-11 08:14:18",
|
||||
"created_at": 1591863258438,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=5059642708"
|
||||
},
|
||||
{
|
||||
"id": 5338990334,
|
||||
"name": "潜力爆款榜",
|
||||
"description": "全民一起PICK潜力好歌,每周二更新",
|
||||
"cover": "https://p1.music.126.net/Mi4QPklg1mtbWAfq74tEqQ==/109951165498334721.jpg",
|
||||
"update_frequency": "每周二更新",
|
||||
"updated": "2025-08-26 04:05:32",
|
||||
"updated_at": 1756181132964,
|
||||
"created": "2020-11-17 06:24:34",
|
||||
"created_at": 1605594274077,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=5338990334"
|
||||
},
|
||||
{
|
||||
"id": 5059661515,
|
||||
"name": "网易云民谣榜",
|
||||
"description": "网易云用户一周内收听所有民谣歌曲官方TOP排行榜,每周五更新。",
|
||||
"cover": "https://p1.music.126.net/Xe9qLTAqtBAWX_hPgFHMyw==/109951170048510929.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 08:39:36",
|
||||
"updated_at": 1755851976839,
|
||||
"created": "2020-06-11 08:10:52",
|
||||
"created_at": 1591863052757,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=5059661515"
|
||||
},
|
||||
{
|
||||
"id": 6688069460,
|
||||
"name": "听歌识曲榜",
|
||||
"description": "网易云音乐站内歌曲按用户“听歌识曲”次数排列,每周四更新",
|
||||
"cover": "https://p1.music.126.net/wJVUAiUuykKk7yGbQxDBug==/109951167430857712.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 15:35:02",
|
||||
"updated_at": 1755790502462,
|
||||
"created": "2021-03-31 08:45:54",
|
||||
"created_at": 1617180354803,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=6688069460"
|
||||
},
|
||||
{
|
||||
"id": 6723173524,
|
||||
"name": "网络热歌榜",
|
||||
"description": "网罗一周热门网络歌曲,反映云音乐用户近一周网络热歌收听趋势。每周五更新。",
|
||||
"cover": "https://p1.music.126.net/_kSxOPqQ5J5etC5DKTFwNA==/109951170048519530.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 01:59:18",
|
||||
"updated_at": 1755827958008,
|
||||
"created": "2021-04-22 02:41:46",
|
||||
"created_at": 1619059306654,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=6723173524"
|
||||
},
|
||||
{
|
||||
"id": 6732051320,
|
||||
"name": "俄语榜",
|
||||
"description": "网易云音乐用户一周内收听所有俄罗斯语歌曲官方TOP排行榜,每周四更新。",
|
||||
"cover": "https://p1.music.126.net/HbJ0BK5doY4I4pEMY6-FQw==/109951167430852698.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 04:05:27",
|
||||
"updated_at": 1755749127585,
|
||||
"created": "2021-04-28 04:05:12",
|
||||
"created_at": 1619582712108,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=6732051320"
|
||||
},
|
||||
{
|
||||
"id": 6732014811,
|
||||
"name": "越南语榜",
|
||||
"description": "网易云音乐用户一周内收听所有越南语歌曲官方TOP排行榜,每周四更新。",
|
||||
"cover": "https://p1.music.126.net/N-Y5maLGWgrowt3TE6RtSg==/109951167430857045.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 04:05:28",
|
||||
"updated_at": 1755749128002,
|
||||
"created": "2021-04-28 04:05:49",
|
||||
"created_at": 1619582749349,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=6732014811"
|
||||
},
|
||||
{
|
||||
"id": 6886768100,
|
||||
"name": "中文慢摇DJ榜",
|
||||
"description": "搜索“DJ”,进入慢摇DJ专区,探索更多网络热歌!",
|
||||
"cover": "https://p1.music.126.net/w_01BfDU012ojxnzLO6tYw==/109951167977358686.jpg",
|
||||
"update_frequency": "刚刚更新",
|
||||
"updated": "2025-08-27 04:00:00",
|
||||
"updated_at": 1756267200565,
|
||||
"created": "2021-07-28 10:09:59",
|
||||
"created_at": 1627466999260,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=6886768100"
|
||||
},
|
||||
{
|
||||
"id": 6939992364,
|
||||
"name": "俄罗斯top hit流行音乐榜",
|
||||
"description": "top hit榜根据俄罗斯及全球400多个无线广播的音乐播放量和YouTube播放量计算得来,每周一更新。",
|
||||
"cover": "https://p1.music.126.net/KLVO8PxVZzOoLdWQQNyprA==/109951166327316568.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 06:10:23",
|
||||
"updated_at": 1755843023964,
|
||||
"created": "2021-08-27 03:30:02",
|
||||
"created_at": 1630035002268,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=6939992364"
|
||||
},
|
||||
{
|
||||
"id": 7095271308,
|
||||
"name": "泰语榜",
|
||||
"description": "网易云音乐用户一周内收听所有泰语歌曲官方TOP排行榜,每周四更新。",
|
||||
"cover": "https://p1.music.126.net/4W0WBHBgwYlYfRniuyL47A==/109951167430843284.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 02:26:07",
|
||||
"updated_at": 1755743167588,
|
||||
"created": "2021-11-29 06:22:17",
|
||||
"created_at": 1638166937809,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7095271308"
|
||||
},
|
||||
{
|
||||
"id": 7356827205,
|
||||
"name": "BEAT排行榜",
|
||||
"description": "嘿~朋友,欢迎来到本周的Beat排行榜\n我们挑选了近一周内热门的Beat作品,一起来感受下大家近期的“口味”吧!\n每周都会更新哦,记得按下收藏,我每天都会在这里等你来与我交流!~\n\n关于Beat的必备小知识\nQ1.什么是Beat?\nBeat即节拍,特指嘻哈音乐中的伴奏,现在也可指所有流行音乐的伴奏\nQ2.Beat有什么用?\n在Beat的帮助下,你只需要填词演唱即可完成一首歌曲的创作,而且Beat也可以作为各种流媒体的背景音乐或是多场景现场演出的得力助手,不同风格的Beat还能为你的音乐创作提供灵感哦~\n搜索关注“BEATSOUL激灵”网易云官号,探索更多炸裂音乐内容~",
|
||||
"cover": "https://p1.music.126.net/yhzlQJCJ9NcT4MvJBG_HgQ==/109951167977014958.jpg",
|
||||
"update_frequency": "每周四更新",
|
||||
"updated": "2025-08-21 12:05:01",
|
||||
"updated_at": 1755777901037,
|
||||
"created": "2022-03-29 11:39:58",
|
||||
"created_at": 1648553998273,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7356827205"
|
||||
},
|
||||
{
|
||||
"id": 7325478166,
|
||||
"name": "星云榜VOL.29 Addison Rae新专来袭,寻找最真实的自己",
|
||||
"description": "精心评审,专业推荐。每周五更新,为你呈现宝藏新歌。\n1、《Aquamarinee》歌手:Addison Rae\n2、《羽毛剑》歌手:秦凡淇\n3、《Take me back》歌手:HAIM\n4、《妈妈的眼睛》歌手:张震岳\n5、《25岁永不停下》歌手:张醒婵\n6、《雨季症候》歌手:SHARK卫彬月\n7、《山东王FREESTYLE》歌手:华云龙KLE\n8、《LOVE I NEED》歌手:陈瑜Estelle\n9、《FFFFF》歌手:刘柏辛Lexie\n10、《Vipaśyanā》歌手:Namunong\n本期封面:Addison Rae,Aquamarine",
|
||||
"cover": "https://p2.music.126.net/u440jFG0N5i06C9ejOeMCQ==/109951171381091309.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-06-30 08:17:26",
|
||||
"updated_at": 1751271446032,
|
||||
"created": "2022-03-09 03:24:46",
|
||||
"created_at": 1646796286440,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7325478166"
|
||||
},
|
||||
{
|
||||
"id": 7603212484,
|
||||
"name": "LOOK直播歌曲榜",
|
||||
"description": "LOOK直播好歌共赏,专属你的声音聊愈场。榜单选取符合条件且近7日热度最高的前50首歌曲,每周二更新。",
|
||||
"cover": "https://p2.music.126.net/u-RQC-LyY0aoeseRumJ14A==/109951167977730469.jpg",
|
||||
"update_frequency": "每周二更新",
|
||||
"updated": "2024-05-07 13:23:03",
|
||||
"updated_at": 1715088183913,
|
||||
"created": "2022-08-23 01:54:56",
|
||||
"created_at": 1661219696017,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7603212484"
|
||||
},
|
||||
{
|
||||
"id": 7775163417,
|
||||
"name": "赏音榜",
|
||||
"description": "云音乐歌曲赏音榜,以让用户鉴赏到更多潜力好歌为目的,以用户对歌曲互动热度为核心,按照综合数据排名取前100名,每日更新",
|
||||
"cover": "https://p2.music.126.net/m9hQzC-d5wefBipedNPaHg==/109951168178601971.jpg",
|
||||
"update_frequency": "更新92首",
|
||||
"updated": "2025-08-27 04:05:36",
|
||||
"updated_at": 1756267536926,
|
||||
"created": "2022-11-28 06:46:19",
|
||||
"created_at": 1669617979380,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7775163417"
|
||||
},
|
||||
{
|
||||
"id": 7785123708,
|
||||
"name": "黑胶VIP新歌榜",
|
||||
"description": "云音乐站内播放热度TOP50的7日内新晋会员歌曲,每日更新。\n更适合黑胶体质的新歌榜单来啦!\n耳机分你一只,新曲一起来听~\n成为尊贵黑胶,不错过每一首VIP新歌!",
|
||||
"cover": "https://p2.music.126.net/vjitpkT9nXBCth6tvdDMWg==/109951169743115266.jpg",
|
||||
"update_frequency": "更新33首",
|
||||
"updated": "2025-08-27 04:05:38",
|
||||
"updated_at": 1756267538662,
|
||||
"created": "2022-12-02 10:51:16",
|
||||
"created_at": 1669978276103,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7785123708"
|
||||
},
|
||||
{
|
||||
"id": 7785066739,
|
||||
"name": "黑胶VIP热歌榜",
|
||||
"description": "云音乐站内播放和付费热度TOP50的会员歌曲,每日更新。\n更适合黑胶体质的热歌榜单来啦!\n哪首是你的单曲循环?\n成为尊贵黑胶,随心畅听热门好歌!",
|
||||
"cover": "https://p2.music.126.net/Ay3mLgQ9weG_c8JjYrD-Bw==/109951169743106495.jpg",
|
||||
"update_frequency": "刚刚更新",
|
||||
"updated": "2025-08-27 04:05:37",
|
||||
"updated_at": 1756267537688,
|
||||
"created": "2022-12-02 10:51:31",
|
||||
"created_at": 1669978291024,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7785066739"
|
||||
},
|
||||
{
|
||||
"id": 7785091694,
|
||||
"name": "黑胶VIP爱搜榜",
|
||||
"description": "云音乐站内会员搜索播放热度TOP50的歌曲,每日更新。\n更适合黑胶体质的搜歌榜单来啦!\n热搜好歌一网打尽,只为有品位的你~\n成为尊贵黑胶,你搜我听畅听不停!",
|
||||
"cover": "https://p2.music.126.net/R7DtZqNraesnsiaIKvzTHA==/109951169743112799.jpg",
|
||||
"update_frequency": "更新36首",
|
||||
"updated": "2025-08-27 04:05:42",
|
||||
"updated_at": 1756267542318,
|
||||
"created": "2022-12-02 10:51:43",
|
||||
"created_at": 1669978303210,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=7785091694"
|
||||
},
|
||||
{
|
||||
"id": 8246775932,
|
||||
"name": "实时热度榜",
|
||||
"description": "每天9-23点为你精选当下歌曲热度最高的歌曲",
|
||||
"cover": "https://p2.music.126.net/U7ZbdpWzRdmZVr6Khn_4ag==/109951168673982478.jpg",
|
||||
"update_frequency": "刚刚更新",
|
||||
"updated": "2025-08-27 13:15:01",
|
||||
"updated_at": 1756300501119,
|
||||
"created": "2023-03-20 02:39:59",
|
||||
"created_at": 1679279999154,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8246775932"
|
||||
},
|
||||
{
|
||||
"id": 8537588450,
|
||||
"name": "喜力®星电音派对潮音榜",
|
||||
"description": "乐无界,越未来!《星电音联盟》歌曲官方榜单,每周一更新,让云村村民们随时随地躁起高燃派对氛围!喜力®星电音构建狂欢永不停歇的新奇电音宇宙,激活潮流基因,释放先锋灵感,跨维开启奇妙电音之旅!",
|
||||
"cover": "https://p2.music.126.net/HVu2hGYvzN5XBuvFc_4Bgg==/109951168730309120.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2024-09-16 04:05:30",
|
||||
"updated_at": 1726459530378,
|
||||
"created": "2023-07-07 02:48:39",
|
||||
"created_at": 1688698119437,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8537588450"
|
||||
},
|
||||
{
|
||||
"id": 8661209031,
|
||||
"name": "乐夏榜",
|
||||
"description": "听乐夏,上网易云,一头扎进爱音乐的人群! 综艺《乐队的夏天3》官方榜单,每周一更新。和三星折叠屏手机一起畅听《乐队的夏天3》官方榜单,折叠看三星,五代更来劲。",
|
||||
"cover": "https://p2.music.126.net/RlStCmE97y0xYFk7rS3Zww==/109951168864907822.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 04:05:40",
|
||||
"updated_at": 1756094740529,
|
||||
"created": "2023-08-16 09:47:27",
|
||||
"created_at": 1692179247425,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8661209031"
|
||||
},
|
||||
{
|
||||
"id": 8703179781,
|
||||
"name": "特斯拉车友爱听榜",
|
||||
"description": null,
|
||||
"cover": "https://p2.music.126.net/UL8dhobSa3TR6Wd1JmWe_g==/109951168924385363.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:04",
|
||||
"updated_at": 1756109104224,
|
||||
"created": "2023-08-31 04:29:59",
|
||||
"created_at": 1693456199735,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8703179781"
|
||||
},
|
||||
{
|
||||
"id": 8703052295,
|
||||
"name": "理想车友爱听榜",
|
||||
"description": null,
|
||||
"cover": "https://p2.music.126.net/U--PWdWupY1ER5cVSjr1jQ==/109951168928365496.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:04",
|
||||
"updated_at": 1756109104985,
|
||||
"created": "2023-08-31 04:38:29",
|
||||
"created_at": 1693456709598,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8703052295"
|
||||
},
|
||||
{
|
||||
"id": 8702582160,
|
||||
"name": "比亚迪车友爱听榜",
|
||||
"description": null,
|
||||
"cover": "https://p2.music.126.net/S1OG-OLTaofa3HfrHW48kA==/109951168924393585.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:03",
|
||||
"updated_at": 1756109103855,
|
||||
"created": "2023-08-31 04:38:42",
|
||||
"created_at": 1693456722262,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8702582160"
|
||||
},
|
||||
{
|
||||
"id": 8703220480,
|
||||
"name": "蔚来车友爱听榜",
|
||||
"description": null,
|
||||
"cover": "https://p2.music.126.net/r9kBQNsOro1EAB82Ol51WQ==/109951168924380971.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:02",
|
||||
"updated_at": 1756109102267,
|
||||
"created": "2023-08-31 04:38:56",
|
||||
"created_at": 1693456736086,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8703220480"
|
||||
},
|
||||
{
|
||||
"id": 8702982391,
|
||||
"name": "极氪车友爱听榜",
|
||||
"description": null,
|
||||
"cover": "https://p2.music.126.net/Cu0RXoKewSPM9Gyc7Cp8jw==/109951168924391596.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:03",
|
||||
"updated_at": 1756109103634,
|
||||
"created": "2023-08-31 04:39:19",
|
||||
"created_at": 1693456759762,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8702982391"
|
||||
},
|
||||
{
|
||||
"id": 8532443277,
|
||||
"name": "蛋仔派对听歌榜",
|
||||
"description": "来自蛋仔岛的热播歌曲速递,网易《蛋仔派对》官方榜单,每周五更新。云村村民们,和蛋仔们一起随歌摇摆吧!",
|
||||
"cover": "https://p2.music.126.net/TMb0be5QLMZKOFeuOKT4tg==/109951168717283910.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 04:05:44",
|
||||
"updated_at": 1755835544365,
|
||||
"created": "2023-07-05 02:32:04",
|
||||
"created_at": 1688524324879,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=8532443277"
|
||||
},
|
||||
{
|
||||
"id": 9651277674,
|
||||
"name": "AI歌曲榜",
|
||||
"description": "精心挑选每日最新最热AI生成歌曲,榜单每日更新,一起感受AI的独特魅力吧!",
|
||||
"cover": "https://p2.music.126.net/M0m6GeZ1Y8Osz9jqxaW8Wg==/109951169462048035.jpg",
|
||||
"update_frequency": "更新12首",
|
||||
"updated": "2025-08-27 04:05:43",
|
||||
"updated_at": 1756267543655,
|
||||
"created": "2024-04-02 10:25:12",
|
||||
"created_at": 1712053512213,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=9651277674"
|
||||
},
|
||||
{
|
||||
"id": 10131772880,
|
||||
"name": "昊铂车友爱听榜",
|
||||
"description": null,
|
||||
"cover": "https://p2.music.126.net/EL7H4rkKejZY7Uv54EFNXg==/109951169655010112.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:01",
|
||||
"updated_at": 1756109101438,
|
||||
"created": "2024-06-04 08:50:00",
|
||||
"created_at": 1717491000945,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=10131772880"
|
||||
},
|
||||
{
|
||||
"id": 10162841534,
|
||||
"name": "埃安车友爱听榜",
|
||||
"description": "埃安车友平时都在听什么??",
|
||||
"cover": "https://p2.music.126.net/FcP1U6Bck0wPKqd0XgBwSQ==/109951169679731241.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:03",
|
||||
"updated_at": 1756109103115,
|
||||
"created": "2024-06-12 05:31:44",
|
||||
"created_at": 1718170304691,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=10162841534"
|
||||
},
|
||||
{
|
||||
"id": 12225155968,
|
||||
"name": "欧美R&B榜",
|
||||
"description": "云音乐用户一周内收听节奏布鲁斯(R&B)官方TOP排行榜,每周五更新。",
|
||||
"cover": "https://p2.music.126.net/0E6MzYzyA5uvQ4CSoIG2mw==/109951169739660034.jpg",
|
||||
"update_frequency": "每周五更新",
|
||||
"updated": "2025-08-22 04:05:46",
|
||||
"updated_at": 1755835546525,
|
||||
"created": "2024-06-25 10:14:05",
|
||||
"created_at": 1719310445382,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12225155968"
|
||||
},
|
||||
{
|
||||
"id": 12344472377,
|
||||
"name": "黑胶VIP限免榜",
|
||||
"description": "云音乐站内热度最高的限免播放歌曲TOP50,每日更新。\n人气旋律一听就会爱上!现在马上进入免费模式(点击云音乐首页左上角侧边栏,选择“免费听歌”)畅听全榜吧!",
|
||||
"cover": "https://p2.music.126.net/WXCSf4ZNcDCdOTY5ixm3Bg==/109951169809318325.jpg",
|
||||
"update_frequency": "更新11首",
|
||||
"updated": "2025-08-27 04:05:44",
|
||||
"updated_at": 1756267544856,
|
||||
"created": "2024-07-23 08:08:37",
|
||||
"created_at": 1721722117311,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12344472377"
|
||||
},
|
||||
{
|
||||
"id": 12717025277,
|
||||
"name": "吉利车友爱听榜",
|
||||
"description": null,
|
||||
"cover": "https://p2.music.126.net/XVmZb3JSyrwMgqu9WVz61A==/109951170037568570.jpg",
|
||||
"update_frequency": "每周一更新",
|
||||
"updated": "2025-08-25 08:05:00",
|
||||
"updated_at": 1756109100809,
|
||||
"created": "2024-10-12 05:44:04",
|
||||
"created_at": 1728711844151,
|
||||
"link": "https://music.163.com/#/discover/toplist?id=12717025277"
|
||||
}
|
||||
]
|
||||
}
|
||||
123
frontend/60sapi/热搜榜单/网易云榜单详情/css/background.css
Normal file
123
frontend/60sapi/热搜榜单/网易云榜单详情/css/background.css
Normal file
@@ -0,0 +1,123 @@
|
||||
/* 背景样式文件 */
|
||||
body {
|
||||
background: linear-gradient(135deg, #E8F5E8 0%, #F1F8E9 25%, #E0F2F1 50%, #E8F5E8 75%, #F3E5F5 100%);
|
||||
background-size: 400% 400%;
|
||||
animation: gradientShift 15s ease infinite;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 背景渐变动画 */
|
||||
@keyframes gradientShift {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
/* 背景装饰元素 */
|
||||
body::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image:
|
||||
radial-gradient(circle at 20% 80%, rgba(76, 175, 80, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(129, 199, 132, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 40% 40%, rgba(165, 214, 167, 0.08) 0%, transparent 50%);
|
||||
pointer-events: none;
|
||||
z-index: -2;
|
||||
}
|
||||
|
||||
/* 背景粒子效果 */
|
||||
body::after {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image:
|
||||
radial-gradient(2px 2px at 20px 30px, rgba(76, 175, 80, 0.3), transparent),
|
||||
radial-gradient(2px 2px at 40px 70px, rgba(129, 199, 132, 0.2), transparent),
|
||||
radial-gradient(1px 1px at 90px 40px, rgba(165, 214, 167, 0.3), transparent),
|
||||
radial-gradient(1px 1px at 130px 80px, rgba(76, 175, 80, 0.2), transparent),
|
||||
radial-gradient(2px 2px at 160px 30px, rgba(129, 199, 132, 0.3), transparent);
|
||||
background-repeat: repeat;
|
||||
background-size: 200px 100px;
|
||||
animation: particleFloat 20s linear infinite;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
@keyframes particleFloat {
|
||||
0% {
|
||||
transform: translateY(0px);
|
||||
}
|
||||
100% {
|
||||
transform: translateY(-100px);
|
||||
}
|
||||
}
|
||||
|
||||
/* 响应式背景调整 */
|
||||
@media (max-width: 768px) {
|
||||
body::after {
|
||||
background-size: 150px 75px;
|
||||
animation-duration: 25s;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
body::after {
|
||||
background-size: 100px 50px;
|
||||
animation-duration: 30s;
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
/* 高性能模式 - 减少动画 */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
body {
|
||||
animation: none;
|
||||
background: linear-gradient(135deg, #E8F5E8 0%, #F1F8E9 50%, #E0F2F1 100%);
|
||||
}
|
||||
|
||||
body::after {
|
||||
animation: none;
|
||||
}
|
||||
|
||||
.title {
|
||||
animation: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* 深色模式支持 */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
background: linear-gradient(135deg, #1B5E20 0%, #2E7D32 25%, #388E3C 50%, #43A047 75%, #4CAF50 100%);
|
||||
}
|
||||
|
||||
body::before {
|
||||
background-image:
|
||||
radial-gradient(circle at 20% 80%, rgba(255, 255, 255, 0.05) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(255, 255, 255, 0.03) 0%, transparent 50%),
|
||||
radial-gradient(circle at 40% 40%, rgba(255, 255, 255, 0.02) 0%, transparent 50%);
|
||||
}
|
||||
|
||||
body::after {
|
||||
background-image:
|
||||
radial-gradient(1px 1px at 20px 30px, rgba(255, 255, 255, 0.1), transparent),
|
||||
radial-gradient(1px 1px at 40px 70px, rgba(255, 255, 255, 0.08), transparent),
|
||||
radial-gradient(1px 1px at 90px 40px, rgba(255, 255, 255, 0.06), transparent),
|
||||
radial-gradient(1px 1px at 130px 80px, rgba(255, 255, 255, 0.04), transparent),
|
||||
radial-gradient(1px 1px at 160px 30px, rgba(255, 255, 255, 0.05), transparent);
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
483
frontend/60sapi/热搜榜单/网易云榜单详情/css/style.css
Normal file
483
frontend/60sapi/热搜榜单/网易云榜单详情/css/style.css
Normal file
@@ -0,0 +1,483 @@
|
||||
/* 基础样式重置 */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Microsoft YaHei', 'PingFang SC', 'Helvetica Neue', Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #2c3e50;
|
||||
min-height: 100vh;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* 头部样式 */
|
||||
.header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
padding: 40px 20px;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
border-radius: 20px;
|
||||
backdrop-filter: blur(10px);
|
||||
box-shadow: 0 8px 32px rgba(76, 175, 80, 0.1);
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
background: linear-gradient(135deg, #4CAF50, #81C784);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
margin-bottom: 10px;
|
||||
animation: titleGlow 3s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes titleGlow {
|
||||
from { filter: drop-shadow(0 0 5px rgba(76, 175, 80, 0.3)); }
|
||||
to { filter: drop-shadow(0 0 15px rgba(76, 175, 80, 0.6)); }
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.1rem;
|
||||
color: #666;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
/* 榜单信息样式 */
|
||||
.rank-info {
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
border-radius: 15px;
|
||||
padding: 25px;
|
||||
margin-bottom: 30px;
|
||||
box-shadow: 0 6px 25px rgba(76, 175, 80, 0.1);
|
||||
border: 1px solid rgba(76, 175, 80, 0.2);
|
||||
}
|
||||
|
||||
.rank-header {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.rank-cover {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
border-radius: 12px;
|
||||
object-fit: cover;
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.rank-details {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.rank-name {
|
||||
font-size: 1.8rem;
|
||||
color: #2c3e50;
|
||||
margin-bottom: 10px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.rank-description {
|
||||
color: #666;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.rank-meta {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.update-time, .update-frequency {
|
||||
background: linear-gradient(135deg, #E8F5E8, #C8E6C9);
|
||||
padding: 6px 12px;
|
||||
border-radius: 20px;
|
||||
font-size: 0.9rem;
|
||||
color: #2E7D32;
|
||||
border: 1px solid rgba(76, 175, 80, 0.3);
|
||||
}
|
||||
|
||||
/* 控制区域样式 */
|
||||
.controls {
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
border-radius: 15px;
|
||||
padding: 25px;
|
||||
margin-bottom: 30px;
|
||||
box-shadow: 0 6px 25px rgba(76, 175, 80, 0.1);
|
||||
}
|
||||
|
||||
.input-group {
|
||||
display: flex;
|
||||
gap: 15px;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.input-group label {
|
||||
font-weight: 600;
|
||||
color: #2c3e50;
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
#rankId {
|
||||
flex: 1;
|
||||
min-width: 200px;
|
||||
padding: 12px 16px;
|
||||
border: 2px solid #E0E0E0;
|
||||
border-radius: 10px;
|
||||
font-size: 1rem;
|
||||
transition: all 0.3s ease;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
#rankId:focus {
|
||||
outline: none;
|
||||
border-color: #4CAF50;
|
||||
box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.1);
|
||||
}
|
||||
|
||||
.load-btn {
|
||||
padding: 12px 24px;
|
||||
background: linear-gradient(135deg, #4CAF50, #66BB6A);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3);
|
||||
}
|
||||
|
||||
.load-btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 20px rgba(76, 175, 80, 0.4);
|
||||
}
|
||||
|
||||
.load-btn:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.load-btn:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
/* 加载动画 */
|
||||
.loading {
|
||||
text-align: center;
|
||||
padding: 40px;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
border-radius: 15px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.spinner {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border: 4px solid #E0E0E0;
|
||||
border-top: 4px solid #4CAF50;
|
||||
border-radius: 50%;
|
||||
animation: spin 1s linear infinite;
|
||||
margin: 0 auto 15px;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
/* 错误提示 */
|
||||
.error {
|
||||
text-align: center;
|
||||
padding: 30px;
|
||||
background: rgba(255, 245, 245, 0.95);
|
||||
border: 2px solid #ffcdd2;
|
||||
border-radius: 15px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.error-icon {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.error-message {
|
||||
color: #c62828;
|
||||
margin-bottom: 20px;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.retry-btn {
|
||||
padding: 10px 20px;
|
||||
background: #f44336;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.retry-btn:hover {
|
||||
background: #d32f2f;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
/* 歌曲列表样式 */
|
||||
.song-list {
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
border-radius: 15px;
|
||||
padding: 25px;
|
||||
margin-bottom: 30px;
|
||||
box-shadow: 0 6px 25px rgba(76, 175, 80, 0.1);
|
||||
}
|
||||
|
||||
.list-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 25px;
|
||||
padding-bottom: 15px;
|
||||
border-bottom: 2px solid #E8F5E8;
|
||||
}
|
||||
|
||||
.list-header h3 {
|
||||
font-size: 1.5rem;
|
||||
color: #2c3e50;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.song-count {
|
||||
background: linear-gradient(135deg, #4CAF50, #66BB6A);
|
||||
color: white;
|
||||
padding: 6px 12px;
|
||||
border-radius: 20px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* 歌曲项样式 */
|
||||
.song-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 15px;
|
||||
margin-bottom: 12px;
|
||||
background: rgba(248, 255, 248, 0.8);
|
||||
border-radius: 12px;
|
||||
transition: all 0.3s ease;
|
||||
border: 1px solid rgba(76, 175, 80, 0.1);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.song-item:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 20px rgba(76, 175, 80, 0.15);
|
||||
background: rgba(232, 245, 232, 0.9);
|
||||
}
|
||||
|
||||
.song-rank {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 700;
|
||||
color: #4CAF50;
|
||||
min-width: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.song-rank.top3 {
|
||||
background: linear-gradient(135deg, #FFD700, #FFA000);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.song-info {
|
||||
flex: 1;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
.song-title {
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
color: #2c3e50;
|
||||
margin-bottom: 5px;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.song-artist {
|
||||
color: #666;
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.song-album {
|
||||
color: #888;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.song-meta {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.song-duration {
|
||||
color: #666;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.song-popularity {
|
||||
background: linear-gradient(135deg, #4CAF50, #66BB6A);
|
||||
color: white;
|
||||
padding: 3px 8px;
|
||||
border-radius: 12px;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* 返回按钮 */
|
||||
.back-to-list {
|
||||
text-align: center;
|
||||
margin: 30px 0;
|
||||
}
|
||||
|
||||
.back-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 12px 24px;
|
||||
background: linear-gradient(135deg, #81C784, #A5D6A7);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
border-radius: 10px;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 15px rgba(129, 199, 132, 0.3);
|
||||
}
|
||||
|
||||
.back-btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 20px rgba(129, 199, 132, 0.4);
|
||||
}
|
||||
|
||||
/* 页脚 */
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 30px 20px;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
border-radius: 15px;
|
||||
margin-top: 40px;
|
||||
color: #666;
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.rank-header {
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.rank-cover {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
margin: 0 auto 15px;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.input-group label {
|
||||
min-width: auto;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#rankId {
|
||||
min-width: auto;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.song-item {
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.song-info {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.song-meta {
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.list-header {
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.title {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 30px 15px;
|
||||
}
|
||||
|
||||
.rank-info, .controls, .song-list {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.song-item {
|
||||
padding: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 平板端适配 */
|
||||
@media (min-width: 769px) and (max-width: 1024px) {
|
||||
.container {
|
||||
padding: 25px;
|
||||
}
|
||||
|
||||
.song-item {
|
||||
padding: 18px;
|
||||
}
|
||||
|
||||
.rank-cover {
|
||||
width: 110px;
|
||||
height: 110px;
|
||||
}
|
||||
}
|
||||
69
frontend/60sapi/热搜榜单/网易云榜单详情/index.html
Normal file
69
frontend/60sapi/热搜榜单/网易云榜单详情/index.html
Normal file
@@ -0,0 +1,69 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>网易云榜单详情</title>
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<link rel="stylesheet" href="css/background.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header class="header">
|
||||
<h1 class="title">🎵 网易云榜单详情</h1>
|
||||
<p class="subtitle">发现音乐的魅力</p>
|
||||
</header>
|
||||
|
||||
<div class="rank-info" id="rankInfo" style="display: none;">
|
||||
<div class="rank-header">
|
||||
<img class="rank-cover" id="rankCover" src="" alt="榜单封面">
|
||||
<div class="rank-details">
|
||||
<h2 class="rank-name" id="rankName"></h2>
|
||||
<p class="rank-description" id="rankDescription"></p>
|
||||
<div class="rank-meta">
|
||||
<span class="update-time" id="updateTime"></span>
|
||||
<span class="update-frequency" id="updateFrequency"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="controls">
|
||||
<div class="input-group">
|
||||
<label for="rankId">榜单ID:</label>
|
||||
<input type="text" id="rankId" placeholder="请输入榜单ID,如:3778678">
|
||||
<button id="loadBtn" class="load-btn">加载榜单</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="loading" id="loading" style="display: none;">
|
||||
<div class="spinner"></div>
|
||||
<p>正在加载榜单数据...</p>
|
||||
</div>
|
||||
|
||||
<div class="error" id="error" style="display: none;">
|
||||
<div class="error-icon">⚠️</div>
|
||||
<p class="error-message" id="errorMessage"></p>
|
||||
<button class="retry-btn" id="retryBtn">重试</button>
|
||||
</div>
|
||||
|
||||
<div class="song-list" id="songList" style="display: none;">
|
||||
<div class="list-header">
|
||||
<h3>歌曲列表</h3>
|
||||
<div class="song-count" id="songCount"></div>
|
||||
</div>
|
||||
<div class="songs" id="songs"></div>
|
||||
</div>
|
||||
|
||||
<div class="back-to-list">
|
||||
<a href="../网易云榜单列表/index.html" class="back-btn">← 返回榜单列表</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<p>© 2025 网易云榜单详情 - 数据来源于官方API</p>
|
||||
</footer>
|
||||
|
||||
<script src="js/script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
349
frontend/60sapi/热搜榜单/网易云榜单详情/js/script.js
Normal file
349
frontend/60sapi/热搜榜单/网易云榜单详情/js/script.js
Normal file
@@ -0,0 +1,349 @@
|
||||
// 网易云榜单详情 JavaScript
|
||||
class NeteaseMusicRankDetail {
|
||||
constructor() {
|
||||
this.apiUrls = [];
|
||||
this.currentApiIndex = 0;
|
||||
this.rankData = null;
|
||||
this.init();
|
||||
}
|
||||
|
||||
async init() {
|
||||
try {
|
||||
await this.loadApiUrls();
|
||||
this.bindEvents();
|
||||
this.checkUrlParams();
|
||||
} catch (error) {
|
||||
console.error('初始化失败:', error);
|
||||
this.showError('初始化失败,请刷新页面重试');
|
||||
}
|
||||
}
|
||||
|
||||
// 加载API接口列表
|
||||
async loadApiUrls() {
|
||||
try {
|
||||
const response = await fetch('./接口集合.json');
|
||||
if (!response.ok) {
|
||||
throw new Error('无法加载API接口配置');
|
||||
}
|
||||
this.apiUrls = await response.json();
|
||||
console.log('API接口加载成功:', this.apiUrls);
|
||||
} catch (error) {
|
||||
console.error('加载API接口失败:', error);
|
||||
// 使用默认接口
|
||||
this.apiUrls = [
|
||||
'https://60s-cf.viki.moe',
|
||||
'https://60s.viki.moe',
|
||||
'https://60s.b23.run',
|
||||
'https://60s.114128.xyz',
|
||||
'https://60s-cf.114128.xyz'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// 绑定事件
|
||||
bindEvents() {
|
||||
const loadBtn = document.getElementById('loadBtn');
|
||||
const rankIdInput = document.getElementById('rankId');
|
||||
const retryBtn = document.getElementById('retryBtn');
|
||||
|
||||
loadBtn.addEventListener('click', () => this.loadRankDetail());
|
||||
retryBtn.addEventListener('click', () => this.loadRankDetail());
|
||||
|
||||
// 回车键加载
|
||||
rankIdInput.addEventListener('keypress', (e) => {
|
||||
if (e.key === 'Enter') {
|
||||
this.loadRankDetail();
|
||||
}
|
||||
});
|
||||
|
||||
// 输入验证
|
||||
rankIdInput.addEventListener('input', (e) => {
|
||||
const value = e.target.value.trim();
|
||||
loadBtn.disabled = !value || !/^\d+$/.test(value);
|
||||
});
|
||||
}
|
||||
|
||||
// 检查URL参数
|
||||
checkUrlParams() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const rankId = urlParams.get('id');
|
||||
const rankName = urlParams.get('name');
|
||||
|
||||
if (rankId && /^\d+$/.test(rankId)) {
|
||||
document.getElementById('rankId').value = rankId;
|
||||
|
||||
// 如果有榜单名称,更新页面标题
|
||||
if (rankName) {
|
||||
document.title = `${decodeURIComponent(rankName)} - 网易云榜单详情`;
|
||||
document.querySelector('.title').textContent = `🎵 ${decodeURIComponent(rankName)}`;
|
||||
document.querySelector('.subtitle').textContent = '正在加载榜单详情...';
|
||||
}
|
||||
|
||||
this.loadRankDetail();
|
||||
}
|
||||
}
|
||||
|
||||
// 加载榜单详情
|
||||
async loadRankDetail() {
|
||||
const rankId = document.getElementById('rankId').value.trim();
|
||||
|
||||
if (!rankId) {
|
||||
this.showError('请输入榜单ID');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!/^\d+$/.test(rankId)) {
|
||||
this.showError('榜单ID必须是数字');
|
||||
return;
|
||||
}
|
||||
|
||||
this.showLoading();
|
||||
this.currentApiIndex = 0;
|
||||
|
||||
try {
|
||||
const data = await this.fetchRankDetail(rankId);
|
||||
this.displayRankDetail(data);
|
||||
this.hideLoading();
|
||||
|
||||
// 更新URL
|
||||
const newUrl = new URL(window.location);
|
||||
newUrl.searchParams.set('id', rankId);
|
||||
window.history.replaceState({}, '', newUrl);
|
||||
|
||||
} catch (error) {
|
||||
console.error('加载榜单详情失败:', error);
|
||||
this.hideLoading();
|
||||
this.showError(error.message || '加载失败,请检查榜单ID是否正确');
|
||||
}
|
||||
}
|
||||
|
||||
// 获取榜单详情数据
|
||||
async fetchRankDetail(rankId) {
|
||||
let lastError = null;
|
||||
|
||||
for (let i = 0; i < this.apiUrls.length; i++) {
|
||||
try {
|
||||
const apiUrl = this.apiUrls[this.currentApiIndex];
|
||||
const url = `${apiUrl}/v2/ncm-rank/${rankId}`;
|
||||
|
||||
console.log(`尝试API ${this.currentApiIndex + 1}:`, url);
|
||||
|
||||
const controller = new AbortController();
|
||||
const timeoutId = setTimeout(() => controller.abort(), 10000);
|
||||
|
||||
const response = await fetch(url, {
|
||||
signal: controller.signal,
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
}
|
||||
});
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.code !== 200) {
|
||||
throw new Error(data.message || '获取数据失败');
|
||||
}
|
||||
|
||||
console.log('API调用成功:', data);
|
||||
return data;
|
||||
|
||||
} catch (error) {
|
||||
console.warn(`API ${this.currentApiIndex + 1} 失败:`, error.message);
|
||||
lastError = error;
|
||||
this.currentApiIndex = (this.currentApiIndex + 1) % this.apiUrls.length;
|
||||
|
||||
if (error.name === 'AbortError') {
|
||||
lastError = new Error('请求超时,请重试');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw lastError || new Error('所有API接口都无法访问');
|
||||
}
|
||||
|
||||
// 显示榜单详情
|
||||
displayRankDetail(data) {
|
||||
this.rankData = data;
|
||||
const songs = data.data || [];
|
||||
|
||||
// 显示榜单信息(如果有的话)
|
||||
this.displayRankInfo(songs[0]);
|
||||
|
||||
// 显示歌曲列表
|
||||
this.displaySongList(songs);
|
||||
|
||||
// 显示相关区域
|
||||
document.getElementById('songList').style.display = 'block';
|
||||
document.getElementById('error').style.display = 'none';
|
||||
}
|
||||
|
||||
// 显示榜单信息
|
||||
displayRankInfo(firstSong) {
|
||||
const rankInfo = document.getElementById('rankInfo');
|
||||
|
||||
if (firstSong && firstSong.rank_name) {
|
||||
document.getElementById('rankName').textContent = firstSong.rank_name;
|
||||
document.getElementById('rankDescription').textContent = `${firstSong.rank_name} - 网易云音乐官方榜单`;
|
||||
|
||||
// 如果有专辑封面,使用第一首歌的专辑封面作为榜单封面
|
||||
if (firstSong.album && firstSong.album.cover) {
|
||||
document.getElementById('rankCover').src = firstSong.album.cover;
|
||||
document.getElementById('rankCover').alt = firstSong.rank_name;
|
||||
}
|
||||
|
||||
document.getElementById('updateTime').textContent = `更新时间: ${this.formatDate(new Date())}`;
|
||||
document.getElementById('updateFrequency').textContent = '实时更新';
|
||||
|
||||
rankInfo.style.display = 'block';
|
||||
} else {
|
||||
rankInfo.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
// 显示歌曲列表
|
||||
displaySongList(songs) {
|
||||
const songsContainer = document.getElementById('songs');
|
||||
const songCount = document.getElementById('songCount');
|
||||
|
||||
songCount.textContent = `共 ${songs.length} 首歌曲`;
|
||||
|
||||
songsContainer.innerHTML = '';
|
||||
|
||||
songs.forEach((song, index) => {
|
||||
const songElement = this.createSongElement(song, index);
|
||||
songsContainer.appendChild(songElement);
|
||||
});
|
||||
}
|
||||
|
||||
// 创建歌曲元素
|
||||
createSongElement(song) {
|
||||
const songDiv = document.createElement('div');
|
||||
songDiv.className = 'song-item';
|
||||
|
||||
// 处理艺术家信息
|
||||
const artists = Array.isArray(song.artist) ? song.artist : [song.artist].filter(Boolean);
|
||||
const artistNames = artists.map(artist =>
|
||||
typeof artist === 'object' ? artist.name : artist
|
||||
).join(', ') || '未知艺术家';
|
||||
|
||||
// 处理专辑信息
|
||||
const albumName = song.album && song.album.name ? song.album.name : '未知专辑';
|
||||
|
||||
// 处理时长
|
||||
const duration = song.duration_desc || this.formatDuration(song.duration);
|
||||
|
||||
// 处理热度
|
||||
const popularity = song.popularity || song.score || 0;
|
||||
|
||||
songDiv.innerHTML = `
|
||||
<div class="song-rank ${song.rank <= 3 ? 'top3' : ''}">${song.rank}</div>
|
||||
<div class="song-info">
|
||||
<div class="song-title">${this.escapeHtml(song.title)}</div>
|
||||
<div class="song-artist">${this.escapeHtml(artistNames)}</div>
|
||||
<div class="song-album">${this.escapeHtml(albumName)}</div>
|
||||
</div>
|
||||
<div class="song-meta">
|
||||
<div class="song-duration">${duration}</div>
|
||||
<div class="song-popularity">${popularity}%</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
// 添加点击事件
|
||||
if (song.link) {
|
||||
songDiv.style.cursor = 'pointer';
|
||||
songDiv.addEventListener('click', () => {
|
||||
window.open(song.link, '_blank');
|
||||
});
|
||||
}
|
||||
|
||||
return songDiv;
|
||||
}
|
||||
|
||||
// 格式化时长
|
||||
formatDuration(duration) {
|
||||
if (!duration) return '--:--';
|
||||
|
||||
const seconds = Math.floor(duration / 1000);
|
||||
const minutes = Math.floor(seconds / 60);
|
||||
const remainingSeconds = seconds % 60;
|
||||
|
||||
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
|
||||
}
|
||||
|
||||
// 格式化日期
|
||||
formatDate(date) {
|
||||
return date.toLocaleString('zh-CN', {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
});
|
||||
}
|
||||
|
||||
// HTML转义
|
||||
escapeHtml(text) {
|
||||
const div = document.createElement('div');
|
||||
div.textContent = text;
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
// 显示加载状态
|
||||
showLoading() {
|
||||
document.getElementById('loading').style.display = 'block';
|
||||
document.getElementById('error').style.display = 'none';
|
||||
document.getElementById('songList').style.display = 'none';
|
||||
document.getElementById('loadBtn').disabled = true;
|
||||
}
|
||||
|
||||
// 隐藏加载状态
|
||||
hideLoading() {
|
||||
document.getElementById('loading').style.display = 'none';
|
||||
document.getElementById('loadBtn').disabled = false;
|
||||
}
|
||||
|
||||
// 显示错误信息
|
||||
showError(message) {
|
||||
document.getElementById('error').style.display = 'block';
|
||||
document.getElementById('errorMessage').textContent = message;
|
||||
document.getElementById('loading').style.display = 'none';
|
||||
document.getElementById('songList').style.display = 'none';
|
||||
document.getElementById('loadBtn').disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 全局错误处理
|
||||
window.addEventListener('error', (event) => {
|
||||
console.error('全局错误:', event.error);
|
||||
});
|
||||
|
||||
window.addEventListener('unhandledrejection', (event) => {
|
||||
console.error('未处理的Promise拒绝:', event.reason);
|
||||
});
|
||||
|
||||
// 页面加载完成后初始化
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
new NeteaseMusicRankDetail();
|
||||
});
|
||||
|
||||
// 添加CSS动画类
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// 为页面元素添加淡入动画
|
||||
const elements = document.querySelectorAll('.container > *');
|
||||
elements.forEach((el, index) => {
|
||||
el.style.opacity = '0';
|
||||
el.style.transform = 'translateY(20px)';
|
||||
el.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
|
||||
|
||||
setTimeout(() => {
|
||||
el.style.opacity = '1';
|
||||
el.style.transform = 'translateY(0)';
|
||||
}, index * 100);
|
||||
});
|
||||
});
|
||||
7
frontend/60sapi/热搜榜单/网易云榜单详情/接口集合.json
Normal file
7
frontend/60sapi/热搜榜单/网易云榜单详情/接口集合.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
]
|
||||
5612
frontend/60sapi/热搜榜单/网易云榜单详情/返回接口.json
Normal file
5612
frontend/60sapi/热搜榜单/网易云榜单详情/返回接口.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user