[\s\S]*$/gi, ''); // 处理未闭合的think标签
+ cleanContent = cleanContent.trim();
+
+ console.log('清理后的内容:', cleanContent);
+
+ // 提取稀有度评分(百分比格式)
+ const rarityMatch = cleanContent.match(/【稀有度评分】[\s\S]*?评分:(\d+)%[\s\S]*?评价:([\s\S]*?)(?=【|$)/);
+ if (rarityMatch) {
+ result.rarityScore = rarityMatch[1] + '%';
+ result.rarityDesc = rarityMatch[2].trim();
+ }
+
+ // 提取音韵评价(百分比格式)
+ const phoneticMatch = cleanContent.match(/【音韵评价】[\s\S]*?评分:(\d+)%[\s\S]*?评价:([\s\S]*?)(?=【|$)/);
+ if (phoneticMatch) {
+ result.phoneticScore = phoneticMatch[1] + '%';
+ result.phoneticDesc = phoneticMatch[2].trim();
+ }
+
+ // 提取含义解读
+ const meaningMatch = cleanContent.match(/【含义解读】[\s\S]*?\n([\s\S]+)$/);
+ if (meaningMatch) {
+ result.meaningAnalysis = meaningMatch[1].trim();
+ }
+ } catch (error) {
+ console.error('解析结果时出错:', error);
+ }
+
+ return result;
+}
+
+// 简单的markdown解析函数
+function parseMarkdown(text) {
+ if (!text || typeof text !== 'string') return text;
+
+ // 处理加粗 **text** 或 __text__
+ let parsed = text.replace(/\*\*(.*?)\*\*/g, '$1');
+ parsed = parsed.replace(/__(.*?)__/g, '$1');
+
+ // 处理斜体 *text* 或 _text_
+ parsed = parsed.replace(/\*(.*?)\*/g, '$1');
+ parsed = parsed.replace(/_(.*?)_/g, '$1');
+
+ // 处理无序列表
+ const lines = parsed.split('\n');
+ let inList = false;
+ let result = [];
+
+ for (let i = 0; i < lines.length; i++) {
+ const line = lines[i].trim();
+
+ // 检查是否是列表项(以 - 开头,后面跟空格)
+ if (line.match(/^-\s+/)) {
+ if (!inList) {
+ result.push('');
+ inList = true;
+ }
+ // 移除开头的 "- " 并包装为 -
+ const listContent = line.replace(/^-\s+/, '');
+ result.push(`
- ${listContent}
`);
+ } else {
+ if (inList) {
+ result.push('
');
+ inList = false;
+ }
+ if (line) {
+ result.push(line);
+ }
+ }
+ }
+
+ // 如果最后还在列表中,需要关闭列表
+ if (inList) {
+ result.push('');
+ }
+
+ // 重新组合,用
连接非列表行
+ parsed = result.join('
');
+
+ // 清理多余的
标签(在列表前后)
+ parsed = parsed.replace(/
/g, '');
+ parsed = parsed.replace(/<\/ul>
/g, '
');
+ parsed = parsed.replace(/
- /g, '
- ');
+ parsed = parsed.replace(/<\/li>
/g, ' ');
+
+ return parsed;
+}
+
+// 更新显示结果
+function updateResults(result) {
+ rarityScore.textContent = result.rarityScore;
+ rarityDesc.innerHTML = parseMarkdown(result.rarityDesc);
+ phoneticScore.textContent = result.phoneticScore;
+ phoneticDesc.innerHTML = parseMarkdown(result.phoneticDesc);
+ meaningAnalysis.innerHTML = parseMarkdown(result.meaningAnalysis);
+}
+
+// 重置结果显示
+function resetResults() {
+ rarityScore.textContent = '--%';
+ rarityDesc.innerHTML = '点击"开始分析"查看结果';
+ phoneticScore.textContent = '--%';
+ phoneticDesc.innerHTML = '点击"开始分析"查看结果';
+ meaningAnalysis.innerHTML = '点击"开始分析"查看姓名的深层寓意';
+}
+
+// 显示错误信息
+function showError(message) {
+ // 清除之前的错误信息
+ const existingError = document.querySelector('.error');
+ if (existingError) {
+ existingError.remove();
+ }
+
+ // 创建新的错误信息
+ const errorDiv = document.createElement('div');
+ errorDiv.className = 'error';
+ errorDiv.textContent = `分析失败:${message}。`;
+ document.querySelector('.result-section').appendChild(errorDiv);
+}
+
+// 姓名验证
+function validateName(name) {
+ if (!name) {
+ return '请输入姓名';
+ }
+ if (name.length < 2) {
+ return '姓名至少需要2个字符';
+ }
+ if (name.length > 10) {
+ return '姓名不能超过10个字符';
+ }
+ if (!/^[\u4e00-\u9fa5a-zA-Z]+$/.test(name)) {
+ return '姓名只能包含中文或英文字符';
+ }
+ return null;
+}
+
+// 主要分析函数
+async function analyzeName() {
+ const name = nameInput.value.trim();
+
+ // 验证输入
+ const validationError = validateName(name);
+ if (validationError) {
+ alert(validationError);
+ return;
+ }
+
+ // 显示加载状态
+ analyzeBtn.disabled = true;
+ analyzeBtn.textContent = '分析中...';
+ loading.style.display = 'block';
+ resetResults();
+
+ // 清除之前的错误信息
+ const existingError = document.querySelector('.error');
+ if (existingError) {
+ existingError.remove();
+ }
+
+ const requestBody = {
+ model: model,
+ messages: [{
+ role: "user",
+ content: createNameAnalysisPrompt(name)
+ }],
+ temperature: 0.7,
+ max_tokens: 1000
+ };
+
+ try {
+ const response = await fetch(endpoint, {
+ method: 'POST',
+ headers: {
+ 'Accept': 'application/vnd.github+json',
+ 'Authorization': `Bearer ${GITHUB_TOKEN}`,
+ 'X-GitHub-Api-Version': '2022-11-28',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(requestBody)
+ });
+
+ // 检查HTTP状态码
+ if (response.status === 429) {
+ throw new Error('短时间内请求次数过多,请休息一下!');
+ }
+
+ if (!response.ok) {
+ throw new Error(`请求失败: ${response.status} ${response.statusText}`);
+ }
+
+ const data = await response.json();
+
+ if (data?.choices?.[0]?.message?.content) {
+ const analysisResult = parseAnalysisResult(data.choices[0].message.content.trim());
+ updateResults(analysisResult);
+ } else {
+ throw new Error('AI响应格式异常');
+ }
+ } catch (error) {
+ console.error('分析姓名时出错:', error);
+ showError(error.message);
+ resetResults();
+ } finally {
+ // 恢复按钮状态
+ analyzeBtn.disabled = false;
+ analyzeBtn.textContent = '开始分析';
+ loading.style.display = 'none';
+ }
+}
+
+// 事件监听器
+analyzeBtn.addEventListener('click', analyzeName);
+
+// 回车键快捷分析
+nameInput.addEventListener('keypress', (e) => {
+ if (e.key === 'Enter') {
+ e.preventDefault();
+ analyzeName();
+ }
+});
+
+// 输入框内容变化时清除错误信息
+nameInput.addEventListener('input', () => {
+ const existingError = document.querySelector('.error');
+ if (existingError) {
+ existingError.remove();
+ }
+});
\ No newline at end of file
diff --git a/frontend/aimodelapp/AI姓名评测/styles.css b/frontend/aimodelapp/AI姓名评测/styles.css
new file mode 100644
index 00000000..dc1325ec
--- /dev/null
+++ b/frontend/aimodelapp/AI姓名评测/styles.css
@@ -0,0 +1,249 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ min-height: 100vh;
+ padding: 20px;
+ color: #333;
+}
+
+.container {
+ max-width: 700px;
+ margin: 0 auto;
+ background: rgba(255, 255, 255, 0.95);
+ border-radius: 20px;
+ padding: 30px;
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
+ backdrop-filter: blur(10px);
+}
+
+.header {
+ text-align: center;
+ margin-bottom: 30px;
+}
+
+.title {
+ font-size: 2.5rem;
+ color: #4a5568;
+ margin-bottom: 10px;
+ font-weight: 300;
+ letter-spacing: 2px;
+}
+
+.subtitle {
+ color: #718096;
+ font-size: 1rem;
+ margin-bottom: 20px;
+}
+
+.form-group {
+ margin-bottom: 25px;
+}
+
+.form-label {
+ display: block;
+ margin-bottom: 8px;
+ font-weight: 500;
+ color: #4a5568;
+ font-size: 1rem;
+}
+
+.form-input {
+ width: 100%;
+ padding: 15px;
+ border: 2px solid #e2e8f0;
+ border-radius: 12px;
+ font-size: 1rem;
+ transition: all 0.3s ease;
+ background: #f7fafc;
+ text-align: center;
+}
+
+.form-input:focus {
+ outline: none;
+ border-color: #667eea;
+ background: #fff;
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
+}
+
+.btn {
+ width: 100%;
+ padding: 15px;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: white;
+ border: none;
+ border-radius: 12px;
+ font-size: 1.1rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ margin-bottom: 25px;
+}
+
+.btn:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 10px 25px rgba(102, 126, 234, 0.3);
+}
+
+.btn:active {
+ transform: translateY(0);
+}
+
+.btn:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+ transform: none;
+}
+
+.result-section {
+ margin-top: 30px;
+}
+
+.result-title {
+ font-size: 1.3rem;
+ color: #4a5568;
+ margin-bottom: 20px;
+ text-align: center;
+ font-weight: 500;
+}
+
+.loading {
+ display: none;
+ text-align: center;
+ color: #667eea;
+ font-style: italic;
+ margin-bottom: 20px;
+}
+
+.result-container {
+ display: grid;
+ gap: 20px;
+ grid-template-columns: 1fr;
+}
+
+.result-card {
+ background: #f7fafc;
+ border: 2px solid #e2e8f0;
+ border-radius: 12px;
+ padding: 20px;
+ transition: all 0.3s ease;
+}
+
+.result-card:hover {
+ border-color: #667eea;
+ box-shadow: 0 5px 15px rgba(102, 126, 234, 0.1);
+}
+
+.card-title {
+ font-size: 1.1rem;
+ color: #4a5568;
+ margin-bottom: 15px;
+ text-align: center;
+ font-weight: 600;
+}
+
+.score-display {
+ font-size: 2.5rem;
+ font-weight: bold;
+ text-align: center;
+ margin-bottom: 10px;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+}
+
+.score-desc {
+ text-align: center;
+ color: #718096;
+ font-size: 0.9rem;
+ line-height: 1.5;
+}
+
+.meaning-content {
+ color: #2d3748;
+ line-height: 1.8;
+ font-size: 1rem;
+ text-align: left;
+ white-space: pre-wrap;
+}
+
+.error {
+ color: #e53e3e;
+ background: #fed7d7;
+ border: 1px solid #feb2b2;
+ padding: 15px;
+ border-radius: 8px;
+ margin-top: 15px;
+}
+
+/* 平板和桌面端优化 */
+@media (min-width: 768px) {
+ .result-container {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ .result-card:last-child {
+ grid-column: 1 / -1;
+ }
+}
+
+/* 手机端优化 */
+@media (max-width: 768px) {
+ body {
+ padding: 10px;
+ }
+
+ .container {
+ padding: 20px;
+ margin: 10px;
+ }
+
+ .title {
+ font-size: 2rem;
+ }
+
+ .form-input {
+ padding: 12px;
+ }
+
+ .btn {
+ padding: 12px;
+ }
+
+ .result-card {
+ padding: 15px;
+ }
+
+ .score-display {
+ font-size: 2rem;
+ }
+}
+
+@media (max-width: 480px) {
+ .title {
+ font-size: 1.8rem;
+ letter-spacing: 1px;
+ }
+
+ .container {
+ padding: 15px;
+ }
+
+ .result-card {
+ padding: 12px;
+ }
+
+ .score-display {
+ font-size: 1.8rem;
+ }
+
+ .meaning-content {
+ font-size: 0.9rem;
+ }
+}
\ No newline at end of file
diff --git a/frontend/aimodelapp/生成要求.txt b/frontend/aimodelapp/生成要求.txt
new file mode 100644
index 00000000..d921a0c2
--- /dev/null
+++ b/frontend/aimodelapp/生成要求.txt
@@ -0,0 +1,12 @@
+1.写一个静态网页来调用github model 来完成应用功能
+2.网页清新风格,颜色随意,app风格,适配手机端和电脑端,优先优化手机端用户体验
+3.默认github的调用密钥是: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
+4.默认调用AI模型为 "openai/gpt-4o-mini"
+5.把js,css,html分开储存,每个功能分每个模块,避免单个文件过大问题
+6.默认github ai调用模型地址是:'https://models.github.ai/inference/chat/completions'
+比如这样:
+// GitHub API 配置
+const GITHUB_TOKEN = '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';
+const endpoint = 'https://models.github.ai/inference/chat/completions';
+const model = 'deepseek/DeepSeek-V3-0324';
+
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/css/background.css b/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/css/background.css
deleted file mode 100644
index 7a44dec9..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/css/background.css
+++ /dev/null
@@ -1,190 +0,0 @@
-/* 背景样式文件 */
-
-/* 主体背景 */
-body {
- background: linear-gradient(135deg, #e8f5e8 0%, #c8e6c9 50%, #a5d6a7 100%);
- background-attachment: fixed;
- background-size: 400% 400%;
- animation: gradientShift 15s ease infinite;
-}
-
-/* 背景动画 */
-@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: -1;
-}
-
-/* 浮动装饰圆点 */
-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: float 20s linear infinite;
- pointer-events: none;
- z-index: -1;
- opacity: 0.6;
-}
-
-@keyframes float {
- 0% {
- transform: translateY(0px);
- }
- 50% {
- transform: translateY(-10px);
- }
- 100% {
- transform: translateY(0px);
- }
-}
-
-/* 题目容器背景增强 */
-.question-container {
- background: rgba(255, 255, 255, 0.95);
- backdrop-filter: blur(10px);
- -webkit-backdrop-filter: blur(10px);
- border: 1px solid rgba(255, 255, 255, 0.2);
- box-shadow:
- 0 8px 32px rgba(26, 77, 26, 0.1),
- inset 0 1px 0 rgba(255, 255, 255, 0.2);
-}
-
-/* 错误容器背景 */
-.error-container {
- background: rgba(255, 255, 255, 0.95);
- backdrop-filter: blur(10px);
- -webkit-backdrop-filter: blur(10px);
-}
-
-/* 结果容器背景 */
-.result-container {
- background: rgba(255, 255, 255, 0.9);
- backdrop-filter: blur(5px);
- -webkit-backdrop-filter: blur(5px);
-}
-
-/* 代码块背景 */
-.code-block {
- background: rgba(248, 249, 250, 0.9);
- backdrop-filter: blur(5px);
- -webkit-backdrop-filter: blur(5px);
-}
-
-/* 选项背景 */
-.option {
- background: rgba(255, 255, 255, 0.8);
- backdrop-filter: blur(5px);
- -webkit-backdrop-filter: blur(5px);
-}
-
-.option:hover {
- background: rgba(76, 175, 80, 0.05);
-}
-
-.option.selected {
- background: linear-gradient(135deg, rgba(76, 175, 80, 0.15), rgba(76, 175, 80, 0.08));
-}
-
-/* 按钮背景增强 */
-.submit-btn {
- background: linear-gradient(135deg, #4caf50, #45a049);
- box-shadow: 0 4px 15px rgba(76, 175, 80, 0.2);
-}
-
-.show-answer-btn {
- background: linear-gradient(135deg, #2196f3, #1976d2);
- box-shadow: 0 4px 15px rgba(33, 150, 243, 0.2);
-}
-
-.retry-btn {
- background: linear-gradient(135deg, #ff9800, #f57c00);
- box-shadow: 0 4px 15px rgba(255, 152, 0, 0.2);
-}
-
-.refresh-btn {
- background: linear-gradient(135deg, #4caf50, #45a049);
- box-shadow: 0 4px 15px rgba(76, 175, 80, 0.2);
-}
-
-/* 移动端背景优化 */
-@media (max-width: 768px) {
- body {
- background-attachment: scroll;
- }
-
- body::after {
- opacity: 0.4;
- background-size: 150px 75px;
- }
-
- .question-container {
- backdrop-filter: blur(8px);
- -webkit-backdrop-filter: blur(8px);
- }
-}
-
-/* 高对比度模式支持 */
-@media (prefers-contrast: high) {
- body {
- background: #f0f8f0;
- }
-
- body::before,
- body::after {
- display: none;
- }
-
- .question-container {
- background: #ffffff;
- border: 2px solid #4caf50;
- }
-}
-
-/* 减少动画模式支持 */
-@media (prefers-reduced-motion: reduce) {
- body {
- animation: none;
- background: #e8f5e8;
- }
-
- body::after {
- animation: none;
- }
-
- .refresh-btn:hover {
- transform: scale(1.1);
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/css/style.css b/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/css/style.css
deleted file mode 100644
index 2ad05653..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/css/style.css
+++ /dev/null
@@ -1,597 +0,0 @@
-/* 基础样式重置 */
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
- line-height: 1.6;
- color: #2d5a27;
- min-height: 100vh;
- overflow-x: hidden;
-}
-
-/* 容器布局 */
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 20px;
- min-height: 100vh;
- display: flex;
- flex-direction: column;
-}
-
-/* 头部样式 */
-.header {
- text-align: center;
- margin-bottom: 40px;
- padding: 30px 0;
-}
-
-.header h1 {
- font-size: 2.5rem;
- color: #1a4d1a;
- margin-bottom: 10px;
- font-weight: 700;
- text-shadow: 0 2px 4px rgba(26, 77, 26, 0.1);
-}
-
-.subtitle {
- font-size: 1.1rem;
- color: #4a7c59;
- opacity: 0.8;
-}
-
-/* 主内容区域 */
-.main-content {
- flex: 1;
- display: flex;
- justify-content: center;
- align-items: flex-start;
-}
-
-/* 加载动画 */
-.loading {
- text-align: center;
- padding: 60px 20px;
-}
-
-.spinner {
- width: 50px;
- height: 50px;
- border: 4px solid #e8f5e8;
- border-top: 4px solid #4caf50;
- border-radius: 50%;
- animation: spin 1s linear infinite;
- margin: 0 auto 20px;
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-.loading p {
- color: #4a7c59;
- font-size: 1.1rem;
-}
-
-/* 题目容器 */
-.question-container {
- background: rgba(255, 255, 255, 0.95);
- border-radius: 20px;
- padding: 40px;
- box-shadow: 0 10px 30px rgba(26, 77, 26, 0.1);
- border: 2px solid rgba(76, 175, 80, 0.2);
- width: 100%;
- max-width: 800px;
- backdrop-filter: blur(10px);
-}
-
-/* 题目头部 */
-.question-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 30px;
- padding-bottom: 15px;
- border-bottom: 2px solid #e8f5e8;
-}
-
-.question-id {
- font-size: 1.1rem;
- color: #4caf50;
- font-weight: 600;
- background: linear-gradient(135deg, #e8f5e8, #c8e6c9);
- padding: 8px 16px;
- border-radius: 20px;
-}
-
-.refresh-btn {
- background: linear-gradient(135deg, #4caf50, #45a049);
- border: none;
- border-radius: 50%;
- width: 45px;
- height: 45px;
- color: white;
- cursor: pointer;
- transition: all 0.3s ease;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.refresh-btn:hover {
- transform: rotate(180deg) scale(1.1);
- box-shadow: 0 5px 15px rgba(76, 175, 80, 0.3);
-}
-
-/* 题目文本 */
-.question-text h2 {
- font-size: 1.5rem;
- color: #1a4d1a;
- margin-bottom: 25px;
- text-align: center;
-}
-
-/* 代码块 */
-.code-block {
- background: #f8f9fa;
- border: 2px solid #e8f5e8;
- border-radius: 12px;
- margin: 25px 0;
- overflow-x: auto;
- position: relative;
-}
-
-.code-block pre {
- margin: 0;
- padding: 25px;
- font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
- font-size: 0.95rem;
- line-height: 1.5;
- color: #2d5a27;
- white-space: pre-wrap;
- word-wrap: break-word;
- background: transparent !important;
-}
-
-.code-block code {
- font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
- background: transparent !important;
-}
-
-/* 代码高亮自定义样式 - 丰富的语法高亮 */
-.code-block .hljs {
- background: transparent !important;
- color: #333333 !important;
-}
-
-/* JavaScript 关键字 - 蓝色 */
-.code-block .hljs-keyword {
- color: #0066cc !important;
- font-weight: 600;
-}
-
-/* 字符串 - 绿色 */
-.code-block .hljs-string {
- color: #22aa22 !important;
-}
-
-/* 数字 - 橙色 */
-.code-block .hljs-number {
- color: #ff6600 !important;
-}
-
-/* 函数名 - 紫色 */
-.code-block .hljs-function,
-.code-block .hljs-title.function_ {
- color: #9933cc !important;
- font-weight: 600;
-}
-
-/* 变量名 - 深蓝色 */
-.code-block .hljs-variable,
-.code-block .hljs-name {
- color: #0066aa !important;
-}
-
-/* 注释 - 灰色 */
-.code-block .hljs-comment {
- color: #888888 !important;
- font-style: italic;
-}
-
-/* 内置对象和方法 - 深紫色 */
-.code-block .hljs-built_in {
- color: #663399 !important;
- font-weight: 500;
-}
-
-/* 字面量 (true, false, null) - 红色 */
-.code-block .hljs-literal {
- color: #cc0000 !important;
- font-weight: 600;
-}
-
-/* 操作符 - 深灰色 */
-.code-block .hljs-operator {
- color: #666666 !important;
-}
-
-/* 标点符号 - 深灰色 */
-.code-block .hljs-punctuation {
- color: #666666 !important;
-}
-
-/* 属性名 - 深蓝色 */
-.code-block .hljs-property,
-.code-block .hljs-attr {
- color: #0066aa !important;
-}
-
-/* 类名和构造函数 - 深绿色 */
-.code-block .hljs-title.class_,
-.code-block .hljs-title {
- color: #228833 !important;
- font-weight: 600;
-}
-
-/* 参数 - 深蓝色 */
-.code-block .hljs-params {
- color: #0066aa !important;
-}
-
-/* 正则表达式 - 深红色 */
-.code-block .hljs-regexp {
- color: #aa0066 !important;
-}
-
-/* 模板字符串 - 深绿色 */
-.code-block .hljs-template-variable,
-.code-block .hljs-template-tag {
- color: #228833 !important;
-}
-
-/* 选项容器 */
-.options-container {
- margin: 30px 0;
-}
-
-.option {
- background: rgba(255, 255, 255, 0.8);
- border: 2px solid #e8f5e8;
- border-radius: 12px;
- padding: 15px 20px;
- margin: 12px 0;
- cursor: pointer;
- transition: all 0.3s ease;
- font-size: 1rem;
- position: relative;
- overflow: hidden;
-}
-
-.option:hover {
- border-color: #4caf50;
- background: rgba(76, 175, 80, 0.05);
- transform: translateX(5px);
-}
-
-.option.selected {
- border-color: #4caf50;
- background: linear-gradient(135deg, rgba(76, 175, 80, 0.1), rgba(76, 175, 80, 0.05));
- color: #1a4d1a;
- font-weight: 600;
-}
-
-.option.correct {
- border-color: #4caf50;
- background: linear-gradient(135deg, rgba(76, 175, 80, 0.2), rgba(76, 175, 80, 0.1));
- color: #1a4d1a;
-}
-
-.option.incorrect {
- border-color: #f44336;
- background: linear-gradient(135deg, rgba(244, 67, 54, 0.1), rgba(244, 67, 54, 0.05));
- color: #c62828;
-}
-
-/* 按钮样式 */
-.action-buttons {
- display: flex;
- gap: 15px;
- margin: 30px 0;
- justify-content: center;
- flex-wrap: wrap;
-}
-
-.submit-btn, .show-answer-btn, .retry-btn, .export-btn {
- padding: 12px 30px;
- border: none;
- border-radius: 25px;
- font-size: 1rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.3s ease;
- min-width: 120px;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 8px;
-}
-
-.submit-btn {
- background: linear-gradient(135deg, #4caf50, #45a049);
- color: white;
-}
-
-.submit-btn:hover:not(:disabled) {
- transform: translateY(-2px);
- box-shadow: 0 5px 15px rgba(76, 175, 80, 0.3);
-}
-
-.submit-btn:disabled {
- background: #cccccc;
- cursor: not-allowed;
- transform: none;
- box-shadow: none;
-}
-
-.show-answer-btn {
- background: linear-gradient(135deg, #2196f3, #1976d2);
- color: white;
-}
-
-.show-answer-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 5px 15px rgba(33, 150, 243, 0.3);
-}
-
-.retry-btn {
- background: linear-gradient(135deg, #ff9800, #f57c00);
- color: white;
-}
-
-.retry-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 5px 15px rgba(255, 152, 0, 0.3);
-}
-
-.export-btn {
- background: linear-gradient(135deg, #9c27b0, #7b1fa2);
- color: white;
-}
-
-.export-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 5px 15px rgba(156, 39, 176, 0.3);
-}
-
-.export-btn svg {
- width: 16px;
- height: 16px;
-}
-
-/* 结果容器 */
-.result-container {
- margin-top: 30px;
- padding: 25px;
- background: rgba(255, 255, 255, 0.9);
- border-radius: 15px;
- border: 2px solid #e8f5e8;
-}
-
-.result-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 20px;
- padding-bottom: 15px;
- border-bottom: 1px solid #e8f5e8;
-}
-
-.result-status {
- font-size: 1.2rem;
- font-weight: 600;
-}
-
-.result-status.correct {
- color: #4caf50;
-}
-
-.result-status.incorrect {
- color: #f44336;
-}
-
-.correct-answer {
- font-weight: 600;
- color: #4caf50;
- background: rgba(76, 175, 80, 0.1);
- padding: 5px 12px;
- border-radius: 15px;
-}
-
-.explanation {
- color: #2d5a27;
- line-height: 1.7;
- font-size: 1rem;
-}
-
-.explanation pre {
- background: #f8f9fa;
- border: 1px solid #e8f5e8;
- border-radius: 8px;
- padding: 15px;
- margin: 15px 0;
- overflow-x: auto;
- font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
-}
-
-/* 错误容器 */
-.error-container {
- text-align: center;
- padding: 60px 20px;
- background: rgba(255, 255, 255, 0.9);
- border-radius: 20px;
- border: 2px solid rgba(244, 67, 54, 0.2);
- max-width: 500px;
- margin: 0 auto;
-}
-
-.error-icon {
- font-size: 3rem;
- margin-bottom: 20px;
-}
-
-.error-container h3 {
- color: #f44336;
- margin-bottom: 15px;
- font-size: 1.5rem;
-}
-
-.error-container p {
- color: #666;
- margin-bottom: 25px;
- font-size: 1.1rem;
-}
-
-/* 底部 */
-.footer {
- text-align: center;
- padding: 30px 0;
- margin-top: 40px;
- color: #4a7c59;
- opacity: 0.7;
- border-top: 1px solid rgba(76, 175, 80, 0.2);
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (max-width: 1024px) and (min-width: 768px) {
- .container {
- padding: 15px;
- }
-
- .header h1 {
- font-size: 2.2rem;
- }
-
- .question-container {
- padding: 30px;
- }
-
- .action-buttons {
- flex-wrap: wrap;
- }
-}
-
-/* 手机端适配 (最大768px) */
-@media (max-width: 768px) {
- .container {
- padding: 10px;
- }
-
- .header {
- margin-bottom: 25px;
- padding: 20px 0;
- }
-
- .header h1 {
- font-size: 1.8rem;
- }
-
- .subtitle {
- font-size: 1rem;
- }
-
- .question-container {
- padding: 20px;
- border-radius: 15px;
- }
-
- .question-header {
- flex-direction: column;
- gap: 15px;
- text-align: center;
- }
-
- .question-text h2 {
- font-size: 1.3rem;
- }
-
- .code-block pre {
- padding: 15px;
- font-size: 0.85rem;
- }
-
- .option {
- padding: 12px 15px;
- font-size: 0.95rem;
- }
-
- .action-buttons {
- flex-direction: column;
- align-items: center;
- }
-
- .submit-btn, .show-answer-btn, .retry-btn {
- width: 100%;
- max-width: 200px;
- }
-
- .result-header {
- flex-direction: column;
- gap: 10px;
- text-align: center;
- }
-
- .explanation {
- font-size: 0.95rem;
- }
-
- .explanation pre {
- padding: 10px;
- font-size: 0.8rem;
- }
-}
-
-/* 小屏手机适配 (最大480px) */
-@media (max-width: 480px) {
- .container {
- padding: 8px;
- }
-
- .header h1 {
- font-size: 1.6rem;
- }
-
- .question-container {
- padding: 15px;
- }
-
- .question-id {
- font-size: 1rem;
- padding: 6px 12px;
- }
-
- .refresh-btn {
- width: 40px;
- height: 40px;
- }
-
- .code-block pre {
- font-size: 0.8rem;
- padding: 12px;
- }
-
- .option {
- padding: 10px 12px;
- font-size: 0.9rem;
- }
-
- .submit-btn, .show-answer-btn, .retry-btn {
- padding: 10px 20px;
- font-size: 0.95rem;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/index.html b/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/index.html
deleted file mode 100644
index 310880a4..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/index.html
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
- 随机JavaScript趣味题
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
输出是什么?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
⚠️
-
加载失败
-
网络连接异常,请稍后重试
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/js/script.js b/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/js/script.js
deleted file mode 100644
index dd4812c0..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/js/script.js
+++ /dev/null
@@ -1,565 +0,0 @@
-// JavaScript趣味题应用
-class JSQuizApp {
- constructor() {
- this.apiEndpoints = [
- 'https://60s-cf.viki.moe',
- 'https://60s.viki.moe',
- 'https://60s.b23.run',
- 'https://60s.114128.xyz',
- 'https://60s-cf.114128.xyz'
- ];
- this.currentApiIndex = 0;
- this.currentQuestion = null;
- this.selectedOption = null;
- this.isAnswered = false;
-
- this.initElements();
- this.bindEvents();
- this.loadQuestion();
- }
-
- // 初始化DOM元素
- initElements() {
- this.elements = {
- loading: document.getElementById('loading'),
- questionContainer: document.getElementById('questionContainer'),
- errorContainer: document.getElementById('errorContainer'),
- questionId: document.getElementById('questionId'),
- questionText: document.getElementById('questionText'),
- codeContent: document.getElementById('codeContent'),
- optionsContainer: document.getElementById('optionsContainer'),
- submitBtn: document.getElementById('submitBtn'),
- showAnswerBtn: document.getElementById('showAnswerBtn'),
- refreshBtn: document.getElementById('refreshBtn'),
- retryBtn: document.getElementById('retryBtn'),
- exportBtn: document.getElementById('exportBtn'),
- resultContainer: document.getElementById('resultContainer'),
- resultStatus: document.getElementById('resultStatus'),
- correctAnswer: document.getElementById('correctAnswer'),
- explanation: document.getElementById('explanation'),
- errorMessage: document.getElementById('errorMessage')
- };
- }
-
- // 绑定事件
- bindEvents() {
- this.elements.submitBtn.addEventListener('click', () => this.submitAnswer());
- this.elements.showAnswerBtn.addEventListener('click', () => this.showAnswer());
- this.elements.refreshBtn.addEventListener('click', () => this.loadQuestion());
- this.elements.retryBtn.addEventListener('click', () => this.loadQuestion());
- this.elements.exportBtn.addEventListener('click', () => this.exportToMarkdown());
- }
-
- // 显示加载状态
- showLoading() {
- this.elements.loading.style.display = 'block';
- this.elements.questionContainer.style.display = 'none';
- this.elements.errorContainer.style.display = 'none';
- }
-
- // 显示题目
- showQuestion() {
- this.elements.loading.style.display = 'none';
- this.elements.questionContainer.style.display = 'block';
- this.elements.errorContainer.style.display = 'none';
- }
-
- // 显示错误
- showError(message) {
- this.elements.loading.style.display = 'none';
- this.elements.questionContainer.style.display = 'none';
- this.elements.errorContainer.style.display = 'block';
- this.elements.errorMessage.textContent = message;
- }
-
- // 获取当前API地址
- getCurrentApiUrl() {
- return `${this.apiEndpoints[this.currentApiIndex]}/v2/awesome-js`;
- }
-
- // 切换到下一个API
- switchToNextApi() {
- this.currentApiIndex = (this.currentApiIndex + 1) % this.apiEndpoints.length;
- }
-
- // 加载题目
- async loadQuestion() {
- this.showLoading();
- this.resetQuestion();
-
- let attempts = 0;
- const maxAttempts = this.apiEndpoints.length;
-
- while (attempts < maxAttempts) {
- try {
- const response = await fetch(this.getCurrentApiUrl(), {
- method: 'GET',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- timeout: 10000
- });
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- }
-
- const data = await response.json();
-
- if (data.code === 200 && data.data) {
- this.currentQuestion = data.data;
- this.displayQuestion();
- return;
- } else {
- throw new Error(data.message || '数据格式错误');
- }
-
- } catch (error) {
- console.warn(`API ${this.getCurrentApiUrl()} 请求失败:`, error.message);
- attempts++;
-
- if (attempts < maxAttempts) {
- this.switchToNextApi();
- console.log(`切换到备用API: ${this.getCurrentApiUrl()}`);
- } else {
- this.showError(`所有API接口都无法访问,请检查网络连接后重试。\n最后尝试的错误: ${error.message}`);
- return;
- }
- }
- }
- }
-
- // 重置题目状态
- resetQuestion() {
- this.selectedOption = null;
- this.isAnswered = false;
- this.elements.resultContainer.style.display = 'none';
- this.elements.submitBtn.disabled = true;
- this.elements.submitBtn.textContent = '提交答案';
- this.elements.showAnswerBtn.style.display = 'inline-block';
-
- // 清空选项容器,防止重复显示
- this.elements.optionsContainer.innerHTML = '';
-
- // 移除所有选项的事件监听器
- const existingOptions = document.querySelectorAll('.option');
- existingOptions.forEach(option => {
- option.removeEventListener('click', this.selectOption);
- });
- }
-
- // 显示题目内容
- displayQuestion() {
- const question = this.currentQuestion;
-
- console.log('显示题目:', question);
-
- // 设置题目ID
- this.elements.questionId.textContent = `题目 #${question.id}`;
-
- // 设置题目文本
- this.elements.questionText.innerHTML = `${this.escapeHtml(question.question)}
`;
-
- // 设置代码内容并应用语法高亮
- this.elements.codeContent.textContent = question.code;
-
- // 应用语法高亮
- if (typeof hljs !== 'undefined') {
- hljs.highlightElement(this.elements.codeContent);
- }
-
- // 确保选项容器已清空
- this.elements.optionsContainer.innerHTML = '';
-
- // 生成选项
- this.generateOptions(question.options);
-
- this.showQuestion();
- }
-
- // 生成选项
- generateOptions(options) {
- // 确保清空容器
- this.elements.optionsContainer.innerHTML = '';
-
- // 验证选项数据
- if (!Array.isArray(options) || options.length === 0) {
- console.error('选项数据无效:', options);
- return;
- }
-
- // 移除可能存在的重复选项
- const uniqueOptions = [...new Set(options)];
-
- uniqueOptions.forEach((option, index) => {
- const optionElement = document.createElement('div');
- optionElement.className = 'option';
- optionElement.textContent = option;
- optionElement.dataset.index = index;
- optionElement.dataset.value = option.charAt(0); // A, B, C, D
-
- optionElement.addEventListener('click', () => this.selectOption(optionElement));
-
- this.elements.optionsContainer.appendChild(optionElement);
- });
-
- console.log('生成选项:', uniqueOptions);
- }
-
- // 选择选项
- selectOption(optionElement) {
- if (this.isAnswered) return;
-
- // 移除之前的选中状态
- document.querySelectorAll('.option.selected').forEach(el => {
- el.classList.remove('selected');
- });
-
- // 设置当前选中
- optionElement.classList.add('selected');
- this.selectedOption = optionElement.dataset.value;
-
- // 启用提交按钮
- this.elements.submitBtn.disabled = false;
- }
-
- // 提交答案
- submitAnswer() {
- if (!this.selectedOption || this.isAnswered) return;
-
- this.isAnswered = true;
- this.elements.submitBtn.disabled = true;
- this.elements.submitBtn.textContent = '已提交';
- this.elements.showAnswerBtn.style.display = 'none';
-
- const isCorrect = this.selectedOption === this.currentQuestion.answer;
-
- // 显示结果
- this.showResult(isCorrect);
-
- // 标记选项
- this.markOptions();
- }
-
- // 显示答案
- showAnswer() {
- this.isAnswered = true;
- this.elements.submitBtn.disabled = true;
- this.elements.submitBtn.textContent = '已显示答案';
- this.elements.showAnswerBtn.style.display = 'none';
-
- // 显示结果(不判断对错)
- this.showResult(null);
-
- // 标记正确答案
- this.markCorrectAnswer();
- }
-
- // 显示结果
- showResult(isCorrect) {
- const resultContainer = this.elements.resultContainer;
- const resultStatus = this.elements.resultStatus;
- const correctAnswer = this.elements.correctAnswer;
- const explanation = this.elements.explanation;
-
- // 设置结果状态
- if (isCorrect === true) {
- resultStatus.textContent = '✅ 回答正确!';
- resultStatus.className = 'result-status correct';
- } else if (isCorrect === false) {
- resultStatus.textContent = '❌ 回答错误';
- resultStatus.className = 'result-status incorrect';
- } else {
- resultStatus.textContent = '💡 答案解析';
- resultStatus.className = 'result-status';
- }
-
- // 设置正确答案
- correctAnswer.textContent = `正确答案: ${this.currentQuestion.answer}`;
-
- // 设置解析内容
- explanation.innerHTML = this.formatExplanation(this.currentQuestion.explanation);
-
- // 显示结果容器
- resultContainer.style.display = 'block';
-
- // 滚动到结果区域
- setTimeout(() => {
- resultContainer.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
- }, 100);
- }
-
- // 标记选项
- markOptions() {
- const options = document.querySelectorAll('.option');
- const correctAnswer = this.currentQuestion.answer;
-
- options.forEach(option => {
- const optionValue = option.dataset.value;
-
- if (optionValue === correctAnswer) {
- option.classList.add('correct');
- } else if (option.classList.contains('selected')) {
- option.classList.add('incorrect');
- }
-
- // 禁用点击
- option.style.pointerEvents = 'none';
- });
- }
-
- // 标记正确答案
- markCorrectAnswer() {
- const options = document.querySelectorAll('.option');
- const correctAnswer = this.currentQuestion.answer;
-
- options.forEach(option => {
- const optionValue = option.dataset.value;
-
- if (optionValue === correctAnswer) {
- option.classList.add('correct');
- }
-
- // 禁用点击
- option.style.pointerEvents = 'none';
- });
- }
-
- // 格式化解析内容
- formatExplanation(explanation) {
- // 转义HTML
- let formatted = this.escapeHtml(explanation);
-
- // 处理代码块
- formatted = formatted.replace(/```js\n([\s\S]*?)\n```/g, '
$1
');
- formatted = formatted.replace(/```javascript\n([\s\S]*?)\n```/g, '$1
');
- formatted = formatted.replace(/```([\s\S]*?)```/g, '$1
');
-
- // 处理行内代码
- formatted = formatted.replace(/`([^`]+)`/g, '$1');
-
- // 处理换行
- formatted = formatted.replace(/\n\n/g, '');
- formatted = formatted.replace(/\n/g, '
');
-
- // 包装段落
- if (!formatted.includes('
')) {
- formatted = '
' + formatted + '
';
- }
-
- return formatted;
- }
-
- // HTML转义
- escapeHtml(text) {
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
- }
-
- // 导出为Markdown
- exportToMarkdown() {
- if (!this.currentQuestion) {
- alert('请先加载题目后再导出!');
- return;
- }
-
- const question = this.currentQuestion;
- const timestamp = new Date().toLocaleString('zh-CN');
-
- // 构建Markdown内容
- let markdown = `# JavaScript趣味题 #${question.id}\n\n`;
- markdown += `> 导出时间: ${timestamp}\n\n`;
-
- // 题目部分
- markdown += `## 题目\n\n`;
- markdown += `${question.question}\n\n`;
-
- // 代码部分
- markdown += `## 代码\n\n`;
- markdown += `\`\`\`javascript\n${question.code}\n\`\`\`\n\n`;
-
- // 选项部分
- markdown += `## 选项\n\n`;
- question.options.forEach((option, index) => {
- const letter = String.fromCharCode(65 + index); // A, B, C, D
- const isCorrect = letter === question.answer;
- markdown += `${letter}. ${option}${isCorrect ? ' ✅' : ''}\n`;
- });
- markdown += `\n`;
-
- // 答案部分
- markdown += `## 正确答案\n\n`;
- markdown += `**${question.answer}**\n\n`;
-
- // 解析部分
- markdown += `## 答案解析\n\n`;
- // 清理解析内容中的HTML标签,转换为Markdown格式
- let explanation = question.explanation;
- explanation = explanation.replace(/
/gi, '\n');
- explanation = explanation.replace(//gi, '\n');
- explanation = explanation.replace(/<\/p>/gi, '\n');
- explanation = explanation.replace(/]*>/gi, '`');
- explanation = explanation.replace(/<\/code>/gi, '`');
- explanation = explanation.replace(//gi, '\n```javascript\n');
- explanation = explanation.replace(/<\/code><\/pre>/gi, '\n```\n');
- explanation = explanation.replace(/<[^>]*>/g, ''); // 移除其他HTML标签
- explanation = explanation.replace(/\n\s*\n/g, '\n\n'); // 清理多余空行
- markdown += explanation.trim() + '\n\n';
-
- // 添加页脚
- markdown += `---\n\n`;
- markdown += `*本题目来源于JavaScript趣味题集合*\n`;
- markdown += `*导出工具: JavaScript趣味题网页版*\n`;
-
- // 创建下载
- this.downloadMarkdown(markdown, `JavaScript趣味题_${question.id}_${new Date().getTime()}.md`);
- }
-
- // 下载Markdown文件
- downloadMarkdown(content, filename) {
- const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' });
- const url = URL.createObjectURL(blob);
-
- const link = document.createElement('a');
- link.href = url;
- link.download = filename;
- link.style.display = 'none';
-
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
-
- // 清理URL对象
- setTimeout(() => {
- URL.revokeObjectURL(url);
- }, 100);
-
- // 显示成功提示
- this.showExportSuccess(filename);
- }
-
- // 显示导出成功提示
- showExportSuccess(filename) {
- // 创建临时提示元素
- const toast = document.createElement('div');
- toast.style.cssText = `
- position: fixed;
- top: 20px;
- right: 20px;
- background: linear-gradient(135deg, #4caf50, #45a049);
- color: white;
- padding: 15px 20px;
- border-radius: 8px;
- box-shadow: 0 4px 12px rgba(76, 175, 80, 0.3);
- z-index: 10000;
- font-size: 14px;
- max-width: 300px;
- word-wrap: break-word;
- animation: slideInRight 0.3s ease-out;
- `;
-
- toast.innerHTML = `
-
- `;
-
- // 添加动画样式
- const style = document.createElement('style');
- style.textContent = `
- @keyframes slideInRight {
- from {
- transform: translateX(100%);
- opacity: 0;
- }
- to {
- transform: translateX(0);
- opacity: 1;
- }
- }
- @keyframes slideOutRight {
- from {
- transform: translateX(0);
- opacity: 1;
- }
- to {
- transform: translateX(100%);
- opacity: 0;
- }
- }
- `;
- document.head.appendChild(style);
-
- document.body.appendChild(toast);
-
- // 3秒后自动消失
- setTimeout(() => {
- toast.style.animation = 'slideOutRight 0.3s ease-in';
- setTimeout(() => {
- if (toast.parentNode) {
- document.body.removeChild(toast);
- }
- if (style.parentNode) {
- document.head.removeChild(style);
- }
- }, 300);
- }, 3000);
- }
-}
-
-// 页面加载完成后初始化应用
-document.addEventListener('DOMContentLoaded', () => {
- new JSQuizApp();
-});
-
-// 添加键盘快捷键支持
-document.addEventListener('keydown', (e) => {
- // 按R键刷新题目
- if (e.key.toLowerCase() === 'r' && !e.ctrlKey && !e.metaKey) {
- const refreshBtn = document.getElementById('refreshBtn');
- if (refreshBtn && !document.querySelector('.loading').style.display !== 'none') {
- refreshBtn.click();
- }
- }
-
- // 按数字键1-4选择选项
- if (['1', '2', '3', '4'].includes(e.key)) {
- const options = document.querySelectorAll('.option');
- const index = parseInt(e.key) - 1;
- if (options[index] && !options[index].style.pointerEvents) {
- options[index].click();
- }
- }
-
- // 按Enter键提交答案
- if (e.key === 'Enter') {
- const submitBtn = document.getElementById('submitBtn');
- if (submitBtn && !submitBtn.disabled) {
- submitBtn.click();
- }
- }
-});
-
-// 添加触摸设备支持
-if ('ontouchstart' in window) {
- document.addEventListener('touchstart', () => {}, { passive: true });
-}
-
-// 添加网络状态监听
-if ('navigator' in window && 'onLine' in navigator) {
- window.addEventListener('online', () => {
- console.log('网络连接已恢复');
- });
-
- window.addEventListener('offline', () => {
- console.log('网络连接已断开');
- });
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/返回接口.json b/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/返回接口.json
deleted file mode 100644
index d6592cc8..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机JavaScript趣味题/返回接口.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": {
- "id": 11,
- "question": "输出是什么?",
- "code": "function Person(firstName, lastName) {\n this.firstName = firstName;\n this.lastName = lastName;\n}\n\nconst member = new Person(\"Lydia\", \"Hallie\");\nPerson.getFullName = function () {\n return `${this.firstName} ${this.lastName}`;\n}\n\nconsole.log(member.getFullName());",
- "options": [
- "A: `TypeError`",
- "B: `SyntaxError`",
- "C: `Lydia Hallie`",
- "D: `undefined` `undefined`"
- ],
- "answer": "A",
- "explanation": "你不能像常规对象那样,给构造函数添加属性。如果你想一次性给所有实例添加特性,你应该使用原型。因此本例中,使用如下方式:\n\n```js\nPerson.prototype.getFullName = function () {\n return `${this.firstName} ${this.lastName}`;\n}\n```\n\n这才会使 `member.getFullName()` 起作用。为什么这么做有益的?假设我们将这个方法添加到构造函数本身里。也许不是每个 `Person` 实例都需要这个方法。这将浪费大量内存空间,因为它们仍然具有该属性,这将占用每个实例的内存空间。相反,如果我们只将它添加到原型中,那么它只存在于内存中的一个位置,但是所有实例都可以访问它!"
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/css/background.css b/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/css/background.css
deleted file mode 100644
index 84d3b43d..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/css/background.css
+++ /dev/null
@@ -1,81 +0,0 @@
-/* 背景样式文件 */
-body {
- background: linear-gradient(135deg, #a8e6cf 0%, #dcedc1 25%, #ffd3a5 50%, #a8e6cf 75%, #88d8a3 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(39, 174, 96, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 80% 20%, rgba(46, 204, 113, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 40% 40%, rgba(26, 188, 156, 0.05) 0%, transparent 50%);
- pointer-events: none;
- z-index: -1;
-}
-
-/* 浮动装饰圆点 */
-body::after {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-image:
- radial-gradient(2px 2px at 20px 30px, rgba(39, 174, 96, 0.3), transparent),
- radial-gradient(2px 2px at 40px 70px, rgba(46, 204, 113, 0.2), transparent),
- radial-gradient(1px 1px at 90px 40px, rgba(26, 188, 156, 0.3), transparent),
- radial-gradient(1px 1px at 130px 80px, rgba(39, 174, 96, 0.2), transparent),
- radial-gradient(2px 2px at 160px 30px, rgba(46, 204, 113, 0.3), transparent);
- background-repeat: repeat;
- background-size: 200px 100px;
- animation: floatDots 20s linear infinite;
- pointer-events: none;
- z-index: -1;
-}
-
-@keyframes floatDots {
- 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;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/css/style.css b/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/css/style.css
deleted file mode 100644
index b1bef2cc..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/css/style.css
+++ /dev/null
@@ -1,339 +0,0 @@
-/* 基础样式重置 */
-* {
- 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 {
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- max-width: 1200px;
- margin: 0 auto;
- padding: 20px;
-}
-
-/* 头部样式 */
-.header {
- text-align: center;
- margin-bottom: 40px;
- padding: 30px 0;
-}
-
-.title {
- font-size: 2.5rem;
- font-weight: 700;
- color: #27ae60;
- margin-bottom: 10px;
- text-shadow: 0 2px 4px rgba(39, 174, 96, 0.2);
-}
-
-.subtitle {
- font-size: 1.1rem;
- color: #7f8c8d;
- font-weight: 400;
-}
-
-/* 主要内容区域 */
-.main {
- flex: 1;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.content-card {
- background: rgba(255, 255, 255, 0.95);
- border-radius: 20px;
- padding: 40px;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
- backdrop-filter: blur(10px);
- border: 1px solid rgba(39, 174, 96, 0.1);
- width: 100%;
- max-width: 600px;
- transition: transform 0.3s ease, box-shadow 0.3s ease;
-}
-
-.content-card:hover {
- transform: translateY(-5px);
- box-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
-}
-
-/* KFC文案内容 */
-.kfc-content {
- min-height: 200px;
- padding: 30px;
- background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
- border-radius: 15px;
- border-left: 5px solid #27ae60;
- margin-bottom: 30px;
- position: relative;
- overflow: hidden;
-}
-
-.kfc-content::before {
- content: '"';
- position: absolute;
- top: 10px;
- left: 15px;
- font-size: 3rem;
- color: #27ae60;
- opacity: 0.3;
- font-family: serif;
-}
-
-.kfc-content p {
- font-size: 1.1rem;
- line-height: 1.8;
- color: #2c3e50;
- margin-left: 20px;
- position: relative;
- z-index: 1;
-}
-
-.loading-text {
- text-align: center;
- color: #7f8c8d;
- font-style: italic;
-}
-
-/* 按钮组 */
-.button-group {
- display: flex;
- gap: 15px;
- justify-content: center;
- margin-bottom: 20px;
-}
-
-.generate-btn, .copy-btn {
- padding: 15px 30px;
- border: none;
- border-radius: 50px;
- font-size: 1rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.3s ease;
- position: relative;
- overflow: hidden;
-}
-
-.generate-btn {
- background: linear-gradient(135deg, #27ae60 0%, #2ecc71 100%);
- color: white;
- box-shadow: 0 4px 15px rgba(39, 174, 96, 0.3);
-}
-
-.generate-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(39, 174, 96, 0.4);
-}
-
-.generate-btn:active {
- transform: translateY(0);
-}
-
-.generate-btn:disabled {
- opacity: 0.7;
- cursor: not-allowed;
- transform: none;
-}
-
-.copy-btn {
- background: linear-gradient(135deg, #3498db 0%, #5dade2 100%);
- color: white;
- box-shadow: 0 4px 15px rgba(52, 152, 219, 0.3);
-}
-
-.copy-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(52, 152, 219, 0.4);
-}
-
-/* 编号信息 */
-.index-info {
- text-align: center;
- padding: 10px;
- background: rgba(39, 174, 96, 0.1);
- border-radius: 10px;
- border: 1px solid rgba(39, 174, 96, 0.2);
-}
-
-.index-text {
- color: #27ae60;
- font-weight: 600;
- font-size: 0.9rem;
-}
-
-#indexNumber {
- color: #2c3e50;
- font-weight: 700;
-}
-
-/* 底部 */
-.footer {
- text-align: center;
- padding: 20px 0;
- color: #7f8c8d;
- font-size: 0.9rem;
- margin-top: 40px;
-}
-
-/* 提示框 */
-.toast {
- position: fixed;
- top: 20px;
- right: 20px;
- background: #27ae60;
- color: white;
- padding: 15px 25px;
- border-radius: 10px;
- box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
- transform: translateX(400px);
- transition: transform 0.3s ease;
- z-index: 1000;
- font-weight: 600;
-}
-
-.toast.show {
- transform: translateX(0);
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (max-width: 1024px) and (min-width: 768px) {
- .container {
- padding: 15px;
- }
-
- .title {
- font-size: 2.2rem;
- }
-
- .content-card {
- padding: 35px;
- max-width: 550px;
- }
-
- .kfc-content {
- padding: 25px;
- min-height: 180px;
- }
-
- .button-group {
- flex-direction: row;
- gap: 12px;
- }
-
- .generate-btn, .copy-btn {
- padding: 12px 25px;
- font-size: 0.95rem;
- }
-}
-
-/* 手机端适配 (最大768px) */
-@media (max-width: 768px) {
- .container {
- padding: 10px;
- }
-
- .header {
- margin-bottom: 30px;
- padding: 20px 0;
- }
-
- .title {
- font-size: 1.8rem;
- margin-bottom: 8px;
- }
-
- .subtitle {
- font-size: 1rem;
- }
-
- .content-card {
- padding: 25px;
- margin: 0 5px;
- border-radius: 15px;
- }
-
- .kfc-content {
- padding: 20px;
- min-height: 150px;
- margin-bottom: 25px;
- }
-
- .kfc-content::before {
- font-size: 2.5rem;
- top: 5px;
- left: 10px;
- }
-
- .kfc-content p {
- font-size: 1rem;
- line-height: 1.7;
- margin-left: 15px;
- }
-
- .button-group {
- flex-direction: column;
- gap: 10px;
- }
-
- .generate-btn, .copy-btn {
- padding: 12px 20px;
- font-size: 0.9rem;
- width: 100%;
- }
-
- .footer {
- font-size: 0.8rem;
- margin-top: 30px;
- }
-
- .toast {
- right: 10px;
- left: 10px;
- transform: translateY(-100px);
- font-size: 0.9rem;
- }
-
- .toast.show {
- transform: translateY(0);
- }
-}
-
-/* 小屏手机适配 (最大480px) */
-@media (max-width: 480px) {
- .title {
- font-size: 1.6rem;
- }
-
- .content-card {
- padding: 20px;
- margin: 0;
- }
-
- .kfc-content {
- padding: 15px;
- min-height: 120px;
- }
-
- .kfc-content p {
- font-size: 0.95rem;
- margin-left: 10px;
- }
-
- .generate-btn, .copy-btn {
- padding: 10px 15px;
- font-size: 0.85rem;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/index.html b/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/index.html
deleted file mode 100644
index 72ab0627..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/index.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
- 随机KFC文案生成器
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 文案编号:
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/js/main.js b/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/js/main.js
deleted file mode 100644
index 526c4750..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/js/main.js
+++ /dev/null
@@ -1,240 +0,0 @@
-// KFC文案生成器主要功能
-class KFCGenerator {
- constructor() {
- this.apiEndpoints = [];
- this.currentApiIndex = 0;
- this.isLoading = false;
-
- this.init();
- }
-
- // 初始化
- async init() {
- await this.loadApiEndpoints();
- this.bindEvents();
- }
-
- // 加载API接口列表
- async loadApiEndpoints() {
- try {
- const response = await fetch('./接口集合.json');
- this.apiEndpoints = await response.json();
- } catch (error) {
- console.error('加载API接口列表失败:', error);
- this.showToast('加载接口配置失败', 'error');
- }
- }
-
- // 绑定事件
- bindEvents() {
- const generateBtn = document.getElementById('generateBtn');
- const copyBtn = document.getElementById('copyBtn');
-
- generateBtn.addEventListener('click', () => this.generateKFC());
- copyBtn.addEventListener('click', () => this.copyContent());
- }
-
- // 生成KFC文案
- async generateKFC() {
- if (this.isLoading) return;
-
- this.setLoadingState(true);
-
- let success = false;
- let attempts = 0;
- const maxAttempts = this.apiEndpoints.length;
-
- while (!success && attempts < maxAttempts) {
- try {
- const apiUrl = this.apiEndpoints[this.currentApiIndex];
- const data = await this.fetchKFCData(apiUrl);
-
- if (data && data.code === 200 && data.data && data.data.kfc) {
- this.displayKFC(data.data);
- success = true;
- } else {
- throw new Error('API返回数据格式错误');
- }
- } catch (error) {
- console.error(`API ${this.currentApiIndex + 1} 请求失败:`, error);
- this.currentApiIndex = (this.currentApiIndex + 1) % this.apiEndpoints.length;
- attempts++;
- }
- }
-
- if (!success) {
- this.showError('所有API接口都无法访问,请稍后重试');
- }
-
- this.setLoadingState(false);
- }
-
- // 请求KFC数据
- async fetchKFCData(apiUrl) {
- const controller = new AbortController();
- const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时
-
- try {
- const response = await fetch(`${apiUrl}/v2/kfc`, {
- method: 'GET',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- signal: controller.signal
- });
-
- clearTimeout(timeoutId);
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- }
-
- return await response.json();
- } catch (error) {
- clearTimeout(timeoutId);
- throw error;
- }
- }
-
- // 显示KFC文案
- displayKFC(data) {
- const contentElement = document.getElementById('kfcContent');
- const indexElement = document.getElementById('indexNumber');
- const indexInfo = document.getElementById('indexInfo');
- const copyBtn = document.getElementById('copyBtn');
-
- // 显示文案内容
- contentElement.innerHTML = `${this.escapeHtml(data.kfc)}
`;
-
- // 显示编号信息
- if (data.index) {
- indexElement.textContent = data.index;
- indexInfo.style.display = 'block';
- } else {
- indexInfo.style.display = 'none';
- }
-
- // 显示复制按钮
- copyBtn.style.display = 'inline-block';
-
- // 添加显示动画
- contentElement.style.opacity = '0';
- contentElement.style.transform = 'translateY(20px)';
-
- setTimeout(() => {
- contentElement.style.transition = 'all 0.5s ease';
- contentElement.style.opacity = '1';
- contentElement.style.transform = 'translateY(0)';
- }, 100);
- }
-
- // 显示错误信息
- showError(message) {
- const contentElement = document.getElementById('kfcContent');
- contentElement.innerHTML = `${this.escapeHtml(message)}
`;
-
- const copyBtn = document.getElementById('copyBtn');
- const indexInfo = document.getElementById('indexInfo');
- copyBtn.style.display = 'none';
- indexInfo.style.display = 'none';
- }
-
- // 复制文案内容
- async copyContent() {
- const contentElement = document.getElementById('kfcContent');
- const textContent = contentElement.querySelector('p')?.textContent;
-
- if (!textContent || textContent.includes('点击按钮获取') || textContent.includes('失败')) {
- this.showToast('没有可复制的内容', 'error');
- return;
- }
-
- try {
- if (navigator.clipboard && window.isSecureContext) {
- await navigator.clipboard.writeText(textContent);
- } else {
- // 降级方案
- const textArea = document.createElement('textarea');
- textArea.value = textContent;
- textArea.style.position = 'fixed';
- textArea.style.left = '-999999px';
- textArea.style.top = '-999999px';
- document.body.appendChild(textArea);
- textArea.focus();
- textArea.select();
- document.execCommand('copy');
- textArea.remove();
- }
-
- this.showToast('文案已复制到剪贴板', 'success');
- } catch (error) {
- console.error('复制失败:', error);
- this.showToast('复制失败,请手动选择复制', 'error');
- }
- }
-
- // 设置加载状态
- setLoadingState(loading) {
- this.isLoading = loading;
- const generateBtn = document.getElementById('generateBtn');
- const btnText = generateBtn.querySelector('.btn-text');
- const btnLoading = generateBtn.querySelector('.btn-loading');
-
- if (loading) {
- generateBtn.disabled = true;
- btnText.style.display = 'none';
- btnLoading.style.display = 'inline';
- } else {
- generateBtn.disabled = false;
- btnText.style.display = 'inline';
- btnLoading.style.display = 'none';
- }
- }
-
- // 显示提示消息
- showToast(message, type = 'success') {
- const toast = document.getElementById('toast');
- toast.textContent = message;
- toast.className = `toast ${type}`;
- toast.classList.add('show');
-
- setTimeout(() => {
- toast.classList.remove('show');
- }, 3000);
- }
-
- // HTML转义
- escapeHtml(text) {
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
- }
-}
-
-// 页面加载完成后初始化
-document.addEventListener('DOMContentLoaded', () => {
- const generator = new KFCGenerator();
- // 页面加载完成后自动生成一条文案
- setTimeout(() => {
- generator.generateKFC();
- }, 1000);
-});
-
-// 添加键盘快捷键支持
-document.addEventListener('keydown', (event) => {
- // 按空格键生成文案
- if (event.code === 'Space' && event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {
- event.preventDefault();
- document.getElementById('generateBtn').click();
- }
-
- // Ctrl+C 复制文案
- if (event.ctrlKey && event.key === 'c' && event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {
- const copyBtn = document.getElementById('copyBtn');
- if (copyBtn.style.display !== 'none') {
- event.preventDefault();
- copyBtn.click();
- }
- }
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/接口集合.json b/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/返回接口.json b/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/返回接口.json
deleted file mode 100644
index 0f729ba8..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机KFC文案/返回接口.json
+++ /dev/null
@@ -1 +0,0 @@
-{"code":200,"message":"获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841","data":{"index":369,"kfc":"我不想你带着情绪过夜,这样会把你推的越来越远,我不想你离开我,我希望你可以多爱我一点,我不想因为一点点小问题就让我们两之间的感情产生隔阂。对我来说,双向奔赴的感情相处才有意义,看不到希望的事情我没办法坚持太久,我不想浪费时间在一些无意义无结果的事情上,时间应该用来做我该做的事情。很多人走不到最后,是因为理解不同步,但我跟你在一起,我知道你什样的人,我了解你甚至比了解自己还多,我和你在一起,不是因为其他,而是因为今天肯德基疯狂星期四,我希望你能请我吃!"}}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/css/background.css b/frontend/react-app/public/60sapi/娱乐消遣/随机一言/css/background.css
deleted file mode 100644
index 3a10cfda..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/css/background.css
+++ /dev/null
@@ -1,167 +0,0 @@
-/* 背景样式文件 - 金色光辉主题 */
-
-/* 主背景 */
-body {
- background: linear-gradient(
- 135deg,
- #fff8dc 0%,
- #ffeaa7 25%,
- #fdcb6e 50%,
- #e17055 75%,
- #d63031 100%
- );
- background-size: 400% 400%;
- animation: gradientShift 15s ease infinite;
- position: relative;
-}
-
-/* 背景装饰层 */
-body::before {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background:
- radial-gradient(circle at 20% 80%, rgba(255, 215, 0, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 80% 20%, rgba(255, 223, 0, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 40% 40%, rgba(212, 175, 55, 0.05) 0%, transparent 50%);
- pointer-events: none;
- z-index: 1;
-}
-
-/* 动态光点效果 */
-body::after {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-image:
- radial-gradient(2px 2px at 20px 30px, rgba(255, 215, 0, 0.3), transparent),
- radial-gradient(2px 2px at 40px 70px, rgba(255, 223, 0, 0.2), transparent),
- radial-gradient(1px 1px at 90px 40px, rgba(212, 175, 55, 0.4), transparent),
- radial-gradient(1px 1px at 130px 80px, rgba(255, 215, 0, 0.2), transparent),
- radial-gradient(2px 2px at 160px 30px, rgba(255, 223, 0, 0.3), transparent);
- background-repeat: repeat;
- background-size: 200px 100px;
- animation: sparkle 20s linear infinite;
- pointer-events: none;
- z-index: 2;
-}
-
-/* 背景动画 */
-@keyframes gradientShift {
- 0% {
- background-position: 0% 50%;
- }
- 50% {
- background-position: 100% 50%;
- }
- 100% {
- background-position: 0% 50%;
- }
-}
-
-@keyframes sparkle {
- 0% {
- transform: translateY(0);
- opacity: 1;
- }
- 100% {
- transform: translateY(-100vh);
- opacity: 0;
- }
-}
-
-/* 响应式背景调整 */
-
-/* 平板端背景 */
-@media (min-width: 768px) and (max-width: 1024px) {
- body::after {
- background-size: 250px 120px;
- }
-}
-
-/* 电脑端背景 */
-@media (min-width: 1024px) {
- body {
- background-size: 300% 300%;
- }
-
- body::after {
- background-size: 300px 150px;
- animation-duration: 25s;
- }
-}
-
-/* 手机端背景优化 */
-@media (max-width: 767px) {
- body {
- background-size: 200% 200%;
- animation-duration: 10s;
- }
-
- body::before {
- background:
- radial-gradient(circle at 30% 70%, rgba(255, 215, 0, 0.08) 0%, transparent 40%),
- radial-gradient(circle at 70% 30%, rgba(255, 223, 0, 0.08) 0%, transparent 40%);
- }
-
- body::after {
- background-size: 150px 80px;
- animation-duration: 15s;
- }
-}
-
-/* 超小屏幕背景 */
-@media (max-width: 479px) {
- body {
- background: linear-gradient(
- 135deg,
- #fff8dc 0%,
- #ffeaa7 50%,
- #fdcb6e 100%
- );
- background-size: 150% 150%;
- }
-
- body::after {
- background-size: 120px 60px;
- }
-}
-
-/* 深色模式支持 */
-@media (prefers-color-scheme: dark) {
- body {
- background: linear-gradient(
- 135deg,
- #2c1810 0%,
- #3d2914 25%,
- #4a3319 50%,
- #5c3e1f 75%,
- #6b4423 100%
- );
- }
-
- body::before {
- background:
- radial-gradient(circle at 20% 80%, rgba(255, 215, 0, 0.05) 0%, transparent 50%),
- radial-gradient(circle at 80% 20%, rgba(255, 223, 0, 0.05) 0%, transparent 50%);
- }
-}
-
-/* 减少动画效果(用户偏好) */
-@media (prefers-reduced-motion: reduce) {
- body,
- body::before,
- body::after {
- animation: none;
- }
-
- body {
- background: linear-gradient(135deg, #fff8dc 0%, #ffeaa7 50%, #fdcb6e 100%);
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/css/style.css b/frontend/react-app/public/60sapi/娱乐消遣/随机一言/css/style.css
deleted file mode 100644
index b84b1125..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/css/style.css
+++ /dev/null
@@ -1,357 +0,0 @@
-/* 基础样式重置 */
-* {
- 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: #2c1810;
- overflow-x: hidden;
-}
-
-/* 容器布局 */
-.container {
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- padding: 20px;
- position: relative;
-}
-
-/* 头部样式 */
-.header {
- text-align: center;
- margin-bottom: 40px;
- z-index: 10;
-}
-
-.title {
- font-size: 3rem;
- font-weight: 700;
- color: #d4af37;
- text-shadow:
- 0 0 10px rgba(212, 175, 55, 0.8),
- 0 0 20px rgba(212, 175, 55, 0.6),
- 0 0 30px rgba(212, 175, 55, 0.4);
- margin-bottom: 10px;
- animation: titleGlow 3s ease-in-out infinite alternate;
-}
-
-.subtitle {
- font-size: 1.2rem;
- color: #b8860b;
- opacity: 0.9;
- text-shadow: 0 0 5px rgba(184, 134, 11, 0.5);
-}
-
-/* 主内容区域 */
-.main-content {
- width: 100%;
- max-width: 800px;
- z-index: 10;
-}
-
-/* 一言容器 */
-.quote-container {
- background: linear-gradient(135deg, rgba(255, 215, 0, 0.1), rgba(255, 223, 0, 0.05));
- border: 2px solid rgba(212, 175, 55, 0.3);
- border-radius: 20px;
- padding: 40px;
- margin-bottom: 30px;
- backdrop-filter: blur(10px);
- box-shadow:
- 0 8px 32px rgba(212, 175, 55, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.1);
- position: relative;
- overflow: hidden;
-}
-
-.quote-container::before {
- content: '';
- position: absolute;
- top: -2px;
- left: -2px;
- right: -2px;
- bottom: -2px;
- background: linear-gradient(45deg, #ffd700, #ffed4e, #ffd700, #ffed4e);
- border-radius: 22px;
- z-index: -1;
- animation: borderGlow 4s linear infinite;
-}
-
-/* 加载状态 */
-.loading {
- display: none;
- text-align: center;
- color: #d4af37;
-}
-
-.loading.show {
- display: block;
-}
-
-.loading-spinner {
- width: 40px;
- height: 40px;
- border: 4px solid rgba(212, 175, 55, 0.3);
- border-top: 4px solid #d4af37;
- border-radius: 50%;
- margin: 0 auto 15px;
- animation: spin 1s linear infinite;
-}
-
-/* 一言显示 */
-.quote-display {
- display: block;
- text-align: center;
-}
-
-.quote-display.hide {
- display: none;
-}
-
-.quote-text {
- font-size: 1.8rem;
- line-height: 1.8;
- color: #2c1810;
- margin-bottom: 20px;
- text-shadow: 0 1px 2px rgba(212, 175, 55, 0.1);
- font-weight: 500;
-}
-
-.quote-index {
- font-size: 0.9rem;
- color: #b8860b;
- opacity: 0.8;
-}
-
-/* 错误信息 */
-.error-message {
- display: none;
- text-align: center;
- color: #cd853f;
-}
-
-.error-message.show {
- display: block;
-}
-
-.error-icon {
- font-size: 2rem;
- margin-bottom: 10px;
-}
-
-.error-text {
- font-size: 1.1rem;
- line-height: 1.5;
-}
-
-/* 控制按钮 */
-.controls {
- text-align: center;
-}
-
-.refresh-btn {
- background: linear-gradient(135deg, #ffd700, #ffed4e);
- border: none;
- border-radius: 50px;
- padding: 15px 30px;
- font-size: 1.1rem;
- font-weight: 600;
- color: #2c1810;
- cursor: pointer;
- display: inline-flex;
- align-items: center;
- gap: 10px;
- transition: all 0.3s ease;
- box-shadow:
- 0 4px 15px rgba(212, 175, 55, 0.3),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
- position: relative;
- overflow: hidden;
-}
-
-.refresh-btn:hover {
- transform: translateY(-2px);
- box-shadow:
- 0 6px 20px rgba(212, 175, 55, 0.4),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
-}
-
-.refresh-btn:active {
- transform: translateY(0);
-}
-
-.refresh-btn:disabled {
- opacity: 0.6;
- cursor: not-allowed;
- transform: none;
-}
-
-.btn-icon {
- font-size: 1.2rem;
- transition: transform 0.3s ease;
-}
-
-.refresh-btn:hover .btn-icon {
- transform: rotate(180deg);
-}
-
-/* 底部 */
-.footer {
- margin-top: 40px;
- text-align: center;
- color: #b8860b;
- opacity: 0.8;
- font-size: 0.9rem;
-}
-
-/* 动画效果 */
-@keyframes titleGlow {
- 0% {
- text-shadow:
- 0 0 10px rgba(212, 175, 55, 0.8),
- 0 0 20px rgba(212, 175, 55, 0.6),
- 0 0 30px rgba(212, 175, 55, 0.4);
- }
- 100% {
- text-shadow:
- 0 0 15px rgba(212, 175, 55, 1),
- 0 0 25px rgba(212, 175, 55, 0.8),
- 0 0 35px rgba(212, 175, 55, 0.6);
- }
-}
-
-@keyframes borderGlow {
- 0% {
- background-position: 0% 50%;
- }
- 50% {
- background-position: 100% 50%;
- }
- 100% {
- background-position: 0% 50%;
- }
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (min-width: 768px) and (max-width: 1024px) {
- .container {
- padding: 30px;
- }
-
- .title {
- font-size: 3.5rem;
- }
-
- .subtitle {
- font-size: 1.3rem;
- }
-
- .quote-container {
- padding: 50px;
- }
-
- .quote-text {
- font-size: 2rem;
- }
-}
-
-/* 电脑端适配 (1024px+) */
-@media (min-width: 1024px) {
- .container {
- padding: 40px;
- }
-
- .title {
- font-size: 4rem;
- }
-
- .subtitle {
- font-size: 1.4rem;
- }
-
- .quote-container {
- padding: 60px;
- max-width: 900px;
- }
-
- .quote-text {
- font-size: 2.2rem;
- line-height: 1.9;
- }
-
- .refresh-btn {
- padding: 18px 36px;
- font-size: 1.2rem;
- }
-}
-
-/* 手机端适配 (小于768px) */
-@media (max-width: 767px) {
- .container {
- padding: 15px;
- }
-
- .header {
- margin-bottom: 30px;
- }
-
- .title {
- font-size: 2.5rem;
- }
-
- .subtitle {
- font-size: 1rem;
- }
-
- .quote-container {
- padding: 25px;
- border-radius: 15px;
- }
-
- .quote-text {
- font-size: 1.4rem;
- line-height: 1.6;
- }
-
- .refresh-btn {
- padding: 12px 24px;
- font-size: 1rem;
- }
-
- .footer {
- margin-top: 30px;
- font-size: 0.8rem;
- }
-}
-
-/* 超小屏幕适配 (小于480px) */
-@media (max-width: 479px) {
- .title {
- font-size: 2rem;
- }
-
- .quote-container {
- padding: 20px;
- }
-
- .quote-text {
- font-size: 1.2rem;
- }
-
- .refresh-btn {
- padding: 10px 20px;
- font-size: 0.9rem;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/index.html b/frontend/react-app/public/60sapi/娱乐消遣/随机一言/index.html
deleted file mode 100644
index 4ef88f30..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
- 随机一言 - 金色光辉
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/js/script.js b/frontend/react-app/public/60sapi/娱乐消遣/随机一言/js/script.js
deleted file mode 100644
index 5ce4546a..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/js/script.js
+++ /dev/null
@@ -1,225 +0,0 @@
-// 随机一言 JavaScript 功能实现
-
-class HitokotoApp {
- constructor() {
- // API接口列表
- this.apiEndpoints = [
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
- ];
-
- this.currentEndpointIndex = 0;
- this.isLoading = false;
-
- // DOM 元素
- this.elements = {
- loading: document.getElementById('loading'),
- quoteDisplay: document.getElementById('quoteDisplay'),
- quoteText: document.getElementById('quoteText'),
- quoteIndex: document.getElementById('quoteIndex'),
- errorMessage: document.getElementById('errorMessage'),
- errorText: document.getElementById('errorText'),
- refreshBtn: document.getElementById('refreshBtn')
- };
-
- this.init();
- }
-
- // 初始化应用
- init() {
- this.bindEvents();
- this.hideAllStates();
- this.showQuoteDisplay();
- }
-
- // 绑定事件
- bindEvents() {
- this.elements.refreshBtn.addEventListener('click', () => {
- this.fetchHitokoto();
- });
-
- // 键盘快捷键支持
- document.addEventListener('keydown', (e) => {
- if (e.code === 'Space' && !this.isLoading) {
- e.preventDefault();
- this.fetchHitokoto();
- }
- });
- }
-
- // 隐藏所有状态
- hideAllStates() {
- this.elements.loading.classList.remove('show');
- this.elements.quoteDisplay.classList.remove('hide');
- this.elements.errorMessage.classList.remove('show');
- }
-
- // 显示加载状态
- showLoading() {
- this.hideAllStates();
- this.elements.loading.classList.add('show');
- this.elements.quoteDisplay.classList.add('hide');
- this.elements.refreshBtn.disabled = true;
- this.isLoading = true;
- }
-
- // 显示一言内容
- showQuoteDisplay() {
- this.hideAllStates();
- this.elements.quoteDisplay.classList.remove('hide');
- this.elements.refreshBtn.disabled = false;
- this.isLoading = false;
- }
-
- // 显示错误信息
- showError(message) {
- this.hideAllStates();
- this.elements.errorMessage.classList.add('show');
- this.elements.errorText.textContent = message;
- this.elements.refreshBtn.disabled = false;
- this.isLoading = false;
- }
-
- // 获取一言数据
- async fetchHitokoto() {
- if (this.isLoading) return;
-
- this.showLoading();
-
- // 尝试所有API接口
- for (let i = 0; i < this.apiEndpoints.length; i++) {
- const endpointIndex = (this.currentEndpointIndex + i) % this.apiEndpoints.length;
- const endpoint = this.apiEndpoints[endpointIndex];
-
- try {
- const result = await this.tryFetchFromEndpoint(endpoint);
- if (result.success) {
- this.currentEndpointIndex = endpointIndex;
- this.displayHitokoto(result.data);
- return;
- }
- } catch (error) {
- console.warn(`接口 ${endpoint} 请求失败:`, error.message);
- continue;
- }
- }
-
- // 所有接口都失败
- this.showError('所有接口都无法访问,请检查网络连接或稍后重试');
- }
-
- // 尝试从指定接口获取数据
- async tryFetchFromEndpoint(endpoint) {
- const controller = new AbortController();
- const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时
-
- try {
- const response = await fetch(`${endpoint}/v2/hitokoto?encoding=text`, {
- method: 'GET',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- signal: controller.signal
- });
-
- clearTimeout(timeoutId);
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- }
-
- const data = await response.json();
-
- // 验证返回数据格式
- if (data.code === 200 && data.data && data.data.hitokoto) {
- return {
- success: true,
- data: data.data
- };
- } else {
- throw new Error('返回数据格式不正确');
- }
-
- } catch (error) {
- clearTimeout(timeoutId);
-
- if (error.name === 'AbortError') {
- throw new Error('请求超时');
- }
-
- throw error;
- }
- }
-
- // 显示一言内容
- displayHitokoto(data) {
- // 更新一言文本
- this.elements.quoteText.textContent = data.hitokoto;
-
- // 更新序号信息
- if (data.index) {
- this.elements.quoteIndex.textContent = `第 ${data.index} 条`;
- } else {
- this.elements.quoteIndex.textContent = '';
- }
-
- // 添加淡入动画效果
- this.elements.quoteText.style.opacity = '0';
- this.elements.quoteIndex.style.opacity = '0';
-
- setTimeout(() => {
- this.elements.quoteText.style.transition = 'opacity 0.5s ease';
- this.elements.quoteIndex.style.transition = 'opacity 0.5s ease';
- this.elements.quoteText.style.opacity = '1';
- this.elements.quoteIndex.style.opacity = '1';
- }, 100);
-
- this.showQuoteDisplay();
-
- // 控制台输出调试信息
- console.log('一言获取成功:', {
- content: data.hitokoto,
- index: data.index,
- endpoint: this.apiEndpoints[this.currentEndpointIndex]
- });
- }
-
- // 获取随机接口(用于负载均衡)
- getRandomEndpoint() {
- const randomIndex = Math.floor(Math.random() * this.apiEndpoints.length);
- return this.apiEndpoints[randomIndex];
- }
-}
-
-// 页面加载完成后初始化应用
-document.addEventListener('DOMContentLoaded', () => {
- const app = new HitokotoApp();
-
- // 添加全局错误处理
- window.addEventListener('error', (event) => {
- console.error('页面发生错误:', event.error);
- });
-
- window.addEventListener('unhandledrejection', (event) => {
- console.error('未处理的Promise拒绝:', event.reason);
- });
-
- // 页面可见性变化时的处理
- document.addEventListener('visibilitychange', () => {
- if (!document.hidden && !app.isLoading) {
- // 页面重新可见时,可以选择刷新内容
- console.log('页面重新可见');
- }
- });
-
- console.log('随机一言应用初始化完成');
-});
-
-// 导出应用类(如果需要在其他地方使用)
-if (typeof module !== 'undefined' && module.exports) {
- module.exports = HitokotoApp;
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/接口集合.json b/frontend/react-app/public/60sapi/娱乐消遣/随机一言/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机一言/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/css/style.css b/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/css/style.css
deleted file mode 100644
index c6b6f0d6..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/css/style.css
+++ /dev/null
@@ -1,251 +0,0 @@
-/* 随机唱歌音频 - 淡绿色清新风格样式 */
-
-/* 重置样式 */
-* {
- 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: 900px;
- margin: 0 auto;
- padding: 20px;
-}
-
-/* 头部 */
-.header {
- text-align: center;
- margin-bottom: 20px;
- background: rgba(255, 255, 255, 0.85);
- border-radius: 20px;
- padding: 24px;
- box-shadow: 0 8px 25px rgba(45, 80, 22, 0.08);
- backdrop-filter: blur(10px);
-}
-
-.header h1 {
- font-size: 2rem;
- color: #2d5016;
- margin-bottom: 10px;
- font-weight: 700;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 12px;
-}
-
-.header p {
- color: #5a7c65;
- font-size: 1rem;
-}
-
-/* 用户卡片 */
-.user-card {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 15px;
- background: rgba(255, 255, 255, 0.9);
- padding: 16px;
- border-radius: 15px;
- box-shadow: 0 4px 18px rgba(45, 80, 22, 0.08);
- margin-bottom: 15px;
- text-align: center;
-}
-
-.avatar {
- width: 56px;
- height: 56px;
- border-radius: 50%;
- object-fit: cover;
- border: 3px solid rgba(129, 199, 132, 0.5);
-}
-
-.user-info {
- display: flex;
- flex-direction: column;
-}
-
-.nickname {
- font-weight: 700;
- font-size: 1.1rem;
- color: #2d5016;
-}
-
-.meta {
- color: #5a7c65;
- font-size: 0.9rem;
-}
-
-/* 歌曲信息 */
-.song-card {
- background: rgba(255, 255, 255, 0.9);
- padding: 16px;
- border-radius: 15px;
- box-shadow: 0 4px 18px rgba(45, 80, 22, 0.08);
- margin-bottom: 15px;
- text-align: center;
-}
-
-.song-title {
- font-size: 1.2rem;
- font-weight: 700;
- margin-bottom: 8px;
- color: #1b5e20;
-}
-
-.song-meta {
- color: #5a7c65;
- font-size: 0.95rem;
- margin-bottom: 10px;
-}
-
-/* 歌词 */
-.lyrics {
- background: rgba(129, 199, 132, 0.1);
- border-radius: 12px;
- padding: 12px;
- max-height: 220px;
- overflow: auto;
-}
-
-.lyrics p {
- margin-bottom: 6px;
-}
-
-/* 音频播放器卡片 */
-.audio-card {
- background: rgba(255, 255, 255, 0.9);
- padding: 16px;
- border-radius: 15px;
- box-shadow: 0 4px 18px rgba(45, 80, 22, 0.08);
- margin-bottom: 15px;
-}
-
-.audio-actions {
- display: flex;
- flex-direction: column;
- gap: 12px;
- align-items: center;
- margin-top: 10px;
-}
-
-.btn {
- background: linear-gradient(135deg, #81c784 0%, #66bb6a 100%);
- color: white;
- border: none;
- padding: 10px 18px;
- border-radius: 10px;
- font-size: 0.95rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.25s ease;
- box-shadow: 0 4px 12px rgba(129, 199, 132, 0.35);
- text-decoration: none;
-}
-
-.btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 18px rgba(129, 199, 132, 0.45);
-}
-
-.info {
- color: #5a7c65;
- font-size: 0.9rem;
-}
-
-/* 加载与错误 */
-.loading, .error {
- text-align: center;
- padding: 30px;
- background: rgba(255, 255, 255, 0.85);
- border-radius: 15px;
- box-shadow: 0 5px 20px rgba(45, 80, 22, 0.08);
-}
-
-.spinner {
- width: 36px;
- height: 36px;
- border: 4px solid #e8f5e8;
- border-top: 4px solid #81c784;
- border-radius: 50%;
- animation: spin 1s linear infinite;
- margin: 0 auto 18px;
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-/* 动画 */
-.fade-in {
- animation: fadeIn 0.5s ease-in-out;
-}
-
-@keyframes fadeIn {
- from { opacity: 0; transform: translateY(10px); }
- to { opacity: 1; transform: translateY(0); }
-}
-
-/* 平板端适配 */
-@media (max-width: 1024px) and (min-width: 768px) {
- .container { padding: 16px; }
- .header h1 { font-size: 1.8rem; }
-}
-
-/* 手机端优先优化 */
-@media (max-width: 767px) {
- .container { padding: 12px; }
- .header { padding: 18px; }
- .header h1 { font-size: 1.6rem; gap: 8px; }
-
- .user-card {
- padding: 16px;
- flex-direction: column;
- text-align: center;
- }
-
- .avatar {
- width: 80px;
- height: 80px;
- margin-bottom: 8px;
- }
-
- .song-card, .audio-card {
- padding: 16px;
- }
-
- .lyrics {
- max-height: 180px;
- text-align: left;
- padding: 16px;
- }
-
- .audio-actions {
- flex-direction: column;
- gap: 15px;
- align-items: center;
- }
-
- .info {
- text-align: center;
- line-height: 1.8;
- }
-
- .btn {
- width: 100%;
- max-width: 200px;
- text-align: center;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/index.html b/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/index.html
deleted file mode 100644
index 3134b76d..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
- 随机唱歌音频 - 60s API 集合
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
![用户头像]()
-
-
-
-
-
-
-
-
-
-
-
-
- ❤ 喜欢:
-
- · ⏱ 时长:
--:--
- · 🗓 发布:
-
- · 🔗
查看原帖
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/js/script.js b/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/js/script.js
deleted file mode 100644
index 598eb5d6..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/js/script.js
+++ /dev/null
@@ -1,252 +0,0 @@
-// 随机唱歌音频 页面脚本
-(function () {
- 'use strict';
-
- 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/changya`);
- } catch (e) {
- // 如果无法加载接口集合,使用默认接口
- this.endpoints = ['https://60s.viki.moe/v2/changya'];
- }
- },
- // 获取当前接口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;
- }
- };
-
- // DOM 元素引用
- const els = {
- loading: null,
- error: null,
- container: null,
- avatar: null,
- nickname: null,
- gender: null,
- songTitle: null,
- songMeta: null,
- lyrics: null,
- audio: null,
- likeCount: null,
- publishTime: null,
- link: null,
- refreshBtn: null,
- };
-
- function initDom() {
- els.loading = document.getElementById('loading');
- els.error = document.getElementById('error');
- els.container = document.getElementById('content');
-
- els.avatar = document.getElementById('avatar');
- els.nickname = document.getElementById('nickname');
- els.gender = document.getElementById('gender');
- els.songTitle = document.getElementById('song-title');
- els.songMeta = document.getElementById('song-meta');
- els.lyrics = document.getElementById('lyrics');
-
- els.audio = document.getElementById('audio');
- els.likeCount = document.getElementById('like-count');
- els.publishTime = document.getElementById('publish-time');
- els.link = document.getElementById('link');
- els.refreshBtn = document.getElementById('refresh-btn');
- }
-
- function showLoading() {
- els.loading.style.display = 'block';
- els.error.style.display = 'none';
- els.container.style.display = 'none';
- }
-
- function showError(msg) {
- els.loading.style.display = 'none';
- els.error.style.display = 'block';
- els.container.style.display = 'none';
- els.error.querySelector('p').textContent = msg || '获取数据失败,请稍后重试';
- }
-
- function showContent() {
- els.loading.style.display = 'none';
- els.error.style.display = 'none';
- els.container.style.display = 'block';
- }
-
- function formatDuration(ms) {
- if (!ms && ms !== 0) return '';
- const totalSeconds = Math.floor(ms / 1000);
- const m = Math.floor(totalSeconds / 60).toString().padStart(2, '0');
- const s = (totalSeconds % 60).toString().padStart(2, '0');
- return `${m}:${s}`;
- }
-
- function safeText(text) {
- const div = document.createElement('div');
- div.textContent = text == null ? '' : String(text);
- return div.innerHTML;
- }
-
- 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 render(data) {
- const d = data?.data || {};
- const user = d.user || {};
- const song = d.song || {};
- const audio = d.audio || {};
-
- // 用户信息
- els.avatar.src = user.avatar_url || '';
- els.avatar.alt = (user.nickname || '用户') + ' 头像';
- els.nickname.textContent = user.nickname || '未知用户';
- els.gender.textContent = user.gender === 'female' ? '女' : user.gender === 'male' ? '男' : '未知';
-
- // 歌曲信息
- els.songTitle.textContent = song.name || '未知歌曲';
- els.songMeta.textContent = song.singer ? `演唱:${song.singer}` : '';
-
- els.lyrics.innerHTML = '';
- if (Array.isArray(song.lyrics)) {
- const frag = document.createDocumentFragment();
- song.lyrics.forEach(line => {
- const p = document.createElement('p');
- p.innerHTML = safeText(line);
- frag.appendChild(p);
- });
- els.lyrics.appendChild(frag);
- }
-
- // 音频
- els.audio.src = audio.url || '';
- els.audio.preload = 'none';
-
- // 其他信息
- els.likeCount.textContent = typeof audio.like_count === 'number' ? audio.like_count : '-';
- const publish = audio.publish || (audio.publish_at ? new Date(audio.publish_at).toLocaleString() : '');
- els.publishTime.textContent = publish;
- els.link.href = audio.link || '#';
- els.link.target = '_blank';
-
- // 时长信息
- const durationEl = document.getElementById('duration');
- durationEl.textContent = formatDuration(audio.duration);
-
- showContent();
- }
-
- async function load() {
- showLoading();
- try {
- // 先尝试远程API
- const data = await fetchFromAPI();
- if (data) {
- render(data);
- return;
- }
-
- // 远程API失败,尝试本地数据
- const localData = await fetchFromLocal();
- if (localData) {
- render(localData);
- return;
- }
-
- // 都失败了
- showError('获取数据失败,请稍后重试');
- } catch (e) {
- console.error('加载数据时发生错误:', e);
- showError('获取数据失败,请稍后重试');
- }
- }
-
- function bindEvents() {
- if (els.refreshBtn) {
- els.refreshBtn.addEventListener('click', load);
- }
- // 快捷键 Ctrl+R 刷新(不拦截浏览器默认刷新)
- }
-
- document.addEventListener('DOMContentLoaded', () => {
- initDom();
- bindEvents();
- load();
- });
-})();
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/接口集合.json b/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/返回接口.json b/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/返回接口.json
deleted file mode 100644
index d364f524..00000000
--- a/frontend/react-app/public/60sapi/娱乐消遣/随机唱歌音频/返回接口.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": {
- "user": {
- "nickname": "𝑮𝑺_迷鹿_",
- "gender": "female",
- "avatar_url": "http://img-cdn.api.singduck.cn/user-img/6afbebcfae6144478c150d0c1d0d5899.jpg"
- },
- "song": {
- "name": "恶作剧",
- "singer": "王蓝茵",
- "lyrics": [
- "我想我会开始想念你",
- "可是我刚刚才遇见了你",
- "我怀疑这奇遇只是个恶作剧",
- "我想我已慢慢喜欢你",
- "因为我拥有爱情的勇气",
- "我任性投入你给的恶作剧",
- "你给的恶作剧"
- ]
- },
- "audio": {
- "url": "http://audio-cdn.api.singduck.cn/ugc/220929_965696173_b822a290c553.wav?auth_key=1755845643-0-0-4029539b73e17337dcac49cc4e0ecfcc",
- "duration": 35050,
- "like_count": 955,
- "link": "https://m.api.singduck.cn/user-piece/toGZlBfZbukck2sHb",
- "publish": "2022/09/29 18:33:51",
- "publish_at": 1664447631000
- }
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/css/style.css b/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/css/style.css
deleted file mode 100644
index 30d4f120..00000000
--- a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/css/style.css
+++ /dev/null
@@ -1,330 +0,0 @@
-/* Epic Games 免费游戏 - 淡绿色清新风格样式 */
-
-/* 重置样式 */
-* {
- 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: 24px;
- box-shadow: 0 8px 25px rgba(45, 80, 22, 0.08);
- backdrop-filter: blur(10px);
-}
-
-.header h1 {
- font-size: 2.2rem;
- color: #2d5016;
- margin-bottom: 10px;
- font-weight: 700;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 12px;
-}
-
-.header p {
- color: #5a7c65;
- font-size: 1rem;
-}
-
-/* 统计信息 */
-.stats {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
- gap: 15px;
- margin-bottom: 25px;
-}
-
-.stat-card {
- background: rgba(255, 255, 255, 0.9);
- padding: 16px;
- border-radius: 15px;
- text-align: center;
- box-shadow: 0 4px 18px rgba(45, 80, 22, 0.08);
-}
-
-.stat-number {
- font-size: 1.8rem;
- font-weight: 700;
- color: #1b5e20;
- margin-bottom: 5px;
-}
-
-.stat-label {
- color: #5a7c65;
- font-size: 0.9rem;
-}
-
-/* 游戏网格 */
-.games-grid {
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
- gap: 20px;
- margin-bottom: 20px;
-}
-
-/* 游戏卡片 */
-.game-card {
- background: rgba(255, 255, 255, 0.95);
- border-radius: 18px;
- overflow: hidden;
- box-shadow: 0 6px 25px rgba(45, 80, 22, 0.1);
- transition: all 0.3s ease;
- position: relative;
-}
-
-.game-card:hover {
- transform: translateY(-5px);
- box-shadow: 0 12px 35px rgba(45, 80, 22, 0.15);
-}
-
-.game-cover {
- width: 100%;
- height: 180px;
- object-fit: cover;
- border-radius: 0;
-}
-
-.game-info {
- padding: 18px;
-}
-
-.game-title {
- font-size: 1.1rem;
- font-weight: 700;
- color: #1b5e20;
- margin-bottom: 8px;
- line-height: 1.3;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
-}
-
-.game-description {
- color: #5a7c65;
- font-size: 0.9rem;
- margin-bottom: 12px;
- display: -webkit-box;
- -webkit-line-clamp: 3;
- -webkit-box-orient: vertical;
- overflow: hidden;
- line-height: 1.4;
-}
-
-.game-meta {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 12px;
-}
-
-.game-price {
- font-size: 1rem;
- font-weight: 600;
-}
-
-.original-price {
- color: #81c784;
- text-decoration: line-through;
-}
-
-.free-price {
- color: #2e7d32;
- font-weight: 700;
-}
-
-.game-seller {
- color: #5a7c65;
- font-size: 0.85rem;
-}
-
-.game-dates {
- background: rgba(129, 199, 132, 0.1);
- padding: 10px;
- border-radius: 10px;
- margin-bottom: 12px;
- font-size: 0.85rem;
- color: #2d5016;
-}
-
-.free-period {
- display: flex;
- justify-content: space-between;
- margin-bottom: 4px;
-}
-
-.game-actions {
- display: flex;
- gap: 10px;
-}
-
-.btn {
- flex: 1;
- background: linear-gradient(135deg, #81c784 0%, #66bb6a 100%);
- color: white;
- border: none;
- padding: 10px 16px;
- border-radius: 10px;
- font-size: 0.9rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.25s ease;
- box-shadow: 0 4px 12px rgba(129, 199, 132, 0.35);
- text-decoration: none;
- text-align: center;
- display: inline-block;
-}
-
-.btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 18px rgba(129, 199, 132, 0.45);
-}
-
-.btn-secondary {
- background: linear-gradient(135deg, #a5d6a7 0%, #81c784 100%);
-}
-
-/* 状态标签 */
-.status-badge {
- position: absolute;
- top: 12px;
- right: 12px;
- padding: 6px 12px;
- border-radius: 20px;
- font-size: 0.8rem;
- font-weight: 600;
- color: white;
- text-shadow: 0 1px 2px rgba(0,0,0,0.2);
-}
-
-.status-free {
- background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
-}
-
-.status-upcoming {
- background: linear-gradient(135deg, #ff9800 0%, #f57c00 100%);
-}
-
-/* 加载与错误 */
-.loading, .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);
-}
-
-.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); }
-}
-
-/* 动画 */
-.fade-in {
- animation: fadeIn 0.6s ease-in-out;
-}
-
-@keyframes fadeIn {
- from { opacity: 0; transform: translateY(20px); }
- to { opacity: 1; transform: translateY(0); }
-}
-
-/* 平板端适配 */
-@media (max-width: 1024px) and (min-width: 768px) {
- .container { padding: 16px; }
- .header h1 { font-size: 2rem; }
- .games-grid { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
-}
-
-/* 手机端优化 */
-@media (max-width: 767px) {
- .container { padding: 12px; }
- .header { padding: 18px; }
- .header h1 { font-size: 1.8rem; gap: 8px; }
-
- .stats {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- gap: 8px;
- }
-
- .stat-card {
- padding: 10px 8px;
- flex: 1;
- min-width: 0;
- }
- .stat-number { font-size: 1.4rem; }
- .stat-label { font-size: 0.75rem; }
-
- .games-grid {
- grid-template-columns: 1fr;
- gap: 16px;
- }
-
- .game-card { margin: 0 4px; }
- .game-cover { height: 160px; }
- .game-info { padding: 14px; }
-
- .game-actions {
- flex-direction: column;
- }
-
- .btn {
- width: 100%;
- padding: 12px;
- }
-}
-
-/* 小屏手机优化 */
-@media (max-width: 480px) {
- .stats {
- grid-template-columns: 1fr;
- }
-
- .game-meta {
- flex-direction: column;
- align-items: flex-start;
- gap: 6px;
- }
-}
-
-/* 高分辨率显示器优化 */
-@media (min-width: 1400px) {
- .games-grid {
- grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/index.html b/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/index.html
deleted file mode 100644
index c29c106f..00000000
--- a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/index.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
- Epic Games 免费游戏 - 60s API 集合
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/js/script.js b/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/js/script.js
deleted file mode 100644
index c9592876..00000000
--- a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/js/script.js
+++ /dev/null
@@ -1,266 +0,0 @@
-// Epic Games 免费游戏 页面脚本
-(function () {
- 'use strict';
-
- const API = {
- endpoints: [],
- currentIndex: 0,
- // 初始化API接口列表
- async init() {
- try {
- const res = await fetch('./接口集合.json');
- const endpoints = await res.json();
- this.endpoints = endpoints.map(endpoint => `${endpoint}/v2/epic`);
- } catch (e) {
- // 如果无法加载接口集合,使用默认接口
- this.endpoints = ['https://60s-api.viki.moe/v2/epic'];
- }
- },
- // 获取当前接口URL
- getCurrentUrl(encoding) {
- if (this.endpoints.length === 0) return null;
- const url = new URL(this.endpoints[this.currentIndex]);
- if (encoding) url.searchParams.set('encoding', encoding);
- return url.toString();
- },
- // 切换到下一个接口
- switchToNext() {
- this.currentIndex = (this.currentIndex + 1) % this.endpoints.length;
- return this.currentIndex < this.endpoints.length;
- },
- // 重置到第一个接口
- reset() {
- this.currentIndex = 0;
- }
- };
-
- // DOM 元素引用
- const els = {
- loading: null,
- error: null,
- container: null,
- gamesGrid: null,
- totalGames: null,
- freeNow: null,
- upcoming: null,
- refreshBtn: null,
- };
-
- function initDom() {
- els.loading = document.getElementById('loading');
- els.error = document.getElementById('error');
- els.container = document.getElementById('content');
- els.gamesGrid = document.getElementById('games-grid');
- els.totalGames = document.getElementById('total-games');
- els.freeNow = document.getElementById('free-now');
- els.upcoming = document.getElementById('upcoming');
- els.refreshBtn = document.getElementById('refresh-btn');
- }
-
- function showLoading() {
- els.loading.style.display = 'block';
- els.error.style.display = 'none';
- els.container.style.display = 'none';
- }
-
- function showError(msg) {
- els.loading.style.display = 'none';
- els.error.style.display = 'block';
- els.container.style.display = 'none';
- els.error.querySelector('p').textContent = msg || '获取数据失败,请稍后重试';
- }
-
- function showContent() {
- els.loading.style.display = 'none';
- els.error.style.display = 'none';
- els.container.style.display = 'block';
- }
-
- function safeText(text) {
- const div = document.createElement('div');
- div.textContent = text == null ? '' : String(text);
- return div.innerHTML;
- }
-
- function formatDate(dateStr) {
- if (!dateStr) return '';
- try {
- const date = new Date(dateStr);
- return date.toLocaleDateString('zh-CN', {
- month: '2-digit',
- day: '2-digit',
- hour: '2-digit',
- minute: '2-digit'
- });
- } catch (e) {
- return dateStr;
- }
- }
-
- async function fetchData(preferLocal = false) {
- if (preferLocal) {
- try {
- const res = await fetch('./返回接口.json', { cache: 'no-store' });
- const json = await res.json();
- return json;
- } catch (e) {
- throw new Error('本地数据加载失败');
- }
- }
-
- // 重置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 res = await fetch(url, {
- cache: 'no-store',
- timeout: 10000 // 10秒超时
- });
-
- if (!res.ok) {
- throw new Error(`HTTP ${res.status}: ${res.statusText}`);
- }
-
- const json = await res.json();
-
- if (json && json.code === 200) {
- console.log(`接口 ${i + 1} 请求成功`);
- return json;
- }
-
- throw new Error(json && json.message ? json.message : '接口返回异常');
-
- } catch (e) {
- console.warn(`接口 ${i + 1} 失败:`, e.message);
-
- // 如果不是最后一个接口,切换到下一个
- if (i < API.endpoints.length - 1) {
- API.switchToNext();
- continue;
- }
-
- // 所有接口都失败了,尝试本地数据
- console.warn('所有远程接口都失败,尝试本地数据');
- try {
- const res = await fetch('./返回接口.json', { cache: 'no-store' });
- const json = await res.json();
- return json;
- } catch (e2) {
- throw new Error('所有接口和本地数据都无法访问');
- }
- }
- }
- }
-
- function createGameCard(game) {
- const isFree = game.is_free_now;
- const statusClass = isFree ? 'status-free' : 'status-upcoming';
- const statusText = isFree ? '限时免费' : '即将免费';
-
- return `
-
-
${statusText}
-
})
-
-
${safeText(game.title)}
-
${safeText(game.description)}
-
-
-
-
-
- 开始:${formatDate(game.free_start)}
- 结束:${formatDate(game.free_end)}
-
-
-
-
-
-
- `;
- }
-
- function updateStats(games) {
- const total = games.length;
- const freeNow = games.filter(game => game.is_free_now).length;
- const upcoming = total - freeNow;
-
- els.totalGames.textContent = total;
- els.freeNow.textContent = freeNow;
- els.upcoming.textContent = upcoming;
- }
-
- function renderGames(games) {
- if (!Array.isArray(games) || games.length === 0) {
- els.gamesGrid.innerHTML = '暂无游戏数据
';
- return;
- }
-
- // 按状态排序:免费的在前
- const sortedGames = [...games].sort((a, b) => {
- if (a.is_free_now && !b.is_free_now) return -1;
- if (!a.is_free_now && b.is_free_now) return 1;
- return 0;
- });
-
- const html = sortedGames.map(game => createGameCard(game)).join('');
- els.gamesGrid.innerHTML = html;
-
- updateStats(games);
- }
-
- function render(data) {
- const games = data?.data || [];
- renderGames(games);
- showContent();
- }
-
- async function load() {
- showLoading();
-
- // 初始化API接口列表
- await API.init();
-
- try {
- const data = await fetchData(false);
- render(data);
- } catch (e) {
- console.error('数据获取失败:', e);
- showError(e.message || '获取数据失败,请稍后重试');
- }
- }
-
- function bindEvents() {
- if (els.refreshBtn) {
- els.refreshBtn.addEventListener('click', load);
- }
-
- // 快捷键 Ctrl+R 刷新(不拦截浏览器默认刷新)
- document.addEventListener('keydown', (e) => {
- if (e.ctrlKey && e.key === 'r' && !e.defaultPrevented) {
- // 不阻止默认行为,让浏览器正常刷新
- }
- });
- }
-
- document.addEventListener('DOMContentLoaded', () => {
- initDom();
- bindEvents();
- load();
- });
-})();
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/接口集合.json b/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/返回接口.json b/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/返回接口.json
deleted file mode 100644
index 7804d62a..00000000
--- a/frontend/react-app/public/60sapi/实用功能/EpicGames免费游戏/返回接口.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": [
- {
- "id": "9aa227e2ba294bb1a95c95fde892eb31",
- "title": "《Totally Reliable Delivery Service》 Standard Edition",
- "cover": "https://cdn1.epicgames.com/52b90f9a982a404781b189f6a7903226/offer/EGS_TotallyReliableDeliveryService_WereFiveGames_S1-2560x1440-47e6e9562d62705a75ea7b7096d0b8dc.jpg",
- "original_price": 52,
- "original_price_desc": "¥52.00",
- "description": "穿好护腰护具,发动货车,送货的时间到啦!在一个高度互动的沙盒世界中,与最多三位好友一起随意地完成送货。货物已试投,这就是我们靠谱快递(Totally Reliable Delivery Service)的品质保证!",
- "seller": "Infogrames LLC",
- "is_free_now": true,
- "free_start": "2025/08/14 23:00:00",
- "free_start_at": 1755183600000,
- "free_end": "2025/08/21 23:00:00",
- "free_end_at": 1755788400000,
- "link": "https://store.epicgames.com/store/zh-CN/p/totally-reliable-delivery-service/home"
- },
- {
- "id": "8ea3500dc38e4f429702bf889c172d3d",
- "title": "Hidden Folks",
- "cover": "https://cdn1.epicgames.com/spt-assets/7bfd56b0586348dcb139945d9e59f988/hidden-folks-1b7hh.png",
- "original_price": 47,
- "original_price_desc": "¥47.00",
- "description": "Search for hidden folks in hand-drawn, interactive, miniature landscapes. Unfurl tent flaps, cut through bushes, slam doors, and poke some crocodiles! Rooooaaaarrrr!!!!!",
- "seller": "Adriaan de Jongh",
- "is_free_now": true,
- "free_start": "2025/08/14 23:00:00",
- "free_start_at": 1755183600000,
- "free_end": "2025/08/21 23:00:00",
- "free_end_at": 1755788400000,
- "link": "https://store.epicgames.com/store/zh-CN/p/hidden-folks-239d16"
- },
- {
- "id": "4cbb6c3704d240f19c3dd5f5cb2b0cb4",
- "title": "Kamaeru",
- "cover": "https://cdn1.epicgames.com/spt-assets/44313cfbb62b4df5801d0c8d541c2624/kamaeru-40asc.png",
- "original_price": 62,
- "original_price_desc": "¥62.00",
- "description": "Foster a sanctuary for frogs and restore the biodiversity of the wetlands in Kamaeru, a cozy frog collecting game, where you take pictures of frogs, play mini-games and decorate your habitat. Hop right to it!",
- "seller": "Armor Games Studios",
- "is_free_now": false,
- "free_start": "2025/08/21 23:00:00",
- "free_start_at": 1755788400000,
- "free_end": "2025/08/28 23:00:00",
- "free_end_at": 1756393200000,
- "link": "https://store.epicgames.com/store/zh-CN/p/kamaeru-0c301e"
- },
- {
- "id": "0d9a533f0e684cc18620a8f408e8e72c",
- "title": "Strange Horticulture",
- "cover": "https://cdn1.epicgames.com/spt-assets/15e8e3eba65a4763a815d6eae1d763b2/strange-horticulture-offer-2wghv.png",
- "original_price": 45,
- "original_price_desc": "¥45.00",
- "description": "款神秘学解谜游戏,你将扮演当地植物商店的店主,寻找并识别新的植物,悠闲撸猫,与女巫团体交谈,或加入异教。收集各种强大的植物,用它们来影响故事走向,揭开昂德米尔镇的黑暗谜团。",
- "seller": "Iceberg Interactive",
- "is_free_now": false,
- "free_start": "2025/08/21 23:00:00",
- "free_start_at": 1755788400000,
- "free_end": "2025/08/28 23:00:00",
- "free_end_at": 1756393200000,
- "link": "https://store.epicgames.com/store/zh-CN/p/strange-horticulture-360e80"
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/农历信息/css/background.css b/frontend/react-app/public/60sapi/实用功能/农历信息/css/background.css
deleted file mode 100644
index 254496c1..00000000
--- a/frontend/react-app/public/60sapi/实用功能/农历信息/css/background.css
+++ /dev/null
@@ -1,89 +0,0 @@
-/* 玻璃拟态背景相关样式 */
-body {
- background: linear-gradient(135deg,
- #667eea 0%,
- #764ba2 25%,
- #f093fb 50%,
- #f5576c 75%,
- #4facfe 100%
- );
- background-size: 400% 400%;
- animation: gradientShift 20s ease infinite;
- background-attachment: fixed;
- min-height: 100vh;
- position: relative;
-}
-
-@keyframes gradientShift {
- 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, 255, 255, 0.1) 0%, transparent 40%),
- radial-gradient(circle at 80% 80%, rgba(255, 255, 255, 0.08) 0%, transparent 40%),
- radial-gradient(circle at 40% 60%, rgba(255, 255, 255, 0.06) 0%, transparent 30%),
- radial-gradient(circle at 60% 30%, rgba(255, 255, 255, 0.05) 0%, transparent 35%);
- pointer-events: none;
- z-index: -1;
- animation: glassFloat 25s 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% 20%, rgba(255, 255, 255, 0.3) 2px, transparent 2px),
- radial-gradient(circle at 30% 40%, rgba(255, 255, 255, 0.25) 3px, transparent 3px),
- radial-gradient(circle at 50% 60%, rgba(255, 255, 255, 0.2) 1.5px, transparent 1.5px),
- radial-gradient(circle at 70% 80%, rgba(255, 255, 255, 0.3) 2.5px, transparent 2.5px),
- radial-gradient(circle at 90% 10%, rgba(255, 255, 255, 0.25) 2px, transparent 2px),
- radial-gradient(circle at 20% 90%, rgba(255, 255, 255, 0.2) 1px, transparent 1px);
- background-size: 300px 300px, 250px 250px, 400px 400px, 200px 200px, 350px 350px, 150px 150px;
- animation: bubbleFloat 30s linear infinite;
- pointer-events: none;
- z-index: -1;
- opacity: 0.7;
-}
-
-@keyframes glassFloat {
- 0% {
- transform: translateY(0px) rotate(0deg);
- opacity: 0.7;
- }
- 100% {
- transform: translateY(-20px) rotate(2deg);
- opacity: 0.9;
- }
-}
-
-@keyframes bubbleFloat {
- 0%, 100% {
- transform: translateX(0) translateY(0);
- }
- 25% {
- transform: translateX(-15px) translateY(-10px);
- }
- 50% {
- transform: translateX(10px) translateY(-20px);
- }
- 75% {
- transform: translateX(-5px) translateY(-15px);
- }
-}
diff --git a/frontend/react-app/public/60sapi/实用功能/农历信息/css/style.css b/frontend/react-app/public/60sapi/实用功能/农历信息/css/style.css
deleted file mode 100644
index 1c679c5f..00000000
--- a/frontend/react-app/public/60sapi/实用功能/农历信息/css/style.css
+++ /dev/null
@@ -1,1105 +0,0 @@
-/* 重置样式 */
-* {
- 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: #2c3e50;
- overflow-x: hidden;
-}
-
-/* 容器 */
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 20px;
- animation: containerFadeIn 1s ease-out;
-}
-
-@keyframes containerFadeIn {
- from {
- opacity: 0;
- transform: translateY(30px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/* 玻璃拟态基础样式 */
-.glass-morphism {
- background: rgba(255, 255, 255, 0.15);
- backdrop-filter: blur(20px);
- -webkit-backdrop-filter: blur(20px);
- border: 1px solid rgba(255, 255, 255, 0.2);
- box-shadow:
- 0 8px 32px 0 rgba(31, 38, 135, 0.15),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
- border-radius: 20px;
-}
-
-/* 头部 */
-.header {
- text-align: center;
- margin-bottom: 40px;
- background: rgba(255, 255, 255, 0.1);
- backdrop-filter: blur(25px);
- -webkit-backdrop-filter: blur(25px);
- padding: 40px 30px;
- border-radius: 25px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- box-shadow:
- 0 8px 32px 0 rgba(31, 38, 135, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.4);
- position: relative;
- overflow: hidden;
-}
-
-.header::before {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(90deg,
- transparent,
- rgba(255, 255, 255, 0.1),
- transparent
- );
- animation: headerShimmer 6s ease-in-out infinite;
-}
-
-@keyframes headerShimmer {
- 0% { left: -100%; }
- 50% { left: 100%; }
- 100% { left: 100%; }
-}
-
-.header-icon {
- font-size: 4em;
- margin-bottom: 15px;
- animation: iconFloat 3s ease-in-out infinite;
- text-shadow: 0 0 20px rgba(255, 255, 255, 0.5);
-}
-
-@keyframes iconFloat {
- 0%, 100% {
- transform: translateY(0) scale(1);
- filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.3));
- }
- 50% {
- transform: translateY(-10px) scale(1.05);
- filter: drop-shadow(0 5px 15px rgba(255, 255, 255, 0.5));
- }
-}
-
-.title {
- font-size: 3.2em;
- font-weight: 800;
- color: rgba(255, 255, 255, 0.95);
- margin-bottom: 10px;
- text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
- letter-spacing: 2px;
- animation: titleGlow 4s ease-in-out infinite alternate;
-}
-
-@keyframes titleGlow {
- 0% {
- text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
- color: rgba(255, 255, 255, 0.95);
- }
- 100% {
- text-shadow: 0 0 20px rgba(255, 255, 255, 0.8), 0 2px 10px rgba(0, 0, 0, 0.3);
- color: rgba(255, 255, 255, 1);
- }
-}
-
-.subtitle {
- font-size: 1.3em;
- color: rgba(255, 255, 255, 0.8);
- margin-bottom: 30px;
- font-weight: 500;
- text-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
-}
-
-/* 日期选择器 */
-.date-selector {
- display: flex;
- align-items: flex-end;
- justify-content: center;
- gap: 20px;
- margin-bottom: 25px;
- flex-wrap: wrap;
-}
-
-.input-group {
- display: flex;
- flex-direction: column;
- gap: 8px;
- min-width: 200px;
-}
-
-.input-label {
- display: flex;
- align-items: center;
- gap: 8px;
- color: rgba(255, 255, 255, 0.9);
- font-weight: 600;
- font-size: 1em;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-}
-
-.label-icon {
- font-size: 1.2em;
-}
-
-.date-input {
- background: rgba(255, 255, 255, 0.1);
- backdrop-filter: blur(10px);
- -webkit-backdrop-filter: blur(10px);
- border: 1px solid rgba(255, 255, 255, 0.3);
- border-radius: 15px;
- padding: 12px 16px;
- color: rgba(255, 255, 255, 0.95);
- font-size: 1em;
- font-weight: 500;
- transition: all 0.3s ease;
- box-shadow:
- 0 4px 15px rgba(31, 38, 135, 0.1),
- inset 0 1px 0 rgba(255, 255, 255, 0.2);
-}
-
-.date-input:focus {
- outline: none;
- border-color: rgba(255, 255, 255, 0.5);
- background: rgba(255, 255, 255, 0.15);
- box-shadow:
- 0 6px 20px rgba(31, 38, 135, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.3),
- 0 0 0 3px rgba(255, 255, 255, 0.1);
- transform: translateY(-2px);
-}
-
-.date-input::-webkit-calendar-picker-indicator {
- filter: invert(1);
- opacity: 0.8;
- cursor: pointer;
-}
-
-.query-btn {
- background: rgba(255, 255, 255, 0.15);
- backdrop-filter: blur(15px);
- -webkit-backdrop-filter: blur(15px);
- color: rgba(255, 255, 255, 0.95);
- border: 1px solid rgba(255, 255, 255, 0.3);
- padding: 12px 28px;
- border-radius: 20px;
- cursor: pointer;
- font-size: 1em;
- font-weight: 600;
- transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
- display: flex;
- align-items: center;
- gap: 8px;
- position: relative;
- overflow: hidden;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- box-shadow:
- 0 4px 15px rgba(31, 38, 135, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
-}
-
-.query-btn::before {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(90deg,
- transparent,
- rgba(255, 255, 255, 0.2),
- transparent
- );
- transition: left 0.6s ease;
-}
-
-.query-btn:hover::before {
- left: 100%;
-}
-
-.query-btn:hover {
- background: rgba(255, 255, 255, 0.2);
- border-color: rgba(255, 255, 255, 0.4);
- transform: translateY(-3px);
- box-shadow:
- 0 8px 25px rgba(31, 38, 135, 0.3),
- inset 0 1px 0 rgba(255, 255, 255, 0.4);
-}
-
-.btn-icon {
- font-size: 1.2em;
- transition: transform 0.3s ease;
-}
-
-.query-btn:hover .btn-icon {
- transform: scale(1.1) rotate(5deg);
-}
-
-.update-time {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 8px;
- color: rgba(255, 255, 255, 0.8);
- font-size: 1em;
- padding: 10px 20px;
- background: rgba(255, 255, 255, 0.08);
- backdrop-filter: blur(8px);
- -webkit-backdrop-filter: blur(8px);
- border-radius: 20px;
- border: 1px solid rgba(255, 255, 255, 0.15);
- display: inline-flex;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
-}
-
-.time-icon {
- font-size: 1.2em;
- animation: clockTick 2s infinite;
-}
-
-@keyframes clockTick {
- 0%, 50% { transform: rotate(0deg); }
- 25% { transform: rotate(15deg); }
- 75% { transform: rotate(-15deg); }
-}
-
-/* 玻璃拟态加载动画 */
-.loading {
- text-align: center;
- padding: 60px 40px;
- background: rgba(255, 255, 255, 0.1);
- backdrop-filter: blur(25px);
- -webkit-backdrop-filter: blur(25px);
- border-radius: 25px;
- margin-bottom: 25px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- box-shadow:
- 0 8px 32px 0 rgba(31, 38, 135, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
-}
-
-.loading-content {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 25px;
-}
-
-.glass-spinner {
- width: 60px;
- height: 60px;
- border: 4px solid rgba(255, 255, 255, 0.1);
- border-top: 4px solid rgba(255, 255, 255, 0.8);
- border-radius: 50%;
- animation: glassSpinnerRotate 1.5s linear infinite;
- position: relative;
- backdrop-filter: blur(5px);
- -webkit-backdrop-filter: blur(5px);
-}
-
-.glass-spinner::before {
- content: '';
- position: absolute;
- top: -4px;
- left: -4px;
- right: -4px;
- bottom: -4px;
- border: 2px solid rgba(255, 255, 255, 0.05);
- border-top: 2px solid rgba(255, 255, 255, 0.3);
- border-radius: 50%;
- animation: glassSpinnerRotate 2s linear infinite reverse;
-}
-
-@keyframes glassSpinnerRotate {
- 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: mysticalPulse 2s ease-in-out infinite alternate;
- filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.5));
-}
-
-@keyframes mysticalPulse {
- 0% {
- transform: scale(1);
- filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.5));
- }
- 100% {
- transform: scale(1.1);
- filter: drop-shadow(0 0 20px rgba(255, 255, 255, 0.8));
- }
-}
-
-.loading-text p {
- font-size: 1.2em;
- color: rgba(255, 255, 255, 0.9);
- font-weight: 600;
- margin: 0;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-}
-
-.loading-dots {
- display: flex;
- gap: 8px;
-}
-
-.loading-dots span {
- width: 10px;
- height: 10px;
- background: rgba(255, 255, 255, 0.7);
- border-radius: 50%;
- animation: glassDotsFloat 1.4s ease-in-out infinite both;
- backdrop-filter: blur(2px);
- -webkit-backdrop-filter: blur(2px);
- box-shadow: 0 2px 8px rgba(255, 255, 255, 0.3);
-}
-
-.loading-dots span:nth-child(1) { animation-delay: -0.32s; }
-.loading-dots span:nth-child(2) { animation-delay: -0.16s; }
-.loading-dots span:nth-child(3) { animation-delay: 0s; }
-
-@keyframes glassDotsFloat {
- 0%, 80%, 100% {
- transform: scale(0.8);
- opacity: 0.5;
- }
- 40% {
- transform: scale(1.2);
- opacity: 1;
- }
-}
-
-/* 农历信息展示 */
-.lunar-info {
- display: grid;
- gap: 25px;
- animation: infoFadeIn 0.8s ease-out;
-}
-
-@keyframes infoFadeIn {
- from {
- opacity: 0;
- transform: translateY(30px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-.info-card {
- background: rgba(255, 255, 255, 0.12);
- backdrop-filter: blur(20px);
- -webkit-backdrop-filter: blur(20px);
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 20px;
- padding: 30px;
- position: relative;
- overflow: hidden;
- transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
- box-shadow:
- 0 8px 32px 0 rgba(31, 38, 135, 0.15),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
-}
-
-.info-card::before {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 3px;
- background: linear-gradient(90deg,
- rgba(255, 255, 255, 0.3),
- rgba(255, 255, 255, 0.6),
- rgba(255, 255, 255, 0.3)
- );
- transform: scaleX(0);
- transition: transform 0.4s ease;
-}
-
-.info-card:hover::before {
- transform: scaleX(1);
-}
-
-.info-card:hover {
- transform: translateY(-5px);
- background: rgba(255, 255, 255, 0.15);
- border-color: rgba(255, 255, 255, 0.3);
- box-shadow:
- 0 12px 40px 0 rgba(31, 38, 135, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.4);
-}
-
-.card-header {
- display: flex;
- align-items: center;
- gap: 15px;
- margin-bottom: 20px;
-}
-
-.card-icon {
- font-size: 2.5em;
- animation: cardIconFloat 3s ease-in-out infinite;
-}
-
-@keyframes cardIconFloat {
- 0%, 100% { transform: translateY(0) rotate(0deg); }
- 50% { transform: translateY(-5px) rotate(5deg); }
-}
-
-.card-title {
- font-size: 1.5em;
- font-weight: 700;
- color: rgba(255, 255, 255, 0.95);
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-}
-
-.card-content {
- display: grid;
- gap: 15px;
-}
-
-.info-item {
- display: flex;
- align-items: center;
- gap: 12px;
- padding: 15px;
- background: rgba(255, 255, 255, 0.08);
- backdrop-filter: blur(10px);
- -webkit-backdrop-filter: blur(10px);
- border-radius: 15px;
- border: 1px solid rgba(255, 255, 255, 0.15);
- transition: all 0.3s ease;
-}
-
-.info-item:hover {
- background: rgba(255, 255, 255, 0.12);
- transform: scale(1.02);
-}
-
-.item-icon {
- font-size: 1.3em;
- min-width: 30px;
- text-align: center;
-}
-
-.item-label {
- font-weight: 600;
- color: rgba(255, 255, 255, 0.9);
- min-width: 80px;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-}
-
-.item-value {
- font-weight: 700;
- color: rgba(255, 255, 255, 0.95);
- font-size: 1.1em;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-}
-
-/* 错误信息 */
-.error-message {
- text-align: center;
- padding: 60px 40px;
- background: rgba(255, 255, 255, 0.1);
- backdrop-filter: blur(25px);
- -webkit-backdrop-filter: blur(25px);
- border-radius: 25px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- box-shadow:
- 0 8px 32px 0 rgba(31, 38, 135, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
-}
-
-.error-content {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 25px;
-}
-
-.error-icon {
- font-size: 4em;
- animation: errorFloat 2s ease-in-out infinite alternate;
- filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.3));
-}
-
-@keyframes errorFloat {
- 0% { transform: translateY(0) rotate(-5deg); }
- 100% { transform: translateY(-10px) rotate(5deg); }
-}
-
-.error-content h3 {
- font-size: 1.6em;
- color: rgba(255, 255, 255, 0.95);
- margin: 0;
- font-weight: 700;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-}
-
-.error-content p {
- color: rgba(255, 255, 255, 0.8);
- font-size: 1.1em;
- margin: 0;
- line-height: 1.6;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-}
-
-.retry-btn {
- background: rgba(255, 255, 255, 0.15);
- backdrop-filter: blur(15px);
- -webkit-backdrop-filter: blur(15px);
- color: rgba(255, 255, 255, 0.95);
- border: 1px solid rgba(255, 255, 255, 0.3);
- padding: 12px 25px;
- border-radius: 20px;
- cursor: pointer;
- font-size: 1em;
- font-weight: 600;
- transition: all 0.4s ease;
- display: inline-flex;
- align-items: center;
- gap: 8px;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- box-shadow:
- 0 4px 15px rgba(31, 38, 135, 0.2),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
-}
-
-.retry-btn:hover {
- background: rgba(255, 255, 255, 0.2);
- border-color: rgba(255, 255, 255, 0.4);
- transform: translateY(-2px);
- box-shadow:
- 0 6px 20px rgba(31, 38, 135, 0.3),
- inset 0 1px 0 rgba(255, 255, 255, 0.4);
-}
-
-.retry-btn span {
- font-size: 1.1em;
- transition: transform 0.3s ease;
-}
-
-.retry-btn:hover span {
- transform: rotate(180deg);
-}
-
-/* 功能提示 */
-.feature-tips {
- margin-top: 40px;
-}
-
-.tip-card {
- background: rgba(255, 255, 255, 0.1);
- backdrop-filter: blur(20px);
- -webkit-backdrop-filter: blur(20px);
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 20px;
- padding: 30px;
- text-align: center;
- box-shadow:
- 0 8px 32px 0 rgba(31, 38, 135, 0.15),
- inset 0 1px 0 rgba(255, 255, 255, 0.3);
-}
-
-.tip-icon {
- font-size: 3em;
- margin-bottom: 15px;
- animation: tipBlink 3s ease-in-out infinite;
-}
-
-@keyframes tipBlink {
- 0%, 100% { opacity: 1; transform: scale(1); }
- 50% { opacity: 0.7; transform: scale(1.05); }
-}
-
-.tip-card h3 {
- font-size: 1.4em;
- font-weight: 700;
- color: rgba(255, 255, 255, 0.95);
- margin-bottom: 20px;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-}
-
-.tip-card ul {
- list-style: none;
- display: grid;
- gap: 12px;
- text-align: left;
-}
-
-.tip-card li {
- color: rgba(255, 255, 255, 0.9);
- font-size: 1em;
- padding: 10px 15px;
- background: rgba(255, 255, 255, 0.08);
- backdrop-filter: blur(5px);
- -webkit-backdrop-filter: blur(5px);
- border-radius: 10px;
- border: 1px solid rgba(255, 255, 255, 0.15);
- transition: all 0.3s ease;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-}
-
-.tip-card li:hover {
- background: rgba(255, 255, 255, 0.12);
- transform: translateX(5px);
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (min-width: 768px) and (max-width: 1024px) {
- .container {
- padding: 25px;
- }
-
- .header {
- padding: 35px 25px;
- }
-
- .header-icon {
- font-size: 3.5em;
- }
-
- .title {
- font-size: 2.8em;
- letter-spacing: 1.5px;
- }
-
- .subtitle {
- font-size: 1.2em;
- }
-
- .date-selector {
- gap: 15px;
- }
-
- .input-group {
- min-width: 180px;
- }
-
- .lunar-info {
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
- gap: 20px;
- }
-
- .info-card {
- padding: 25px;
- }
-}
-
-/* 电脑端适配 (1025px+) */
-@media (min-width: 1025px) {
- .container {
- padding: 40px;
- }
-
- .header {
- padding: 50px 40px;
- margin-bottom: 50px;
- }
-
- .header-icon {
- font-size: 4.5em;
- }
-
- .title {
- font-size: 3.8em;
- letter-spacing: 3px;
- }
-
- .subtitle {
- font-size: 1.4em;
- }
-
- .date-selector {
- gap: 25px;
- }
-
- .input-group {
- min-width: 220px;
- }
-
- .date-input {
- padding: 14px 18px;
- font-size: 1.05em;
- }
-
- .query-btn {
- padding: 14px 32px;
- font-size: 1.05em;
- }
-
- .lunar-info {
- grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
- gap: 30px;
- }
-
- .info-card {
- padding: 35px;
- }
-
- .card-title {
- font-size: 1.6em;
- }
-
- .item-label {
- min-width: 100px;
- }
-
- .item-value {
- font-size: 1.15em;
- }
-
- /* 电脑端特殊效果 */
- .info-card:hover {
- transform: translateY(-8px) scale(1.02);
- }
-}
-
-/* 手机端适配 (767px以下) */
-@media (max-width: 767px) {
- .container {
- padding: 15px;
- }
-
- .header {
- padding: 25px 20px;
- margin-bottom: 25px;
- }
-
- .header-icon {
- font-size: 2.8em;
- }
-
- .title {
- font-size: 2.2em;
- letter-spacing: 1px;
- }
-
- .subtitle {
- font-size: 1em;
- }
-
- .date-selector {
- flex-direction: column;
- gap: 15px;
- align-items: center;
- }
-
- .input-group {
- width: 100%;
- max-width: 300px;
- min-width: auto;
- }
-
- .date-input {
- padding: 10px 14px;
- font-size: 0.95em;
- }
-
- .query-btn {
- padding: 10px 24px;
- font-size: 0.95em;
- width: 100%;
- max-width: 200px;
- justify-content: center;
- }
-
- .update-time {
- font-size: 0.9em;
- padding: 8px 16px;
- }
-
- .info-card {
- padding: 20px;
- border-radius: 15px;
- }
-
- .card-header {
- gap: 12px;
- margin-bottom: 15px;
- }
-
- .card-icon {
- font-size: 2em;
- }
-
- .card-title {
- font-size: 1.3em;
- }
-
- .info-item {
- padding: 12px;
- flex-direction: column;
- align-items: flex-start;
- gap: 8px;
- }
-
- .item-icon {
- font-size: 1.2em;
- }
-
- .item-label {
- min-width: auto;
- font-size: 0.9em;
- }
-
- .item-value {
- font-size: 1em;
- }
-
- .tip-card {
- padding: 20px;
- }
-
- .tip-card ul {
- gap: 10px;
- }
-
- .tip-card li {
- padding: 8px 12px;
- font-size: 0.9em;
- }
-}
-
-/* 超小屏幕适配 (480px以下) */
-@media (max-width: 480px) {
- .container {
- padding: 12px;
- }
-
- .header {
- padding: 20px 15px;
- margin-bottom: 20px;
- }
-
- .header-icon {
- font-size: 2.5em;
- }
-
- .title {
- font-size: 1.9em;
- letter-spacing: 0.5px;
- }
-
- .subtitle {
- font-size: 0.95em;
- }
-
- .date-selector {
- gap: 12px;
- }
-
- .input-group {
- max-width: 280px;
- }
-
- .date-input {
- padding: 8px 12px;
- font-size: 0.9em;
- }
-
- .query-btn {
- padding: 8px 20px;
- font-size: 0.9em;
- max-width: 180px;
- }
-
- .update-time {
- font-size: 0.85em;
- padding: 6px 12px;
- flex-direction: column;
- gap: 4px;
- }
-
- .lunar-info {
- gap: 15px;
- }
-
- .info-card {
- padding: 18px 15px;
- border-radius: 12px;
- }
-
- .card-header {
- gap: 10px;
- margin-bottom: 12px;
- }
-
- .card-icon {
- font-size: 1.8em;
- }
-
- .card-title {
- font-size: 1.2em;
- }
-
- .info-item {
- padding: 10px;
- gap: 6px;
- }
-
- .item-icon {
- font-size: 1.1em;
- }
-
- .item-label {
- font-size: 0.85em;
- }
-
- .item-value {
- font-size: 0.95em;
- }
-
- .tip-card {
- padding: 15px;
- }
-
- .tip-icon {
- font-size: 2.5em;
- }
-
- .tip-card h3 {
- font-size: 1.2em;
- }
-
- .tip-card li {
- padding: 6px 10px;
- font-size: 0.85em;
- }
-
- /* 超小屏幕性能优化 */
- .info-card {
- transition: transform 0.2s ease, background 0.2s ease;
- }
-
- .info-card::before {
- display: none;
- }
-
- .loading-content {
- gap: 15px;
- }
-
- .loading-emoji {
- font-size: 2em;
- }
-
- .error-icon {
- font-size: 3em;
- }
-}
-
-/* 时辰宜忌特殊样式 */
-.hours-card {
- grid-column: 1 / -1; /* 占满整行 */
-}
-
-.hours-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
- gap: 15px;
- margin-top: 15px;
-}
-
-.hour-item {
- background: rgba(255, 255, 255, 0.1);
- backdrop-filter: blur(10px);
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 12px;
- padding: 12px;
- transition: all 0.3s ease;
-}
-
-.hour-item:hover {
- background: rgba(255, 255, 255, 0.15);
- transform: translateY(-2px);
- box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
-}
-
-.hour-name {
- font-size: 14px;
- font-weight: 600;
- color: #ffffff;
- text-align: center;
- margin-bottom: 8px;
- padding: 4px 8px;
- background: rgba(255, 255, 255, 0.1);
- border-radius: 6px;
-}
-
-.hour-content {
- font-size: 12px;
- line-height: 1.4;
-}
-
-.hour-recommends,
-.hour-avoids {
- margin: 4px 0;
-}
-
-.hour-label {
- font-weight: 600;
- color: #ffffff;
- margin-right: 4px;
-}
-
-.hour-recommends .hour-label {
- color: #4ade80;
-}
-
-.hour-avoids .hour-label {
- color: #f87171;
-}
-
-.hour-text {
- color: rgba(255, 255, 255, 0.9);
-}
-
-/* 时辰宜忌响应式优化 */
-@media (max-width: 768px) {
- .hours-grid {
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
- gap: 10px;
- }
-
- .hour-item {
- padding: 8px;
- }
-
- .hour-name {
- font-size: 12px;
- margin-bottom: 6px;
- }
-
- .hour-content {
- font-size: 11px;
- }
-}
diff --git a/frontend/react-app/public/60sapi/实用功能/农历信息/index.html b/frontend/react-app/public/60sapi/实用功能/农历信息/index.html
deleted file mode 100644
index 0e8aace3..00000000
--- a/frontend/react-app/public/60sapi/实用功能/农历信息/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
- 🌙 农历信息查询
-
-
-
-
-
-
-
-
-
-
-
-
🔮
-
正在查询农历信息...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
😔
-
查询失败了
-
无法获取农历信息,请稍后重试
-
-
-
-
-
-
-
-
diff --git a/frontend/react-app/public/60sapi/实用功能/农历信息/js/script.js b/frontend/react-app/public/60sapi/实用功能/农历信息/js/script.js
deleted file mode 100644
index a2fb42cc..00000000
--- a/frontend/react-app/public/60sapi/实用功能/农历信息/js/script.js
+++ /dev/null
@@ -1,485 +0,0 @@
-// 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 lunarInfoElement = document.getElementById('lunarInfo');
-const errorMessageElement = document.getElementById('errorMessage');
-const updateTimeElement = document.getElementById('updateTime');
-const dateInput = document.getElementById('dateInput');
-const queryBtn = document.getElementById('queryBtn');
-
-// 页面加载完成后初始化
-document.addEventListener('DOMContentLoaded', function() {
- initializePage();
-});
-
-// 初始化页面
-function initializePage() {
- // 设置默认日期为今天
- const today = new Date();
- const dateString = today.toISOString().split('T')[0];
- dateInput.value = dateString;
-
- // 绑定事件
- queryBtn.addEventListener('click', queryLunarInfo);
- dateInput.addEventListener('change', queryLunarInfo);
-
- // 自动查询当天信息
- queryLunarInfo();
-}
-
-// 查询农历信息
-async function queryLunarInfo() {
- const selectedDate = dateInput.value;
- if (!selectedDate) {
- showError('请选择查询日期');
- return;
- }
-
- showLoading();
- hideError();
- hideLunarInfo();
-
- try {
- const data = await fetchLunarData(selectedDate);
- displayLunarInfo(data.data);
- updateQueryTime();
- } catch (error) {
- console.error('查询失败:', error);
- showError('查询农历信息失败,请稍后重试');
- }
-
- hideLoading();
-}
-
-// 获取农历数据
-async function fetchLunarData(date) {
- for (let i = 0; i < API_ENDPOINTS.length; i++) {
- const apiUrl = API_ENDPOINTS[currentApiIndex];
-
- try {
- const response = await fetch(`${apiUrl}/v2/lunar?date=${date}`, {
- 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 displayLunarInfo(lunarData) {
- lunarInfoElement.innerHTML = `
-
-
-
-
-
🗓️
-
公历日期
-
${lunarData.solar.year}年${String(lunarData.solar.month).padStart(2, '0')}月${String(lunarData.solar.day).padStart(2, '0')}日
-
-
-
🌍
-
星期
-
${lunarData.solar.week_desc}
-
-
-
�
-
季节
-
${lunarData.solar.season_name_desc}
-
-
-
⭐
-
星座
-
${lunarData.constellation.name}
-
-
-
-
-
-
-
-
-
🏮
-
农历日期
-
${lunarData.lunar.desc_short}
-
-
-
🐲
-
生肖年
-
${lunarData.zodiac.year}年
-
-
-
⚡
-
天干地支
-
${lunarData.sixty_cycle.year.name}
-
-
-
🌙
-
月相
-
${lunarData.phase.name}
-
-
-
-
-
-
-
-
-
🍃
-
当前节气
-
${lunarData.term.stage ? lunarData.term.stage.name : '无节气'}
-
-
-
🎊
-
法定假日
-
${lunarData.legal_holiday ? lunarData.legal_holiday.name : '无假日'}
-
-
-
�
-
传统节日
-
${lunarData.festival.both_desc || '无特殊节日'}
-
-
-
🔢
-
一年第几天
-
第${lunarData.stats.day_of_year}天
-
-
-
-
-
-
-
-
-
🕐
-
当前时辰
-
${lunarData.lunar.hour_desc}
-
-
-
⚡
-
时辰干支
-
${lunarData.sixty_cycle.hour.name}
-
-
-
🐓
-
时辰生肖
-
${lunarData.zodiac.hour}
-
-
-
🎵
-
纳音
-
${lunarData.nayin.hour}
-
-
-
-
-
-
-
-
-
✅
-
宜
-
${formatTabooText(lunarData.taboo.day.recommends)}
-
-
-
❌
-
忌
-
${formatTabooText(lunarData.taboo.day.avoids)}
-
-
-
🕐
-
时辰宜
-
${formatTabooText(lunarData.taboo.hour.recommends)}
-
-
-
🚫
-
时辰忌
-
${formatTabooText(lunarData.taboo.hour.avoids)}
-
-
-
-
-
-
-
-
-
🎯
-
今日运势
-
${lunarData.fortune.today_luck}
-
-
-
💼
-
事业运
-
${lunarData.fortune.career}
-
-
-
💰
-
财运
-
${lunarData.fortune.money}
-
-
-
💕
-
感情运
-
${lunarData.fortune.love}
-
-
-
-
-
-
-
-
-
📈
-
年度进度
-
${lunarData.stats.percents_formatted.year}
-
-
-
📅
-
本月进度
-
${lunarData.stats.percents_formatted.month}
-
-
-
🗓️
-
本周第几天
-
第${lunarData.stats.week_of_month}周
-
-
-
⏰
-
今日进度
-
${lunarData.stats.percents_formatted.day}
-
-
-
-
- ${generateHourlyTaboo(lunarData.taboo.hours)}
- `;
-
- showLunarInfo();
-}
-
-// 格式化宜忌文本
-function formatTabooText(text) {
- if (!text) return '无';
- return text.replace(/\./g, '、');
-}
-
-// 生成十二时辰宜忌
-function generateHourlyTaboo(hours) {
- if (!hours || hours.length === 0) return '';
-
- const hourCards = hours.map(hour => `
-
-
${hour.hour}
-
-
- 宜:
- ${formatTabooText(hour.recommends) || '无'}
-
-
- 忌:
- ${formatTabooText(hour.avoids) || '无'}
-
-
-
- `).join('');
-
- return `
-
- `;
-}
-
-// 更新查询时间
-function updateQueryTime() {
- 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: rgba(255, 255, 255, 0.2);
- backdrop-filter: blur(15px);
- -webkit-backdrop-filter: blur(15px);
- color: rgba(255, 255, 255, 0.95);
- padding: 12px 20px;
- border-radius: 25px;
- border: 1px solid rgba(255, 255, 255, 0.3);
- box-shadow: 0 8px 32px rgba(31, 38, 135, 0.2);
- z-index: 1000;
- font-weight: 600;
- font-size: 0.9em;
- animation: glassToastSlide 0.5s ease-out;
- text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- `;
-
- document.body.appendChild(toast);
-
- // 3秒后自动移除
- setTimeout(() => {
- toast.style.animation = 'glassToastSlideOut 0.5s ease-in forwards';
- setTimeout(() => toast.remove(), 500);
- }, 3000);
-}
-
-// 显示加载状态
-function showLoading() {
- loadingElement.style.display = 'block';
-}
-
-// 隐藏加载状态
-function hideLoading() {
- loadingElement.style.display = 'none';
-}
-
-// 显示农历信息
-function showLunarInfo() {
- lunarInfoElement.style.display = 'block';
-}
-
-// 隐藏农历信息
-function hideLunarInfo() {
- lunarInfoElement.style.display = 'none';
-}
-
-// 显示错误信息
-function showError(message = '查询失败,请稍后重试') {
- errorMessageElement.style.display = 'block';
- const errorContent = errorMessageElement.querySelector('.error-content p');
- if (errorContent) {
- errorContent.textContent = message;
- }
-}
-
-// 隐藏错误信息
-function hideError() {
- errorMessageElement.style.display = 'none';
-}
-
-// 添加CSS动画到页面
-if (!document.querySelector('#toast-styles')) {
- const style = document.createElement('style');
- style.id = 'toast-styles';
- style.textContent = `
- @keyframes glassToastSlide {
- from {
- opacity: 0;
- transform: translateX(100px) scale(0.8);
- }
- to {
- opacity: 1;
- transform: translateX(0) scale(1);
- }
- }
-
- @keyframes glassToastSlideOut {
- from {
- opacity: 1;
- transform: translateX(0) scale(1);
- }
- to {
- opacity: 0;
- transform: translateX(100px) scale(0.8);
- }
- }
- `;
- document.head.appendChild(style);
-}
-
-// 键盘快捷键支持
-document.addEventListener('keydown', function(e) {
- if (e.key === 'Enter') {
- e.preventDefault();
- queryLunarInfo();
- }
-
- if (e.key === 'r' && (e.ctrlKey || e.metaKey)) {
- e.preventDefault();
- queryLunarInfo();
- }
-});
diff --git a/frontend/react-app/public/60sapi/实用功能/农历信息/接口集合.json b/frontend/react-app/public/60sapi/实用功能/农历信息/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/实用功能/农历信息/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/实用功能/农历信息/返回接口.json b/frontend/react-app/public/60sapi/实用功能/农历信息/返回接口.json
deleted file mode 100644
index 910981d4..00000000
--- a/frontend/react-app/public/60sapi/实用功能/农历信息/返回接口.json
+++ /dev/null
@@ -1,647 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": {
- "solar": {
- "year": 2025,
- "month": 9,
- "day": 1,
- "hour": 17,
- "minute": 58,
- "second": 47,
- "full": "2025-09-01",
- "full_with_time": "2025-09-01 17:58:47",
- "week": 1,
- "week_desc": "星期一",
- "week_desc_short": "一",
- "season": 3,
- "season_desc": "三季度",
- "season_desc_short": "三",
- "season_name": "秋",
- "season_name_desc": "秋天",
- "is_leap_year": false
- },
- "lunar": {
- "year": "乙巳",
- "month": "七",
- "day": "初十",
- "hour": "酉",
- "full_with_hour": "农历乙巳年七月初十酉时",
- "desc_short": "农历乙巳年七月初十",
- "year_desc": "农历乙巳年",
- "month_desc": "七月",
- "day_desc": "初十",
- "hour_desc": "酉时",
- "is_leap_month": false
- },
- "stats": {
- "day_of_year": 244,
- "week_of_year": 36,
- "week_of_month": 1,
- "percents": {
- "year": 0.665753424657534,
- "month": 0.0333333333333333,
- "week": 0.142857142857143,
- "day": 0.749161909722222
- },
- "percents_formatted": {
- "year": "66.58%",
- "month": "3.33%",
- "week": "14.29%",
- "day": "74.92%"
- }
- },
- "term": {
- "today": null,
- "stage": {
- "name": "处暑",
- "position": 10,
- "is_jie": false,
- "is_qi": true
- }
- },
- "zodiac": {
- "year": "蛇",
- "month": "鸡",
- "day": "鸡",
- "hour": "鸡"
- },
- "sixty_cycle": {
- "year": {
- "heaven_stem": "乙",
- "earth_branch": "巳",
- "name": "乙巳年",
- "name_short": "乙巳"
- },
- "month": {
- "heaven_stem": "乙",
- "earth_branch": "酉",
- "name": "乙酉月",
- "name_short": "乙酉"
- },
- "day": {
- "heaven_stem": "癸",
- "earth_branch": "酉",
- "name": "癸酉日",
- "name_short": "癸酉"
- },
- "hour": {
- "heaven_stem": "辛",
- "earth_branch": "酉",
- "name": "辛酉时",
- "name_short": "辛酉"
- }
- },
- "legal_holiday": null,
- "festival": {
- "solar": null,
- "lunar": null,
- "both_desc": null
- },
- "phase": {
- "name": "宵月",
- "position": 10
- },
- "constellation": {
- "name": "处女座",
- "name_short": "处女"
- },
- "taboo": {
- "day": {
- "recommends": "解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.盖屋.合脊.起基.入殓.破土.安葬",
- "avoids": "出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任"
- },
- "hour": {
- "hour": "酉时",
- "hour_short": "酉",
- "avoids": "乘船.造桥",
- "recommends": "嫁娶.出行.移徙.入宅.开市.赴任.祈福.安床.开仓.盖屋.修造.求财"
- },
- "hours": [
- {
- "hour": "酉时",
- "hour_short": "酉",
- "recommends": "嫁娶.出行.移徙.入宅.开市.赴任.祈福.安床.开仓.盖屋.修造.求财",
- "avoids": "乘船.造桥"
- },
- {
- "hour": "戌时",
- "hour_short": "戌",
- "recommends": "嫁娶.移徙.安葬.进人口.求财",
- "avoids": "出行.赴任.祈福.祭祀.开光.斋醮"
- },
- {
- "hour": "亥时",
- "hour_short": "亥",
- "recommends": "嫁娶.移徙.交易.入宅.开市.安葬.求嗣.求财",
- "avoids": "出行.赴任.动土.祈福.祭祀.修造.开光.斋醮"
- },
- {
- "hour": "子时",
- "hour_short": "子",
- "recommends": "嫁娶.交易.入宅.开市.祈福.安葬.求嗣.求财",
- "avoids": "出行.移徙.赴任.词讼.修造"
- },
- {
- "hour": "丑时",
- "hour_short": "丑",
- "recommends": "嫁娶.祈福.安葬.祭祀.酬神.求财",
- "avoids": "出行.赴任.动土.修造"
- },
- {
- "hour": "寅时",
- "hour_short": "寅",
- "recommends": "嫁娶.出行.交易.开市.赴任.祈福.安床.祭祀.求嗣.求财",
- "avoids": "盖屋.入殓.上梁"
- },
- {
- "hour": "卯时",
- "hour_short": "卯",
- "recommends": "嫁娶.交易.入宅.开市.祈福.安床.安葬.求嗣.求财",
- "avoids": "出行.赴任.修造"
- },
- {
- "hour": "辰时",
- "hour_short": "辰",
- "recommends": "",
- "avoids": "诸事不宜"
- },
- {
- "hour": "巳时",
- "hour_short": "巳",
- "recommends": "嫁娶.出行.移徙.入宅.开市.祈福.安床.盖屋.祭祀.作灶",
- "avoids": "安葬.修造.开光"
- },
- {
- "hour": "午时",
- "hour_short": "午",
- "recommends": "嫁娶.出行.交易.开市.祈福.安床.求嗣.求财",
- "avoids": "赴任.动土.词讼.修造"
- },
- {
- "hour": "未时",
- "hour_short": "未",
- "recommends": "嫁娶.入宅.祈福.安葬.祭祀.修造.酬神.求财",
- "avoids": "出行.赴任"
- },
- {
- "hour": "申时",
- "hour_short": "申",
- "recommends": "嫁娶.出行.开市.赴任.安葬.求财",
- "avoids": "祈福.祭祀.酬神.斋醮"
- }
- ]
- },
- "julian_day": 2460919.5,
- "nayin": {
- "year": "覆灯火",
- "month": "泉中水",
- "day": "剑锋金",
- "hour": "石榴木"
- },
- "baizi": {
- "year_baizi": "性格温和,为人正直诚信。",
- "day_baizi": "性格温和,为人正直诚信。"
- },
- "fortune": {
- "today_luck": "今日学习运好,适合进修",
- "career": "领导能力突出,升职有望",
- "money": "偏财运不错,可小试投资",
- "love": "感情需要沟通,避免误会"
- },
- "constants": {
- "legal_holiday_list": [
- {
- "name": "元旦节",
- "date": "2025-01-01",
- "start": "2025-01-01",
- "end": "2025-01-01"
- },
- {
- "name": "春节",
- "date": "2025-01-29",
- "start": "2025-01-26",
- "end": "2025-02-08"
- },
- {
- "name": "清明节",
- "date": "2025-04-04",
- "start": "2025-04-04",
- "end": "2025-04-06"
- },
- {
- "name": "劳动节",
- "date": "2025-05-01",
- "start": "2025-04-27",
- "end": "2025-05-05"
- },
- {
- "name": "端午节",
- "date": "2025-05-31",
- "start": "2025-05-31",
- "end": "2025-06-02"
- },
- {
- "name": "国庆中秋",
- "date": "2025-10-01",
- "start": "2025-09-28",
- "end": "2025-10-11"
- }
- ],
- "phase_list": [
- {
- "name": "朔月",
- "lunar_day": 1
- },
- {
- "name": "既朔月",
- "lunar_day": 2
- },
- {
- "name": "蛾眉新月",
- "lunar_day": 3
- },
- {
- "name": "蛾眉新月",
- "lunar_day": 4
- },
- {
- "name": "蛾眉月",
- "lunar_day": 5
- },
- {
- "name": "夕月",
- "lunar_day": 6
- },
- {
- "name": "上弦月",
- "lunar_day": 7
- },
- {
- "name": "上弦月",
- "lunar_day": 8
- },
- {
- "name": "九夜月",
- "lunar_day": 9
- },
- {
- "name": "宵月",
- "lunar_day": 10
- },
- {
- "name": "宵月",
- "lunar_day": 11
- },
- {
- "name": "宵月",
- "lunar_day": 12
- },
- {
- "name": "渐盈凸月",
- "lunar_day": 13
- },
- {
- "name": "小望月",
- "lunar_day": 14
- },
- {
- "name": "望月",
- "lunar_day": 15
- },
- {
- "name": "既望月",
- "lunar_day": 16
- },
- {
- "name": "立待月",
- "lunar_day": 17
- },
- {
- "name": "居待月",
- "lunar_day": 18
- },
- {
- "name": "寝待月",
- "lunar_day": 19
- },
- {
- "name": "更待月",
- "lunar_day": 20
- },
- {
- "name": "渐亏凸月",
- "lunar_day": 21
- },
- {
- "name": "下弦月",
- "lunar_day": 22
- },
- {
- "name": "下弦月",
- "lunar_day": 23
- },
- {
- "name": "有明月",
- "lunar_day": 24
- },
- {
- "name": "有明月",
- "lunar_day": 25
- },
- {
- "name": "蛾眉残月",
- "lunar_day": 26
- },
- {
- "name": "蛾眉残月",
- "lunar_day": 27
- },
- {
- "name": "残月",
- "lunar_day": 28
- },
- {
- "name": "晓月",
- "lunar_day": 29
- },
- {
- "name": "晦月",
- "lunar_day": 30
- }
- ],
- "zodiac_list": [
- "鼠",
- "牛",
- "虎",
- "兔",
- "龙",
- "蛇",
- "马",
- "羊",
- "猴",
- "鸡",
- "狗",
- "猪"
- ],
- "constellation_list": [
- {
- "name": "白羊",
- "desc": "白羊座",
- "start": "3月21日",
- "end": "4月19日",
- "range": "3月21日~4月19日",
- "start_month": 3,
- "start_day": 21,
- "end_month": 4,
- "end_day": 19
- },
- {
- "name": "金牛",
- "desc": "金牛座",
- "start": "4月20日",
- "end": "5月20日",
- "range": "4月20日~5月20日",
- "start_month": 4,
- "start_day": 20,
- "end_month": 5,
- "end_day": 20
- },
- {
- "name": "双子",
- "desc": "双子座",
- "start": "5月21日",
- "end": "6月21日",
- "range": "5月21日~6月21日",
- "start_month": 5,
- "start_day": 21,
- "end_month": 6,
- "end_day": 21
- },
- {
- "name": "巨蟹",
- "desc": "巨蟹座",
- "start": "6月22日",
- "end": "7月22日",
- "range": "6月22日~7月22日",
- "start_month": 6,
- "start_day": 22,
- "end_month": 7,
- "end_day": 22
- },
- {
- "name": "狮子",
- "desc": "狮子座",
- "start": "7月23日",
- "end": "8月22日",
- "range": "7月23日~8月22日",
- "start_month": 7,
- "start_day": 23,
- "end_month": 8,
- "end_day": 22
- },
- {
- "name": "处女",
- "desc": "处女座",
- "start": "8月23日",
- "end": "9月22日",
- "range": "8月23日~9月22日",
- "start_month": 8,
- "start_day": 23,
- "end_month": 9,
- "end_day": 22
- },
- {
- "name": "天秤",
- "desc": "天秤座",
- "start": "9月23日",
- "end": "10月23日",
- "range": "9月23日~10月23日",
- "start_month": 9,
- "start_day": 23,
- "end_month": 10,
- "end_day": 23
- },
- {
- "name": "天蝎",
- "desc": "天蝎座",
- "start": "10月24日",
- "end": "11月22日",
- "range": "10月24日~11月22日",
- "start_month": 10,
- "start_day": 24,
- "end_month": 11,
- "end_day": 22
- },
- {
- "name": "射手",
- "desc": "射手座",
- "start": "11月23日",
- "end": "12月21日",
- "range": "11月23日~12月21日",
- "start_month": 11,
- "start_day": 23,
- "end_month": 12,
- "end_day": 21
- },
- {
- "name": "摩羯",
- "desc": "摩羯座",
- "start": "12月22日",
- "end": "1月19日",
- "range": "12月22日~1月19日",
- "start_month": 12,
- "start_day": 22,
- "end_month": 1,
- "end_day": 19
- },
- {
- "name": "水瓶",
- "desc": "水瓶座",
- "start": "1月20日",
- "end": "2月18日",
- "range": "1月20日~2月18日",
- "start_month": 1,
- "start_day": 20,
- "end_month": 2,
- "end_day": 18
- },
- {
- "name": "双鱼",
- "desc": "双鱼座",
- "start": "2月19日",
- "end": "3月20日",
- "range": "2月19日~3月20日",
- "start_month": 2,
- "start_day": 19,
- "end_month": 3,
- "end_day": 20
- }
- ],
- "heaven_stems": [
- "甲",
- "乙",
- "丙",
- "丁",
- "戊",
- "己",
- "庚",
- "辛",
- "壬",
- "癸"
- ],
- "earth_branches": [
- "子",
- "丑",
- "寅",
- "卯",
- "辰",
- "巳",
- "午",
- "未",
- "申",
- "酉",
- "戌",
- "亥"
- ],
- "solar_terms": [
- {
- "name": "立春",
- "desc": "春季开始"
- },
- {
- "name": "雨水",
- "desc": "降雨增多"
- },
- {
- "name": "惊蛰",
- "desc": "春雷乍响"
- },
- {
- "name": "春分",
- "desc": "昼夜等长"
- },
- {
- "name": "清明",
- "desc": "天清地明"
- },
- {
- "name": "谷雨",
- "desc": "雨生百谷"
- },
- {
- "name": "立夏",
- "desc": "夏季开始"
- },
- {
- "name": "小满",
- "desc": "麦粒渐满"
- },
- {
- "name": "芒种",
- "desc": "麦类收割"
- },
- {
- "name": "夏至",
- "desc": "白昼最长"
- },
- {
- "name": "小暑",
- "desc": "天气渐热"
- },
- {
- "name": "大暑",
- "desc": "一年最热"
- },
- {
- "name": "立秋",
- "desc": "秋季开始"
- },
- {
- "name": "处暑",
- "desc": "暑热结束"
- },
- {
- "name": "白露",
- "desc": "露水增多"
- },
- {
- "name": "秋分",
- "desc": "昼夜等长"
- },
- {
- "name": "寒露",
- "desc": "露水渐凉"
- },
- {
- "name": "霜降",
- "desc": "开始降霜"
- },
- {
- "name": "立冬",
- "desc": "冬季开始"
- },
- {
- "name": "小雪",
- "desc": "开始降雪"
- },
- {
- "name": "大雪",
- "desc": "降雪增多"
- },
- {
- "name": "冬至",
- "desc": "白昼最短"
- },
- {
- "name": "小寒",
- "desc": "天气渐冷"
- },
- {
- "name": "大寒",
- "desc": "一年最冷"
- }
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/实时天气/css/background.css b/frontend/react-app/public/60sapi/实用功能/实时天气/css/background.css
deleted file mode 100644
index a9872b38..00000000
--- a/frontend/react-app/public/60sapi/实用功能/实时天气/css/background.css
+++ /dev/null
@@ -1,145 +0,0 @@
-/* 背景样式文件 */
-body {
- background: linear-gradient(135deg, #e8f5e8 0%, #d4f1d4 25%, #c8ecc8 50%, #b8e6b8 75%, #a8d5ba 100%);
- background-attachment: fixed;
- background-size: 400% 400%;
- animation: gradientShift 15s ease infinite;
- position: relative;
- overflow-x: hidden;
-}
-
-/* 背景渐变动画 */
-@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(168, 213, 186, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 80% 20%, rgba(107, 183, 123, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 40% 40%, rgba(200, 236, 200, 0.1) 0%, transparent 50%);
- pointer-events: none;
- z-index: -1;
-}
-
-/* 浮动装饰圆点 */
-body::after {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-image:
- radial-gradient(2px 2px at 20px 30px, rgba(168, 213, 186, 0.3), transparent),
- radial-gradient(2px 2px at 40px 70px, rgba(107, 183, 123, 0.2), transparent),
- radial-gradient(1px 1px at 90px 40px, rgba(200, 236, 200, 0.4), transparent),
- radial-gradient(1px 1px at 130px 80px, rgba(168, 213, 186, 0.2), transparent),
- radial-gradient(2px 2px at 160px 30px, rgba(107, 183, 123, 0.3), transparent);
- background-repeat: repeat;
- background-size: 200px 100px;
- animation: float 20s linear infinite;
- pointer-events: none;
- z-index: -1;
-}
-
-@keyframes float {
- 0% {
- transform: translateY(0px);
- }
- 50% {
- transform: translateY(-10px);
- }
- 100% {
- transform: translateY(0px);
- }
-}
-
-/* 云朵装饰效果 */
-.container::before {
- content: '';
- position: absolute;
- top: -50px;
- right: -50px;
- width: 200px;
- height: 100px;
- background: rgba(255, 255, 255, 0.1);
- border-radius: 50px;
- box-shadow:
- -30px 20px 0 rgba(255, 255, 255, 0.08),
- 30px 40px 0 rgba(255, 255, 255, 0.06);
- animation: cloudFloat 25s ease-in-out infinite;
- pointer-events: none;
- z-index: -1;
-}
-
-.container::after {
- content: '';
- position: absolute;
- bottom: -30px;
- left: -30px;
- width: 150px;
- height: 80px;
- background: rgba(255, 255, 255, 0.08);
- border-radius: 40px;
- box-shadow:
- 20px 15px 0 rgba(255, 255, 255, 0.06),
- -20px 25px 0 rgba(255, 255, 255, 0.04);
- animation: cloudFloat 30s ease-in-out infinite reverse;
- pointer-events: none;
- z-index: -1;
-}
-
-@keyframes cloudFloat {
- 0%, 100% {
- transform: translateX(0px) translateY(0px);
- }
- 25% {
- transform: translateX(20px) translateY(-10px);
- }
- 50% {
- transform: translateX(-10px) translateY(-20px);
- }
- 75% {
- transform: translateX(15px) translateY(-5px);
- }
-}
-
-/* 响应式背景调整 */
-@media (max-width: 768px) {
- body::after {
- background-size: 150px 75px;
- }
-
- .container::before,
- .container::after {
- display: none;
- }
-}
-
-@media (max-width: 480px) {
- body {
- background: linear-gradient(135deg, #e8f5e8 0%, #d4f1d4 50%, #a8d5ba 100%);
- animation: none;
- }
-
- body::before,
- body::after {
- display: none;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/实时天气/css/style.css b/frontend/react-app/public/60sapi/实用功能/实时天气/css/style.css
deleted file mode 100644
index 8a1e29f0..00000000
--- a/frontend/react-app/public/60sapi/实用功能/实时天气/css/style.css
+++ /dev/null
@@ -1,409 +0,0 @@
-/* 基础样式重置 */
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body {
- font-family: 'Microsoft YaHei', Arial, sans-serif;
- line-height: 1.6;
- color: #333;
- min-height: 100vh;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 20px;
-}
-
-/* 头部样式 */
-.header {
- text-align: center;
- margin-bottom: 30px;
-}
-
-.header h1 {
- color: #2d5a3d;
- font-size: 2.5rem;
- font-weight: 300;
- margin-bottom: 10px;
-}
-
-/* 搜索区域 */
-.search-section {
- margin-bottom: 30px;
-}
-
-.search-box {
- display: flex;
- justify-content: center;
- gap: 10px;
- max-width: 500px;
- margin: 0 auto;
-}
-
-#cityInput {
- flex: 1;
- padding: 12px 16px;
- border: 2px solid #a8d5ba;
- border-radius: 25px;
- font-size: 16px;
- outline: none;
- transition: all 0.3s ease;
- background: rgba(255, 255, 255, 0.9);
-}
-
-#cityInput:focus {
- border-color: #6bb77b;
- box-shadow: 0 0 10px rgba(107, 183, 123, 0.3);
-}
-
-#searchBtn {
- padding: 12px 24px;
- background: linear-gradient(135deg, #6bb77b, #5a9f6a);
- color: white;
- border: none;
- border-radius: 25px;
- font-size: 16px;
- cursor: pointer;
- transition: all 0.3s ease;
- white-space: nowrap;
-}
-
-#searchBtn:hover {
- background: linear-gradient(135deg, #5a9f6a, #4a8759);
- transform: translateY(-2px);
- box-shadow: 0 4px 12px rgba(107, 183, 123, 0.4);
-}
-
-/* 加载动画 */
-.loading {
- text-align: center;
- padding: 40px;
-}
-
-.spinner {
- width: 40px;
- height: 40px;
- border: 4px solid #e8f5e8;
- border-top: 4px solid #6bb77b;
- border-radius: 50%;
- animation: spin 1s linear infinite;
- margin: 0 auto 20px;
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-/* 天气容器 */
-.weather-container {
- background: rgba(255, 255, 255, 0.95);
- border-radius: 20px;
- padding: 30px;
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
- backdrop-filter: blur(10px);
- border: 1px solid rgba(168, 213, 186, 0.3);
-}
-
-/* 位置信息 */
-.location-info {
- text-align: center;
- margin-bottom: 30px;
- padding-bottom: 20px;
- border-bottom: 2px solid #e8f5e8;
-}
-
-.location-info h2 {
- color: #2d5a3d;
- font-size: 2rem;
- margin-bottom: 5px;
-}
-
-.location-info p {
- color: #666;
- font-size: 14px;
-}
-
-/* 当前天气 */
-.current-weather {
- margin-bottom: 30px;
-}
-
-.weather-main {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 25px;
-}
-
-.temperature {
- font-size: 4rem;
- font-weight: 300;
- color: #2d5a3d;
-}
-
-.unit {
- font-size: 2rem;
- color: #6bb77b;
-}
-
-.weather-desc p:first-child {
- font-size: 1.5rem;
- color: #2d5a3d;
- margin-bottom: 5px;
-}
-
-.weather-desc p:last-child {
- color: #666;
- font-size: 14px;
-}
-
-/* 天气详情 */
-.weather-details {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
- gap: 15px;
-}
-
-.detail-item {
- background: rgba(168, 213, 186, 0.1);
- padding: 15px;
- border-radius: 12px;
- text-align: center;
- border: 1px solid rgba(168, 213, 186, 0.2);
-}
-
-.detail-item .label {
- display: block;
- color: #666;
- font-size: 12px;
- margin-bottom: 5px;
- text-transform: uppercase;
- letter-spacing: 0.5px;
-}
-
-.detail-item span:last-child {
- color: #2d5a3d;
- font-weight: 600;
- font-size: 16px;
-}
-
-/* 生活指数 */
-.life-index {
- margin-top: 30px;
-}
-
-.life-index h3 {
- color: #2d5a3d;
- font-size: 1.5rem;
- margin-bottom: 20px;
- text-align: center;
-}
-
-.index-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
- gap: 20px;
-}
-
-.index-item {
- display: flex;
- align-items: center;
- background: rgba(168, 213, 186, 0.05);
- padding: 20px;
- border-radius: 15px;
- border: 1px solid rgba(168, 213, 186, 0.2);
- transition: all 0.3s ease;
-}
-
-.index-item:hover {
- background: rgba(168, 213, 186, 0.1);
- transform: translateY(-2px);
- box-shadow: 0 4px 12px rgba(168, 213, 186, 0.2);
-}
-
-.index-icon {
- font-size: 2rem;
- margin-right: 15px;
- width: 50px;
- text-align: center;
-}
-
-.index-content h4 {
- color: #2d5a3d;
- font-size: 16px;
- margin-bottom: 5px;
-}
-
-.index-content p {
- color: #6bb77b;
- font-weight: 600;
- margin-bottom: 3px;
-}
-
-.index-content span {
- color: #666;
- font-size: 13px;
- line-height: 1.4;
-}
-
-/* 更新时间 */
-.update-time {
- text-align: center;
- margin-top: 30px;
- padding-top: 20px;
- border-top: 1px solid #e8f5e8;
- color: #666;
- font-size: 14px;
-}
-
-/* 错误信息 */
-.error-message {
- text-align: center;
- padding: 40px;
- background: rgba(255, 107, 107, 0.1);
- border-radius: 15px;
- border: 1px solid rgba(255, 107, 107, 0.2);
- color: #d63031;
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (min-width: 768px) and (max-width: 1024px) {
- .container {
- padding: 25px;
- }
-
- .header h1 {
- font-size: 2.2rem;
- }
-
- .temperature {
- font-size: 3.5rem;
- }
-
- .weather-details {
- grid-template-columns: repeat(3, 1fr);
- }
-
- .index-grid {
- grid-template-columns: repeat(2, 1fr);
- }
-}
-
-/* 电脑端适配 (1024px+) */
-@media (min-width: 1024px) {
- .container {
- padding: 40px;
- }
-
- .weather-container {
- padding: 40px;
- }
-
- .weather-main {
- justify-content: space-around;
- }
-
- .weather-details {
- grid-template-columns: repeat(6, 1fr);
- }
-
- .index-grid {
- grid-template-columns: repeat(3, 1fr);
- }
-
- .search-box {
- max-width: 600px;
- }
-}
-
-/* 手机端适配 (768px以下) */
-@media (max-width: 767px) {
- .container {
- padding: 15px;
- }
-
- .header h1 {
- font-size: 2rem;
- }
-
- .search-box {
- flex-direction: column;
- gap: 15px;
- }
-
- #searchBtn {
- padding: 14px 24px;
- }
-
- .weather-container {
- padding: 20px;
- margin: 0 -5px;
- }
-
- .weather-main {
- flex-direction: column;
- text-align: center;
- gap: 20px;
- }
-
- .temperature {
- font-size: 3rem;
- }
-
- .weather-details {
- grid-template-columns: repeat(2, 1fr);
- gap: 10px;
- }
-
- .detail-item {
- padding: 12px;
- }
-
- .index-grid {
- grid-template-columns: 1fr;
- gap: 15px;
- }
-
- .index-item {
- padding: 15px;
- }
-
- .index-icon {
- font-size: 1.5rem;
- width: 40px;
- margin-right: 12px;
- }
-}
-
-/* 超小屏幕适配 (480px以下) */
-@media (max-width: 480px) {
- .container {
- padding: 10px;
- }
-
- .header h1 {
- font-size: 1.8rem;
- }
-
- .weather-container {
- padding: 15px;
- border-radius: 15px;
- }
-
- .temperature {
- font-size: 2.5rem;
- }
-
- .weather-details {
- grid-template-columns: 1fr;
- }
-
- .detail-item {
- padding: 10px;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/实时天气/index.html b/frontend/react-app/public/60sapi/实用功能/实时天气/index.html
deleted file mode 100644
index 474571a4..00000000
--- a/frontend/react-app/public/60sapi/实用功能/实时天气/index.html
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
-
-
实时天气查询
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 湿度
-
-
-
- 风向
-
-
-
- 风力
-
-
-
- 气压
-
-
-
- 能见度
-
-
-
- 空气质量
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/实时天气/js/script.js b/frontend/react-app/public/60sapi/实用功能/实时天气/js/script.js
deleted file mode 100644
index a3aaacda..00000000
--- a/frontend/react-app/public/60sapi/实用功能/实时天气/js/script.js
+++ /dev/null
@@ -1,252 +0,0 @@
-// 天气查询应用
-class WeatherApp {
- constructor() {
- this.apiEndpoints = [
- 'https://60s-cf.viki.moe',
- 'https://60s.viki.moe',
- 'https://60s.b23.run',
- 'https://60s.114128.xyz',
- 'https://60s-cf.114128.xyz'
- ];
- this.currentEndpointIndex = 0;
- this.init();
- }
-
- init() {
- this.bindEvents();
- // 页面加载时自动查询北京天气
- this.searchWeather('北京');
- }
-
- bindEvents() {
- const searchBtn = document.getElementById('searchBtn');
- const cityInput = document.getElementById('cityInput');
-
- searchBtn.addEventListener('click', () => {
- const city = cityInput.value.trim();
- if (city) {
- this.searchWeather(city);
- } else {
- this.showError('请输入城市名称');
- }
- });
-
- cityInput.addEventListener('keypress', (e) => {
- if (e.key === 'Enter') {
- const city = cityInput.value.trim();
- if (city) {
- this.searchWeather(city);
- } else {
- this.showError('请输入城市名称');
- }
- }
- });
-
- // 防止输入框为空时查询
- cityInput.addEventListener('input', () => {
- const searchBtn = document.getElementById('searchBtn');
- searchBtn.disabled = !cityInput.value.trim();
- });
- }
-
- async searchWeather(city) {
- this.showLoading();
-
- for (let i = 0; i < this.apiEndpoints.length; i++) {
- try {
- const endpoint = this.apiEndpoints[this.currentEndpointIndex];
- const response = await this.fetchWeatherData(endpoint, city);
-
- if (response && response.code === 200) {
- this.displayWeatherData(response.data);
- return;
- }
- } catch (error) {
- console.warn(`API ${this.apiEndpoints[this.currentEndpointIndex]} 请求失败:`, error);
- }
-
- // 切换到下一个API端点
- this.currentEndpointIndex = (this.currentEndpointIndex + 1) % this.apiEndpoints.length;
- }
-
- // 所有API都失败了
- this.showError('获取天气信息失败,请检查网络连接或稍后重试');
- }
-
- async fetchWeatherData(endpoint, city) {
- const url = `${endpoint}/v2/weather?query=${encodeURIComponent(city)}`;
-
- const response = await fetch(url, {
- method: 'GET',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- timeout: 10000
- });
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}`);
- }
-
- return await response.json();
- }
-
- displayWeatherData(data) {
- const { location, realtime } = data;
-
- // 显示位置信息
- document.getElementById('locationName').textContent = location.formatted;
- document.getElementById('locationDetail').textContent =
- `${location.province} ${location.city} | 邮编: ${location.zip_code}`;
-
- // 显示当前天气
- document.getElementById('temperature').textContent = realtime.temperature;
- document.getElementById('weatherCondition').textContent = realtime.weather;
-
- // 体感温度转换(API返回的是华氏度,需要转换为摄氏度)
- const feelsLikeCelsius = this.fahrenheitToCelsius(realtime.temperature_feels_like);
- document.getElementById('feelsLike').textContent =
- `体感温度 ${feelsLikeCelsius}°C`;
-
- // 显示天气详情
- document.getElementById('humidity').textContent = `${realtime.humidity}%`;
- document.getElementById('windDirection').textContent = realtime.wind_direction;
- document.getElementById('windStrength').textContent = realtime.wind_strength;
- document.getElementById('pressure').textContent = `${realtime.pressure} hPa`;
- document.getElementById('visibility').textContent = realtime.visibility;
-
- // 空气质量显示
- const aqiElement = document.getElementById('aqi');
- aqiElement.textContent = `${realtime.aqi} (PM2.5: ${realtime.pm25})`;
- aqiElement.className = this.getAQIClass(realtime.aqi);
-
- // 显示生活指数
- const lifeIndex = realtime.life_index;
- this.displayLifeIndex('comfort', lifeIndex.comfort);
- this.displayLifeIndex('clothing', lifeIndex.clothing);
- this.displayLifeIndex('umbrella', lifeIndex.umbrella);
- this.displayLifeIndex('uv', lifeIndex.uv);
- this.displayLifeIndex('travel', lifeIndex.travel);
- this.displayLifeIndex('sport', lifeIndex.sport);
-
- // 显示更新时间
- document.getElementById('updateTime').textContent =
- `${realtime.updated} (${realtime.updated_at})`;
-
- this.showWeatherContainer();
- }
-
- displayLifeIndex(type, indexData) {
- const levelElement = document.getElementById(`${type}Level`);
- const descElement = document.getElementById(`${type}Desc`);
-
- if (levelElement && descElement && indexData) {
- levelElement.textContent = indexData.level;
- descElement.textContent = indexData.desc;
-
- // 根据指数级别设置颜色
- levelElement.className = this.getIndexLevelClass(indexData.level);
- }
- }
-
- getAQIClass(aqi) {
- if (aqi <= 50) return 'aqi-good';
- if (aqi <= 100) return 'aqi-moderate';
- if (aqi <= 150) return 'aqi-unhealthy-sensitive';
- if (aqi <= 200) return 'aqi-unhealthy';
- if (aqi <= 300) return 'aqi-very-unhealthy';
- return 'aqi-hazardous';
- }
-
- getIndexLevelClass(level) {
- const levelMap = {
- '优': 'level-excellent',
- '良': 'level-good',
- '适宜': 'level-suitable',
- '舒适': 'level-comfortable',
- '较适宜': 'level-fairly-suitable',
- '不宜': 'level-unsuitable',
- '较不宜': 'level-fairly-unsuitable',
- '带伞': 'level-bring-umbrella',
- '最弱': 'level-weakest',
- '弱': 'level-weak',
- '中等': 'level-moderate',
- '强': 'level-strong',
- '很强': 'level-very-strong'
- };
-
- return levelMap[level] || 'level-default';
- }
-
- // 华氏度转摄氏度
- fahrenheitToCelsius(fahrenheit) {
- const celsius = (fahrenheit - 32) * 5 / 9;
- return Math.round(celsius * 10) / 10; // 保留一位小数
- }
-
- showLoading() {
- document.getElementById('loading').style.display = 'block';
- document.getElementById('weatherContainer').style.display = 'none';
- document.getElementById('errorMessage').style.display = 'none';
- }
-
- showWeatherContainer() {
- document.getElementById('loading').style.display = 'none';
- document.getElementById('weatherContainer').style.display = 'block';
- document.getElementById('errorMessage').style.display = 'none';
- }
-
- showError(message) {
- document.getElementById('loading').style.display = 'none';
- document.getElementById('weatherContainer').style.display = 'none';
- const errorElement = document.getElementById('errorMessage');
- errorElement.style.display = 'block';
- errorElement.querySelector('p').textContent = message;
- }
-}
-
-// 添加生活指数级别样式
-const style = document.createElement('style');
-style.textContent = `
- .aqi-good { color: #52c41a; }
- .aqi-moderate { color: #faad14; }
- .aqi-unhealthy-sensitive { color: #fa8c16; }
- .aqi-unhealthy { color: #f5222d; }
- .aqi-very-unhealthy { color: #a0206e; }
- .aqi-hazardous { color: #722ed1; }
-
- .level-excellent, .level-suitable, .level-comfortable { color: #52c41a; }
- .level-good, .level-fairly-suitable { color: #1890ff; }
- .level-bring-umbrella, .level-moderate { color: #faad14; }
- .level-unsuitable, .level-fairly-unsuitable { color: #f5222d; }
- .level-weakest, .level-weak { color: #52c41a; }
- .level-strong, .level-very-strong { color: #fa8c16; }
- .level-default { color: #666; }
-`;
-document.head.appendChild(style);
-
-// 页面加载完成后初始化应用
-document.addEventListener('DOMContentLoaded', () => {
- new WeatherApp();
-});
-
-// 添加页面可见性检测,当页面重新可见时刷新数据
-document.addEventListener('visibilitychange', () => {
- if (!document.hidden) {
- const cityInput = document.getElementById('cityInput');
- const city = cityInput.value.trim() || '北京';
- // 延迟1秒刷新,避免频繁请求
- setTimeout(() => {
- if (window.weatherApp) {
- window.weatherApp.searchWeather(city);
- }
- }, 1000);
- }
-});
-
-// 将应用实例暴露到全局,方便调试和其他功能调用
-window.weatherApp = null;
-document.addEventListener('DOMContentLoaded', () => {
- window.weatherApp = new WeatherApp();
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/实时天气/接口集合.json b/frontend/react-app/public/60sapi/实用功能/实时天气/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/实用功能/实时天气/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/实用功能/实时天气/返回接口.json b/frontend/react-app/public/60sapi/实用功能/实时天气/返回接口.json
deleted file mode 100644
index a0243aa1..00000000
--- a/frontend/react-app/public/60sapi/实用功能/实时天气/返回接口.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": {
- "location": {
- "province": "北京",
- "city": "北京",
- "town": "北京",
- "formatted": "北京",
- "location_id": "101010100",
- "detail_url": "http://www.weather.com.cn/weather/101010100.shtml",
- "is_province": true,
- "is_city": false,
- "is_town": false,
- "area_code": "10",
- "zip_code": "100000"
- },
- "realtime": {
- "weather": "小雨转多云",
- "weather_desc": "未知",
- "weather_code": "d7",
- "temperature": 26,
- "temperature_feels_like": 81.1,
- "humidity": 78,
- "wind_direction": "南风转北风",
- "wind_strength": "\u003C3级",
- "wind_speed": "5km/h",
- "pressure": 1008,
- "visibility": "8km",
- "aqi": 37,
- "pm25": 37,
- "rainfall": 0,
- "rainfall_24h": 0,
- "updated": "2025-08-29 08:00:00",
- "updated_at": "15:10",
- "life_index": {
- "comfort": {
- "level": "舒适",
- "desc": "白天温度宜人,风力不大。"
- },
- "clothing": {
- "level": "舒适",
- "desc": "建议穿长袖衬衫单裤等服装。"
- },
- "umbrella": {
- "level": "带伞",
- "desc": "有降水,带雨伞,短期外出可收起雨伞。"
- },
- "uv": {
- "level": "最弱",
- "desc": "辐射弱,涂擦SPF8-12防晒护肤品。"
- },
- "car_wash": {
- "level": "不宜",
- "desc": "有雨,雨水和泥水会弄脏爱车。"
- },
- "travel": {
- "level": "适宜",
- "desc": "较弱降水和微风将伴您共赴旅程。"
- },
- "sport": {
- "level": "较不宜",
- "desc": "有降水,推荐您在室内进行休闲运动。"
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/生成二维码/css/background.css b/frontend/react-app/public/60sapi/实用功能/生成二维码/css/background.css
deleted file mode 100644
index f0cd4e04..00000000
--- a/frontend/react-app/public/60sapi/实用功能/生成二维码/css/background.css
+++ /dev/null
@@ -1,132 +0,0 @@
-/* 背景样式文件 - 独立分离便于迁移 */
-
-/* 主背景渐变 */
-body {
- background: linear-gradient(135deg,
- #e8f5e8 0%,
- #f1f8e9 25%,
- #e8f5e8 50%,
- #c8e6c9 75%,
- #e8f5e8 100%);
- background-size: 400% 400%;
- animation: backgroundShift 15s ease-in-out infinite;
- position: relative;
-}
-
-/* 背景动画 */
-@keyframes backgroundShift {
- 0%, 100% {
- background-position: 0% 50%;
- }
- 25% {
- background-position: 100% 50%;
- }
- 50% {
- background-position: 50% 100%;
- }
- 75% {
- background-position: 50% 0%;
- }
-}
-
-/* 背景装饰元素 */
-body::before {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-image:
- radial-gradient(circle at 20% 20%, rgba(76, 175, 80, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 80% 80%, rgba(129, 199, 132, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 40% 60%, rgba(165, 214, 167, 0.08) 0%, transparent 50%);
- pointer-events: none;
- z-index: -1;
- animation: floatingBubbles 20s ease-in-out infinite;
-}
-
-@keyframes floatingBubbles {
- 0%, 100% {
- transform: translateY(0px) rotate(0deg);
- opacity: 1;
- }
- 33% {
- transform: translateY(-20px) rotate(120deg);
- opacity: 0.8;
- }
- 66% {
- transform: translateY(10px) rotate(240deg);
- opacity: 0.9;
- }
-}
-
-/* 背景粒子效果 */
-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;
- pointer-events: none;
- z-index: -1;
- animation: particleFloat 25s linear infinite;
-}
-
-@keyframes particleFloat {
- 0% {
- transform: translateY(0px);
- }
- 100% {
- transform: translateY(-100px);
- }
-}
-
-/* 响应式背景调整 */
-@media (max-width: 768px) {
- body::after {
- background-size: 150px 75px;
- animation-duration: 20s;
- }
-
- body::before {
- animation-duration: 15s;
- }
-}
-
-@media (max-width: 480px) {
- body::after {
- background-size: 100px 50px;
- animation-duration: 15s;
- }
-
- body::before {
- animation-duration: 12s;
- }
-
- body {
- animation-duration: 12s;
- }
-}
-
-/* 高性能模式 - 减少动画 */
-@media (prefers-reduced-motion: reduce) {
- body,
- body::before,
- body::after {
- animation: none;
- }
-
- body {
- background: linear-gradient(135deg, #e8f5e8 0%, #f1f8e9 50%, #c8e6c9 100%);
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/生成二维码/css/style.css b/frontend/react-app/public/60sapi/实用功能/生成二维码/css/style.css
deleted file mode 100644
index ca4dd96c..00000000
--- a/frontend/react-app/public/60sapi/实用功能/生成二维码/css/style.css
+++ /dev/null
@@ -1,468 +0,0 @@
-/* 基础样式重置 */
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body {
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
- line-height: 1.6;
- color: #2d5a3d;
- min-height: 100vh;
- overflow-x: hidden;
-}
-
-/* 容器样式 */
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 20px;
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- position: relative;
- z-index: 1;
-}
-
-/* 头部样式 */
-.header {
- text-align: center;
- margin-bottom: 40px;
- padding: 40px 20px;
- background: rgba(255, 255, 255, 0.95);
- backdrop-filter: blur(20px);
- border-radius: 20px;
- box-shadow: 0 8px 32px rgba(76, 175, 80, 0.1);
- border: 1px solid rgba(76, 175, 80, 0.2);
- position: relative;
- overflow: hidden;
-}
-
-.header::before {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 4px;
- background: linear-gradient(90deg, transparent, #4caf50, transparent);
- animation: headerGlow 3s ease-in-out infinite;
-}
-
-@keyframes headerGlow {
- 0% { left: -100%; }
- 50% { left: 100%; }
- 100% { left: 100%; }
-}
-
-.header h1 {
- font-size: 2.5rem;
- font-weight: 700;
- background: linear-gradient(135deg, #4caf50, #81c784, #4caf50);
- background-size: 200% 200%;
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-clip: text;
- margin-bottom: 10px;
- animation: titleGradient 4s ease-in-out infinite;
-}
-
-@keyframes titleGradient {
- 0%, 100% { background-position: 0% 50%; }
- 50% { background-position: 100% 50%; }
-}
-
-.header p {
- font-size: 1.1rem;
- color: #66bb6a;
- opacity: 0.9;
-}
-
-/* 主要内容区域 */
-.main {
- flex: 1;
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 40px;
- align-items: start;
-}
-
-/* 表单容器 */
-.form-container {
- background: rgba(255, 255, 255, 0.95);
- backdrop-filter: blur(20px);
- padding: 35px;
- border-radius: 20px;
- box-shadow: 0 8px 32px rgba(76, 175, 80, 0.1);
- border: 1px solid rgba(76, 175, 80, 0.2);
- transition: all 0.3s ease;
-}
-
-.form-container:hover {
- transform: translateY(-5px);
- box-shadow: 0 12px 40px rgba(76, 175, 80, 0.15);
-}
-
-/* 表单样式 */
-.qr-form {
- display: flex;
- flex-direction: column;
- gap: 25px;
-}
-
-.input-group {
- display: flex;
- flex-direction: column;
- gap: 8px;
-}
-
-.input-group label {
- font-weight: 600;
- color: #2d5a3d;
- font-size: 0.95rem;
-}
-
-textarea, select {
- padding: 12px 16px;
- border: 2px solid rgba(76, 175, 80, 0.3);
- border-radius: 12px;
- font-size: 1rem;
- background: rgba(255, 255, 255, 0.9);
- transition: all 0.3s ease;
- resize: vertical;
-}
-
-textarea {
- min-height: 100px;
- font-family: inherit;
-}
-
-textarea:focus, select:focus {
- outline: none;
- border-color: #4caf50;
- box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.1);
- background: rgba(255, 255, 255, 1);
-}
-
-.options-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
- gap: 20px;
-}
-
-/* 按钮样式 */
-.generate-btn {
- padding: 15px 30px;
- background: linear-gradient(135deg, #4caf50, #66bb6a);
- color: white;
- border: none;
- border-radius: 12px;
- font-size: 1.1rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.3s ease;
- position: relative;
- overflow: hidden;
- letter-spacing: 0.5px;
-}
-
-.generate-btn::before {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
- transition: left 0.5s ease;
-}
-
-.generate-btn:hover::before {
- left: 100%;
-}
-
-.generate-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 8px 25px rgba(76, 175, 80, 0.3);
-}
-
-.generate-btn:active {
- transform: translateY(0);
-}
-
-.generate-btn.loading .btn-text {
- display: none;
-}
-
-.generate-btn.loading .btn-loading {
- display: inline;
-}
-
-.btn-loading {
- display: none;
-}
-
-/* 结果容器 */
-.result-container {
- background: rgba(255, 255, 255, 0.95);
- backdrop-filter: blur(20px);
- padding: 35px;
- border-radius: 20px;
- box-shadow: 0 8px 32px rgba(76, 175, 80, 0.1);
- border: 1px solid rgba(76, 175, 80, 0.2);
- min-height: 400px;
- display: flex;
- align-items: center;
- justify-content: center;
- transition: all 0.3s ease;
-}
-
-/* 加载动画 */
-.loading {
- text-align: center;
- color: #4caf50;
-}
-
-.loading-spinner {
- width: 50px;
- height: 50px;
- border: 4px solid rgba(76, 175, 80, 0.2);
- border-top: 4px solid #4caf50;
- border-radius: 50%;
- animation: spin 1s linear infinite;
- margin: 0 auto 20px;
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-/* 错误样式 */
-.error {
- text-align: center;
- color: #d32f2f;
-}
-
-.error-icon {
- font-size: 3rem;
- margin-bottom: 15px;
-}
-
-.error-message {
- font-size: 1.1rem;
- margin-bottom: 20px;
- color: #666;
-}
-
-.retry-btn {
- padding: 10px 20px;
- background: #4caf50;
- color: white;
- border: none;
- border-radius: 8px;
- cursor: pointer;
- transition: all 0.3s ease;
-}
-
-.retry-btn:hover {
- background: #45a049;
- transform: translateY(-1px);
-}
-
-/* 结果显示 */
-.result {
- width: 100%;
- text-align: center;
-}
-
-.qr-display {
- margin-bottom: 25px;
-}
-
-.qr-display img {
- max-width: 100%;
- height: auto;
- border-radius: 12px;
- box-shadow: 0 4px 20px rgba(76, 175, 80, 0.2);
- transition: all 0.3s ease;
-}
-
-.qr-display img:hover {
- transform: scale(1.05);
- box-shadow: 0 8px 30px rgba(76, 175, 80, 0.3);
-}
-
-.result-info {
- display: flex;
- flex-direction: column;
- gap: 20px;
-}
-
-.result-text {
- font-size: 1rem;
- color: #666;
- word-break: break-all;
- background: rgba(76, 175, 80, 0.1);
- padding: 12px;
- border-radius: 8px;
- border-left: 4px solid #4caf50;
-}
-
-.result-actions {
- display: flex;
- gap: 10px;
- justify-content: center;
- flex-wrap: wrap;
-}
-
-.download-btn, .copy-btn, .new-btn {
- padding: 10px 16px;
- border: none;
- border-radius: 8px;
- cursor: pointer;
- font-size: 0.9rem;
- font-weight: 500;
- transition: all 0.3s ease;
-}
-
-.download-btn {
- background: #4caf50;
- color: white;
-}
-
-.copy-btn {
- background: #2196f3;
- color: white;
-}
-
-.new-btn {
- background: #ff9800;
- color: white;
-}
-
-.download-btn:hover, .copy-btn:hover, .new-btn:hover {
- transform: translateY(-1px);
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
-}
-
-/* 隐藏类 */
-.hidden {
- display: none !important;
-}
-
-/* 页脚样式 */
-.footer {
- text-align: center;
- margin-top: 40px;
- padding: 25px;
- background: rgba(255, 255, 255, 0.9);
- backdrop-filter: blur(15px);
- border-radius: 15px;
- color: #66bb6a;
- font-size: 0.9rem;
- border: 1px solid rgba(76, 175, 80, 0.1);
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (max-width: 1024px) and (min-width: 768px) {
- .container {
- max-width: 95%;
- padding: 15px;
- }
-
- .main {
- gap: 30px;
- }
-
- .header h1 {
- font-size: 2.2rem;
- }
-
- .form-container, .result-container {
- padding: 25px;
- }
-
- .options-grid {
- grid-template-columns: repeat(2, 1fr);
- }
-}
-
-/* 手机端适配 (最大768px) */
-@media (max-width: 768px) {
- .container {
- padding: 10px;
- }
-
- .header {
- margin-bottom: 25px;
- padding: 25px 15px;
- }
-
- .header h1 {
- font-size: 1.8rem;
- }
-
- .header p {
- font-size: 1rem;
- }
-
- .main {
- grid-template-columns: 1fr;
- gap: 25px;
- }
-
- .form-container, .result-container {
- padding: 20px;
- }
-
- .options-grid {
- grid-template-columns: 1fr;
- gap: 15px;
- }
-
- .result-actions {
- flex-direction: column;
- align-items: center;
- }
-
- .download-btn, .copy-btn, .new-btn {
- width: 100%;
- max-width: 200px;
- }
-}
-
-/* 小屏手机适配 (最大480px) */
-@media (max-width: 480px) {
- .container {
- padding: 8px;
- }
-
- .header {
- padding: 20px 10px;
- margin-bottom: 20px;
- }
-
- .header h1 {
- font-size: 1.6rem;
- }
-
- .form-container, .result-container {
- padding: 15px;
- border-radius: 15px;
- }
-
- .generate-btn {
- padding: 12px 20px;
- font-size: 1rem;
- }
-
- textarea {
- min-height: 80px;
- }
-
- .qr-display img {
- max-width: 90%;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/生成二维码/index.html b/frontend/react-app/public/60sapi/实用功能/生成二维码/index.html
deleted file mode 100644
index f9366891..00000000
--- a/frontend/react-app/public/60sapi/实用功能/生成二维码/index.html
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
-
二维码生成器
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
![生成的二维码]()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/生成二维码/js/script.js b/frontend/react-app/public/60sapi/实用功能/生成二维码/js/script.js
deleted file mode 100644
index f09ff5a6..00000000
--- a/frontend/react-app/public/60sapi/实用功能/生成二维码/js/script.js
+++ /dev/null
@@ -1,417 +0,0 @@
-// 二维码生成器 JavaScript
-class QRCodeGenerator {
- constructor() {
- this.apiEndpoints = [];
- this.currentApiIndex = 0;
- this.init();
- }
-
- // 初始化
- async init() {
- await this.loadApiEndpoints();
- this.bindEvents();
- this.setupFormValidation();
- }
-
- // 加载API接口列表
- async loadApiEndpoints() {
- try {
- const response = await fetch('./接口集合.json');
- this.apiEndpoints = await response.json();
- console.log('已加载API接口:', this.apiEndpoints);
- } catch (error) {
- console.error('加载API接口失败:', error);
- this.showError('加载配置失败,请刷新页面重试');
- }
- }
-
- // 绑定事件
- bindEvents() {
- const form = document.getElementById('qrForm');
- const retryBtn = document.querySelector('.retry-btn');
- const downloadBtn = document.querySelector('.download-btn');
- const copyBtn = document.querySelector('.copy-btn');
- const newBtn = document.querySelector('.new-btn');
-
- form.addEventListener('submit', (e) => this.handleSubmit(e));
- retryBtn.addEventListener('click', () => this.retryGeneration());
- downloadBtn.addEventListener('click', () => this.downloadQRCode());
- copyBtn.addEventListener('click', () => this.copyImageLink());
- newBtn.addEventListener('click', () => this.resetForm());
-
- // 实时字符计数
- const textArea = document.getElementById('text');
- textArea.addEventListener('input', () => this.updateCharCount());
- }
-
- // 设置表单验证
- setupFormValidation() {
- const textArea = document.getElementById('text');
- const form = document.getElementById('qrForm');
-
- textArea.addEventListener('blur', () => {
- if (textArea.value.trim() === '') {
- this.showFieldError(textArea, '请输入要生成二维码的内容');
- } else {
- this.clearFieldError(textArea);
- }
- });
- }
-
- // 显示字段错误
- showFieldError(field, message) {
- this.clearFieldError(field);
- field.style.borderColor = '#d32f2f';
- const errorDiv = document.createElement('div');
- errorDiv.className = 'field-error';
- errorDiv.style.color = '#d32f2f';
- errorDiv.style.fontSize = '0.8rem';
- errorDiv.style.marginTop = '5px';
- errorDiv.textContent = message;
- field.parentNode.appendChild(errorDiv);
- }
-
- // 清除字段错误
- clearFieldError(field) {
- field.style.borderColor = '';
- const errorDiv = field.parentNode.querySelector('.field-error');
- if (errorDiv) {
- errorDiv.remove();
- }
- }
-
- // 更新字符计数
- updateCharCount() {
- const textArea = document.getElementById('text');
- const text = textArea.value;
- const length = text.length;
-
- // 移除旧的计数显示
- const oldCounter = textArea.parentNode.querySelector('.char-counter');
- if (oldCounter) oldCounter.remove();
-
- // 添加新的计数显示
- if (length > 0) {
- const counter = document.createElement('div');
- counter.className = 'char-counter';
- counter.style.fontSize = '0.8rem';
- counter.style.color = '#666';
- counter.style.textAlign = 'right';
- counter.style.marginTop = '5px';
- counter.textContent = `${length} 个字符`;
- textArea.parentNode.appendChild(counter);
- }
- }
-
- // 处理表单提交
- async handleSubmit(e) {
- e.preventDefault();
-
- const formData = new FormData(e.target);
- const params = {
- text: formData.get('text').trim(),
- size: formData.get('size'),
- level: formData.get('level'),
- encoding: formData.get('encoding')
- };
-
- // 验证输入
- if (!params.text) {
- this.showFieldError(document.getElementById('text'), '请输入要生成二维码的内容');
- return;
- }
-
- this.showLoading();
- await this.generateQRCode(params);
- }
-
- // 生成二维码
- async generateQRCode(params) {
- let success = false;
- let lastError = null;
-
- // 尝试所有API接口
- for (let i = 0; i < this.apiEndpoints.length; i++) {
- const apiIndex = (this.currentApiIndex + i) % this.apiEndpoints.length;
- const apiUrl = this.apiEndpoints[apiIndex];
-
- try {
- console.log(`尝试API ${apiIndex + 1}:`, apiUrl);
- const result = await this.callAPI(apiUrl, params);
-
- if (result.success) {
- this.currentApiIndex = apiIndex; // 记录成功的API
- this.showResult(result.data, params);
- success = true;
- break;
- }
- } catch (error) {
- console.warn(`API ${apiIndex + 1} 失败:`, error);
- lastError = error;
- }
- }
-
- if (!success) {
- this.showError(lastError?.message || '所有API接口都无法访问,请稍后重试');
- }
- }
-
- // 调用API
- async callAPI(baseUrl, params) {
- const url = new URL('/v2/qrcode', baseUrl);
-
- // 添加查询参数
- Object.entries(params).forEach(([key, value]) => {
- if (value) {
- url.searchParams.append(key, value);
- }
- });
-
- console.log('请求URL:', url.toString());
-
- const controller = new AbortController();
- const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时
-
- try {
- const response = await fetch(url.toString(), {
- method: 'GET',
- signal: controller.signal,
- headers: {
- 'Accept': 'application/json, image/*'
- }
- });
-
- clearTimeout(timeoutId);
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- }
-
- // 根据返回格式处理
- if (params.encoding === 'image') {
- const blob = await response.blob();
- const imageUrl = URL.createObjectURL(blob);
- return {
- success: true,
- data: {
- imageUrl: imageUrl,
- text: params.text,
- size: params.size,
- level: params.level,
- format: 'image'
- }
- };
- } else {
- const jsonData = await response.json();
- if (jsonData.code === 0 && jsonData.data) {
- return {
- success: true,
- data: {
- imageUrl: jsonData.data.data_uri,
- text: params.text,
- size: params.size,
- level: params.level,
- format: 'json',
- base64: jsonData.data.base64,
- mimeType: jsonData.data.mime_type
- }
- };
- } else {
- throw new Error(jsonData.message || '生成失败');
- }
- }
- } catch (error) {
- clearTimeout(timeoutId);
- if (error.name === 'AbortError') {
- throw new Error('请求超时,请重试');
- }
- throw error;
- }
- }
-
- // 显示加载状态
- showLoading() {
- this.hideAllStates();
- document.getElementById('loading').classList.remove('hidden');
-
- const btn = document.querySelector('.generate-btn');
- btn.classList.add('loading');
- btn.disabled = true;
- }
-
- // 显示错误
- showError(message) {
- this.hideAllStates();
- const errorDiv = document.getElementById('error');
- const errorMessage = errorDiv.querySelector('.error-message');
- errorMessage.textContent = message;
- errorDiv.classList.remove('hidden');
-
- this.resetButton();
- }
-
- // 显示结果
- showResult(data, params) {
- this.hideAllStates();
-
- const resultDiv = document.getElementById('result');
- const qrImage = document.getElementById('qrImage');
- const resultText = document.querySelector('.result-text');
-
- qrImage.src = data.imageUrl;
- qrImage.alt = `二维码: ${data.text}`;
-
- resultText.innerHTML = `
-
内容: ${this.escapeHtml(data.text)}
-
尺寸: ${data.size}x${data.size}
-
容错级别: ${data.level}
-
格式: ${data.format.toUpperCase()}
- `;
-
- resultDiv.classList.remove('hidden');
- this.resetButton();
-
- // 保存数据供下载使用
- this.currentQRData = data;
- }
-
- // 隐藏所有状态
- hideAllStates() {
- document.getElementById('loading').classList.add('hidden');
- document.getElementById('error').classList.add('hidden');
- document.getElementById('result').classList.add('hidden');
- }
-
- // 重置按钮状态
- resetButton() {
- const btn = document.querySelector('.generate-btn');
- btn.classList.remove('loading');
- btn.disabled = false;
- }
-
- // 重试生成
- async retryGeneration() {
- const form = document.getElementById('qrForm');
- const formData = new FormData(form);
- const params = {
- text: formData.get('text').trim(),
- size: formData.get('size'),
- level: formData.get('level'),
- encoding: formData.get('encoding')
- };
-
- this.showLoading();
- await this.generateQRCode(params);
- }
-
- // 下载二维码
- downloadQRCode() {
- if (!this.currentQRData) return;
-
- const link = document.createElement('a');
- link.href = this.currentQRData.imageUrl;
- link.download = `qrcode_${Date.now()}.png`;
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
-
- this.showToast('二维码已下载');
- }
-
- // 复制图片链接
- async copyImageLink() {
- if (!this.currentQRData) return;
-
- try {
- await navigator.clipboard.writeText(this.currentQRData.imageUrl);
- this.showToast('链接已复制到剪贴板');
- } catch (error) {
- console.error('复制失败:', error);
- this.showToast('复制失败,请手动复制');
- }
- }
-
- // 重置表单
- resetForm() {
- document.getElementById('qrForm').reset();
- this.hideAllStates();
- this.currentQRData = null;
-
- // 清除字符计数
- const counter = document.querySelector('.char-counter');
- if (counter) counter.remove();
-
- // 清除字段错误
- document.querySelectorAll('input, textarea, select').forEach(field => {
- this.clearFieldError(field);
- });
-
- // 聚焦到文本框
- document.getElementById('text').focus();
- }
-
- // 显示提示消息
- showToast(message) {
- // 移除旧的toast
- const oldToast = document.querySelector('.toast');
- if (oldToast) oldToast.remove();
-
- const toast = document.createElement('div');
- toast.className = 'toast';
- toast.style.cssText = `
- position: fixed;
- top: 20px;
- right: 20px;
- background: #4caf50;
- color: white;
- padding: 12px 20px;
- border-radius: 8px;
- box-shadow: 0 4px 12px rgba(0,0,0,0.2);
- z-index: 1000;
- animation: slideIn 0.3s ease;
- `;
- toast.textContent = message;
-
- document.body.appendChild(toast);
-
- setTimeout(() => {
- toast.style.animation = 'slideOut 0.3s ease';
- setTimeout(() => toast.remove(), 300);
- }, 3000);
- }
-
- // HTML转义
- escapeHtml(text) {
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
- }
-}
-
-// 添加CSS动画
-const style = document.createElement('style');
-style.textContent = `
- @keyframes slideIn {
- from { transform: translateX(100%); opacity: 0; }
- to { transform: translateX(0); opacity: 1; }
- }
- @keyframes slideOut {
- from { transform: translateX(0); opacity: 1; }
- to { transform: translateX(100%); opacity: 0; }
- }
-`;
-document.head.appendChild(style);
-
-// 页面加载完成后初始化
-document.addEventListener('DOMContentLoaded', () => {
- new QRCodeGenerator();
-});
-
-// 错误处理
-window.addEventListener('error', (e) => {
- console.error('全局错误:', e.error);
-});
-
-window.addEventListener('unhandledrejection', (e) => {
- console.error('未处理的Promise拒绝:', e.reason);
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/生成二维码/接口集合.json b/frontend/react-app/public/60sapi/实用功能/生成二维码/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/实用功能/生成二维码/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/实用功能/生成二维码/返回接口.json b/frontend/react-app/public/60sapi/实用功能/生成二维码/返回接口.json
deleted file mode 100644
index 8cea87e9..00000000
--- a/frontend/react-app/public/60sapi/实用功能/生成二维码/返回接口.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "code": 0,
- "message": "success",
- "data": {
- "base64": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7Z15fBTV...",
- "data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7Z15fBTV...",
- "mime_type": "image/png",
- "text": "https://example.com"
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/百度百科词条/css/background.css b/frontend/react-app/public/60sapi/实用功能/百度百科词条/css/background.css
deleted file mode 100644
index 04fcd858..00000000
--- a/frontend/react-app/public/60sapi/实用功能/百度百科词条/css/background.css
+++ /dev/null
@@ -1,192 +0,0 @@
-/* 彩虹渐变背景样式 */
-
-/* 主背景渐变 */
-body {
- background: linear-gradient(
- 135deg,
- rgba(255, 107, 107, 0.3) 0%,
- rgba(255, 165, 0, 0.3) 14.28%,
- rgba(255, 255, 0, 0.25) 28.56%,
- rgba(50, 205, 50, 0.3) 42.84%,
- rgba(0, 191, 255, 0.3) 57.12%,
- rgba(65, 105, 225, 0.3) 71.4%,
- rgba(147, 112, 219, 0.3) 85.68%,
- rgba(255, 105, 180, 0.3) 100%
- );
- background-size: 400% 400%;
- animation: rainbowShift 20s ease infinite;
- min-height: 100vh;
-}
-
-/* 彩虹渐变动画 */
-@keyframes rainbowShift {
- 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: rgba(255, 255, 255, 0.4);
- backdrop-filter: blur(2px);
- z-index: -1;
- pointer-events: none;
-}
-
-/* 搜索按钮彩虹渐变 */
-.search-btn {
- background: linear-gradient(
- 45deg,
- rgba(255, 107, 107, 0.8),
- rgba(255, 165, 0, 0.8),
- rgba(255, 255, 0, 0.7),
- rgba(50, 205, 50, 0.8),
- rgba(0, 191, 255, 0.8),
- rgba(65, 105, 225, 0.8),
- rgba(147, 112, 219, 0.8)
- );
- background-size: 300% 300%;
- animation: buttonRainbow 12s ease infinite;
-}
-
-@keyframes buttonRainbow {
- 0%, 100% {
- background-position: 0% 50%;
- }
- 50% {
- background-position: 100% 50%;
- }
-}
-
-/* 结果卡片边框彩虹渐变 */
-.result-card {
- position: relative;
- overflow: hidden;
-}
-
-.result-card::before {
- content: '';
- position: absolute;
- top: -2px;
- left: -2px;
- right: -2px;
- bottom: -2px;
- background: linear-gradient(
- 45deg,
- rgba(255, 107, 107, 0.4),
- rgba(255, 165, 0, 0.4),
- rgba(255, 255, 0, 0.3),
- rgba(50, 205, 50, 0.4),
- rgba(0, 191, 255, 0.4),
- rgba(65, 105, 225, 0.4),
- rgba(147, 112, 219, 0.4),
- rgba(255, 107, 107, 0.4)
- );
- background-size: 400% 400%;
- animation: borderRainbow 15s linear infinite;
- border-radius: inherit;
- z-index: -1;
-}
-
-@keyframes borderRainbow {
- 0% {
- background-position: 0% 50%;
- }
- 100% {
- background-position: 400% 50%;
- }
-}
-
-/* 加载动画彩虹效果 */
-.loading-spinner {
- border: 4px solid rgba(255, 255, 255, 0.3);
- border-top: 4px solid transparent;
- border-image: linear-gradient(
- 45deg,
- #ff6b6b,
- #ffa500,
- #ffff00,
- #32cd32,
- #00bfff,
- #4169e1,
- #9370db
- ) 1;
- animation: spin 1s linear infinite, colorShift 3s ease infinite;
-}
-
-@keyframes colorShift {
- 0%, 100% {
- filter: hue-rotate(0deg);
- }
- 50% {
- filter: hue-rotate(180deg);
- }
-}
-
-/* 链接悬停彩虹效果 */
-.result-link:hover {
- background: linear-gradient(
- 90deg,
- rgba(255, 107, 107, 0.7),
- rgba(255, 165, 0, 0.7),
- rgba(255, 255, 0, 0.6),
- rgba(50, 205, 50, 0.7),
- rgba(0, 191, 255, 0.7),
- rgba(65, 105, 225, 0.7),
- rgba(147, 112, 219, 0.7)
- );
- background-size: 200% 200%;
- animation: linkRainbow 3s ease infinite;
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-clip: text;
-}
-
-@keyframes linkRainbow {
- 0%, 100% {
- background-position: 0% 50%;
- }
- 50% {
- background-position: 100% 50%;
- }
-}
-
-/* 标题彩虹文字效果 */
-.title {
- background: linear-gradient(
- 90deg,
- rgba(255, 107, 107, 0.8),
- rgba(255, 165, 0, 0.8),
- rgba(255, 255, 0, 0.7),
- rgba(50, 205, 50, 0.8),
- rgba(0, 191, 255, 0.8),
- rgba(65, 105, 225, 0.8),
- rgba(147, 112, 219, 0.8)
- );
- background-size: 200% 200%;
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-clip: text;
- animation: titleRainbow 8s ease infinite;
-}
-
-@keyframes titleRainbow {
- 0%, 100% {
- background-position: 0% 50%;
- }
- 50% {
- background-position: 100% 50%;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/百度百科词条/css/style.css b/frontend/react-app/public/60sapi/实用功能/百度百科词条/css/style.css
deleted file mode 100644
index 8de2ae2c..00000000
--- a/frontend/react-app/public/60sapi/实用功能/百度百科词条/css/style.css
+++ /dev/null
@@ -1,530 +0,0 @@
-/* 基础样式重置 */
-* {
- 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: #333;
- overflow-x: hidden;
-}
-
-/* 容器布局 */
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 20px;
- min-height: 100vh;
- display: flex;
- flex-direction: column;
-}
-
-/* 头部样式 */
-.header {
- text-align: center;
- margin-bottom: 40px;
- padding: 20px 0;
-}
-
-.title {
- font-size: 2.5rem;
- font-weight: 700;
- margin-bottom: 10px;
- text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
-}
-
-.subtitle {
- font-size: 1.1rem;
- color: rgba(255, 255, 255, 0.9);
- font-weight: 300;
- text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
-}
-
-/* 主内容区域 */
-.main {
- flex: 1;
- display: flex;
- flex-direction: column;
- gap: 30px;
-}
-
-/* 搜索区域 */
-.search-section {
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.search-container {
- display: flex;
- width: 100%;
- max-width: 600px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 50px;
- padding: 8px;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
- backdrop-filter: blur(10px);
- transition: all 0.3s ease;
-}
-
-.search-container:focus-within {
- transform: translateY(-2px);
- box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
-}
-
-.search-input {
- flex: 1;
- border: none;
- outline: none;
- padding: 15px 25px;
- font-size: 1.1rem;
- background: transparent;
- color: #333;
- border-radius: 50px;
-}
-
-.search-input::placeholder {
- color: #999;
- font-weight: 300;
-}
-
-.search-btn {
- border: none;
- outline: none;
- padding: 15px 25px;
- border-radius: 50px;
- color: white;
- font-size: 1rem;
- font-weight: 600;
- cursor: pointer;
- display: flex;
- align-items: center;
- gap: 8px;
- transition: all 0.3s ease;
- min-width: 120px;
- justify-content: center;
-}
-
-.search-btn:hover {
- transform: scale(1.05);
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
-}
-
-.search-btn:active {
- transform: scale(0.98);
-}
-
-.search-icon {
- font-size: 1.2rem;
-}
-
-/* 结果区域 */
-.result-section {
- flex: 1;
- display: flex;
- justify-content: center;
- align-items: flex-start;
- min-height: 400px;
-}
-
-/* 加载动画 */
-.loading {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 20px;
- padding: 40px;
- color: rgba(255, 255, 255, 0.9);
-}
-
-.loading-spinner {
- width: 50px;
- height: 50px;
- border-radius: 50%;
- animation: spin 1s linear infinite;
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-/* 结果卡片 */
-.result-card {
- width: 100%;
- max-width: 800px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 20px;
- padding: 30px;
- box-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
- backdrop-filter: blur(10px);
- animation: slideUp 0.5s ease;
-}
-
-@keyframes slideUp {
- from {
- opacity: 0;
- transform: translateY(30px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-.result-header {
- margin-bottom: 25px;
- text-align: center;
-}
-
-.result-title {
- font-size: 2rem;
- font-weight: 700;
- color: #333;
- margin-bottom: 10px;
-}
-
-.result-description {
- font-size: 1.1rem;
- color: #666;
- font-weight: 400;
-}
-
-.result-content {
- display: grid;
- grid-template-columns: 1fr 2fr;
- gap: 30px;
- align-items: start;
-}
-
-.result-image-container {
- display: flex;
- justify-content: center;
-}
-
-.result-image {
- width: 100%;
- max-width: 250px;
- height: auto;
- border-radius: 15px;
- box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
- transition: transform 0.3s ease;
-}
-
-.result-image:hover {
- transform: scale(1.05);
-}
-
-.result-text {
- display: flex;
- flex-direction: column;
- gap: 20px;
-}
-
-.result-abstract h3 {
- font-size: 1.3rem;
- color: #333;
- margin-bottom: 10px;
- font-weight: 600;
-}
-
-.result-abstract p {
- font-size: 1rem;
- line-height: 1.8;
- color: #555;
- text-align: justify;
-}
-
-.result-actions {
- display: flex;
- justify-content: flex-end;
-}
-
-.result-link {
- display: inline-flex;
- align-items: center;
- gap: 8px;
- padding: 12px 24px;
- background: rgba(0, 123, 255, 0.1);
- color: #007bff;
- text-decoration: none;
- border-radius: 25px;
- font-weight: 600;
- transition: all 0.3s ease;
- border: 2px solid transparent;
-}
-
-.result-link:hover {
- background: rgba(0, 123, 255, 0.2);
- transform: translateY(-2px);
- box-shadow: 0 5px 15px rgba(0, 123, 255, 0.3);
-}
-
-.link-icon {
- font-size: 1.2rem;
- transition: transform 0.3s ease;
-}
-
-.result-link:hover .link-icon {
- transform: translateX(5px);
-}
-
-/* 错误消息 */
-.error-message {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 20px;
- padding: 40px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 20px;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
- backdrop-filter: blur(10px);
- text-align: center;
- max-width: 500px;
- width: 100%;
-}
-
-.error-icon {
- font-size: 3rem;
-}
-
-.error-message h3 {
- color: #e74c3c;
- font-size: 1.5rem;
- margin-bottom: 10px;
-}
-
-.error-message p {
- color: #666;
- font-size: 1rem;
- line-height: 1.6;
-}
-
-.retry-btn {
- padding: 12px 24px;
- background: #e74c3c;
- color: white;
- border: none;
- border-radius: 25px;
- font-size: 1rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.3s ease;
-}
-
-.retry-btn:hover {
- background: #c0392b;
- transform: translateY(-2px);
- box-shadow: 0 5px 15px rgba(231, 76, 60, 0.3);
-}
-
-/* 欢迎消息 */
-.welcome-message {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 20px;
- padding: 60px 40px;
- background: rgba(255, 255, 255, 0.9);
- border-radius: 20px;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
- backdrop-filter: blur(10px);
- text-align: center;
- max-width: 600px;
- width: 100%;
-}
-
-.welcome-icon {
- font-size: 4rem;
- opacity: 0.8;
-}
-
-.welcome-message h3 {
- color: #333;
- font-size: 1.8rem;
- font-weight: 600;
- margin-bottom: 10px;
-}
-
-.welcome-message p {
- color: #666;
- font-size: 1.1rem;
- line-height: 1.6;
- max-width: 400px;
-}
-
-/* 页脚 */
-.footer {
- text-align: center;
- padding: 20px 0;
- margin-top: 40px;
- color: rgba(255, 255, 255, 0.8);
- font-size: 0.9rem;
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (max-width: 1024px) and (min-width: 768px) {
- .container {
- padding: 15px;
- }
-
- .title {
- font-size: 2.2rem;
- }
-
- .result-content {
- grid-template-columns: 1fr 1.5fr;
- gap: 25px;
- }
-
- .result-card {
- padding: 25px;
- }
-}
-
-/* 手机端适配 (最大768px) */
-@media (max-width: 768px) {
- .container {
- padding: 10px;
- }
-
- .header {
- margin-bottom: 30px;
- padding: 15px 0;
- }
-
- .title {
- font-size: 1.8rem;
- }
-
- .subtitle {
- font-size: 1rem;
- }
-
- .search-container {
- max-width: 100%;
- padding: 6px;
- }
-
- .search-input {
- padding: 12px 20px;
- font-size: 1rem;
- }
-
- .search-btn {
- padding: 12px 20px;
- min-width: 100px;
- font-size: 0.9rem;
- }
-
- .search-text {
- display: none;
- }
-
- .result-card {
- padding: 20px;
- border-radius: 15px;
- }
-
- .result-title {
- font-size: 1.5rem;
- }
-
- .result-description {
- font-size: 1rem;
- }
-
- .result-content {
- grid-template-columns: 1fr;
- gap: 20px;
- }
-
- .result-image {
- max-width: 200px;
- }
-
- .result-abstract h3 {
- font-size: 1.2rem;
- }
-
- .result-abstract p {
- font-size: 0.95rem;
- line-height: 1.7;
- }
-
- .result-actions {
- justify-content: center;
- }
-
- .welcome-message {
- padding: 40px 20px;
- }
-
- .welcome-icon {
- font-size: 3rem;
- }
-
- .welcome-message h3 {
- font-size: 1.5rem;
- }
-
- .welcome-message p {
- font-size: 1rem;
- }
-
- .error-message {
- padding: 30px 20px;
- }
-
- .error-icon {
- font-size: 2.5rem;
- }
-
- .error-message h3 {
- font-size: 1.3rem;
- }
-}
-
-/* 小屏手机适配 (最大480px) */
-@media (max-width: 480px) {
- .title {
- font-size: 1.6rem;
- }
-
- .search-container {
- flex-direction: column;
- gap: 10px;
- padding: 15px;
- border-radius: 20px;
- }
-
- .search-input {
- border-radius: 15px;
- text-align: center;
- }
-
- .search-btn {
- border-radius: 15px;
- justify-content: center;
- }
-
- .search-text {
- display: inline;
- }
-
- .result-card {
- padding: 15px;
- }
-
- .result-title {
- font-size: 1.3rem;
- }
-
- .result-image {
- max-width: 150px;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/百度百科词条/index.html b/frontend/react-app/public/60sapi/实用功能/百度百科词条/index.html
deleted file mode 100644
index 6b52b446..00000000
--- a/frontend/react-app/public/60sapi/实用功能/百度百科词条/index.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
百度百科词条查询
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
![词条图片]()
-
-
-
-
-
-
-
-
-
-
📚
-
欢迎使用百度百科词条查询
-
在上方搜索框中输入您想了解的词条,开始探索知识的海洋
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/百度百科词条/js/script.js b/frontend/react-app/public/60sapi/实用功能/百度百科词条/js/script.js
deleted file mode 100644
index 6dbc4939..00000000
--- a/frontend/react-app/public/60sapi/实用功能/百度百科词条/js/script.js
+++ /dev/null
@@ -1,324 +0,0 @@
-// 百度百科词条查询应用
-class BaikeApp {
- constructor() {
- // API接口列表
- this.apiEndpoints = [
- 'https://60s-cf.viki.moe',
- 'https://60s.viki.moe',
- 'https://60s.b23.run',
- 'https://60s.114128.xyz',
- 'https://60s-cf.114128.xyz'
- ];
-
- this.currentApiIndex = 0;
- this.isLoading = false;
-
- this.initElements();
- this.bindEvents();
- }
-
- // 初始化DOM元素
- initElements() {
- this.searchInput = document.getElementById('searchInput');
- this.searchBtn = document.getElementById('searchBtn');
- this.resultSection = document.getElementById('resultSection');
- this.loading = document.getElementById('loading');
- this.resultCard = document.getElementById('resultCard');
- this.errorMessage = document.getElementById('errorMessage');
- this.welcomeMessage = document.getElementById('welcomeMessage');
- this.retryBtn = document.getElementById('retryBtn');
-
- // 结果显示元素
- this.resultTitle = document.getElementById('resultTitle');
- this.resultDescription = document.getElementById('resultDescription');
- this.resultImage = document.getElementById('resultImage');
- this.resultAbstract = document.getElementById('resultAbstract');
- this.resultLink = document.getElementById('resultLink');
- this.errorText = document.getElementById('errorText');
- }
-
- // 绑定事件
- bindEvents() {
- // 搜索按钮点击事件
- this.searchBtn.addEventListener('click', () => {
- this.handleSearch();
- });
-
- // 输入框回车事件
- this.searchInput.addEventListener('keypress', (e) => {
- if (e.key === 'Enter') {
- this.handleSearch();
- }
- });
-
- // 重试按钮事件
- this.retryBtn.addEventListener('click', () => {
- this.handleSearch();
- });
-
- // 输入框焦点事件
- this.searchInput.addEventListener('focus', () => {
- this.searchInput.select();
- });
- }
-
- // 处理搜索
- async handleSearch() {
- const query = this.searchInput.value.trim();
-
- if (!query) {
- this.showError('请输入要查询的词条');
- this.searchInput.focus();
- return;
- }
-
- if (this.isLoading) {
- return;
- }
-
- await this.searchBaike(query);
- }
-
- // 搜索百科词条
- async searchBaike(query) {
- this.showLoading();
- this.isLoading = true;
-
- // 重置API索引
- this.currentApiIndex = 0;
-
- const success = await this.tryApiCall(query);
-
- if (!success) {
- this.showError('所有API接口都无法访问,请稍后重试');
- }
-
- this.isLoading = false;
- }
-
- // 尝试API调用
- async tryApiCall(query) {
- for (let i = 0; i < this.apiEndpoints.length; i++) {
- const endpoint = this.apiEndpoints[this.currentApiIndex];
-
- try {
- const result = await this.callApi(endpoint, query);
- if (result) {
- this.showResult(result);
- return true;
- }
- } catch (error) {
- console.warn(`API ${endpoint} 调用失败:`, error.message);
- }
-
- // 切换到下一个API
- this.currentApiIndex = (this.currentApiIndex + 1) % this.apiEndpoints.length;
- }
-
- return false;
- }
-
- // 调用API
- async callApi(endpoint, query) {
- const url = `${endpoint}/v2/baike?word=${encodeURIComponent(query)}`;
-
- const controller = new AbortController();
- const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时
-
- try {
- const response = await fetch(url, {
- method: 'GET',
- 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 && data.data) {
- return data.data;
- } else {
- throw new Error(data.message || '未找到相关词条');
- }
-
- } catch (error) {
- clearTimeout(timeoutId);
-
- if (error.name === 'AbortError') {
- throw new Error('请求超时');
- }
-
- throw error;
- }
- }
-
- // 显示加载状态
- showLoading() {
- this.hideAllSections();
- this.loading.style.display = 'flex';
- }
-
- // 显示搜索结果
- showResult(data) {
- this.hideAllSections();
-
- // 填充数据
- this.resultTitle.textContent = data.title || '未知标题';
- this.resultDescription.textContent = data.description || '暂无描述';
- this.resultAbstract.textContent = data.abstract || '暂无摘要信息';
-
- // 处理图片
- if (data.cover) {
- this.resultImage.src = data.cover;
- this.resultImage.style.display = 'block';
- this.resultImage.onerror = () => {
- this.resultImage.style.display = 'none';
- };
- } else {
- this.resultImage.style.display = 'none';
- }
-
- // 处理链接
- if (data.link) {
- this.resultLink.href = data.link;
- this.resultLink.style.display = 'inline-flex';
- } else {
- this.resultLink.style.display = 'none';
- }
-
- this.resultCard.style.display = 'block';
-
- // 滚动到结果区域
- this.resultCard.scrollIntoView({
- behavior: 'smooth',
- block: 'start'
- });
- }
-
- // 显示错误信息
- showError(message) {
- this.hideAllSections();
- this.errorText.textContent = message;
- this.errorMessage.style.display = 'flex';
- }
-
- // 隐藏所有区域
- hideAllSections() {
- this.loading.style.display = 'none';
- this.resultCard.style.display = 'none';
- this.errorMessage.style.display = 'none';
- this.welcomeMessage.style.display = 'none';
- }
-
- // 显示欢迎信息
- showWelcome() {
- this.hideAllSections();
- this.welcomeMessage.style.display = 'flex';
- }
-}
-
-// 工具函数
-class Utils {
- // 防抖函数
- static debounce(func, wait) {
- let timeout;
- return function executedFunction(...args) {
- const later = () => {
- clearTimeout(timeout);
- func(...args);
- };
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- };
- }
-
- // 节流函数
- static throttle(func, limit) {
- let inThrottle;
- return function() {
- const args = arguments;
- const context = this;
- if (!inThrottle) {
- func.apply(context, args);
- inThrottle = true;
- setTimeout(() => inThrottle = false, limit);
- }
- };
- }
-
- // 格式化文本长度
- static truncateText(text, maxLength) {
- if (text.length <= maxLength) {
- return text;
- }
- return text.substring(0, maxLength) + '...';
- }
-
- // 检查是否为移动设备
- static isMobile() {
- return window.innerWidth <= 768;
- }
-}
-
-// 页面加载完成后初始化应用
-document.addEventListener('DOMContentLoaded', () => {
- // 初始化应用
- const app = new BaikeApp();
-
- // 添加页面可见性变化监听
- document.addEventListener('visibilitychange', () => {
- if (document.visibilityState === 'visible') {
- // 页面重新可见时,聚焦搜索框
- if (!app.isLoading) {
- app.searchInput.focus();
- }
- }
- });
-
- // 添加窗口大小变化监听
- window.addEventListener('resize', Utils.throttle(() => {
- // 响应式调整
- if (Utils.isMobile()) {
- // 移动端特殊处理
- document.body.classList.add('mobile');
- } else {
- document.body.classList.remove('mobile');
- }
- }, 250));
-
- // 初始检查设备类型
- if (Utils.isMobile()) {
- document.body.classList.add('mobile');
- }
-
- // 页面加载完成后聚焦搜索框
- setTimeout(() => {
- app.searchInput.focus();
- }, 500);
-
- // 添加键盘快捷键支持
- document.addEventListener('keydown', (e) => {
- // Ctrl/Cmd + K 聚焦搜索框
- if ((e.ctrlKey || e.metaKey) && e.key === 'k') {
- e.preventDefault();
- app.searchInput.focus();
- app.searchInput.select();
- }
-
- // ESC 清空搜索框
- if (e.key === 'Escape') {
- app.searchInput.value = '';
- app.showWelcome();
- app.searchInput.focus();
- }
- });
-
- console.log('百度百科词条查询应用已初始化');
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/实用功能/百度百科词条/接口集合.json b/frontend/react-app/public/60sapi/实用功能/百度百科词条/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/实用功能/百度百科词条/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/实用功能/百度百科词条/返回接口.json b/frontend/react-app/public/60sapi/实用功能/百度百科词条/返回接口.json
deleted file mode 100644
index 55ec21dc..00000000
--- a/frontend/react-app/public/60sapi/实用功能/百度百科词条/返回接口.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": {
- "title": "西游记",
- "description": "明代吴承恩创作的章回体长篇神魔小说",
- "abstract": "《西游记》又名《西游释厄传》,是中国古代第一部浪漫主义章回体长篇神魔小说。最早的《西游记》版本是明代万历二十年金陵世德堂《新刻出像官板大字西游记》,未署作者姓名。鲁迅、董作宾等人根据《淮安府志》“吴承恩《西游记》”的记载予以最终论定“吴承恩原著”。该小说主要讲述了孙悟空出世,并寻菩提祖师学艺及大闹天宫后,与猪八戒、沙僧和白龙马一同护送唐僧西天取经,于路上历经险阻,降妖除魔,渡过了九九八十一难,成功...",
- "cover": "https://bkimg.cdn.bcebos.com/pic/b7fd5266d01609248d763e43db0735fae6cd3412?x-bce-process=image/format,f_auto",
- "has_other": true,
- "link": "http://baike.baidu.com/subview/2583/5315045.htm"
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/css/style.css b/frontend/react-app/public/60sapi/日更资讯/历史上的今天/css/style.css
deleted file mode 100644
index 93fb1485..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/css/style.css
+++ /dev/null
@@ -1,388 +0,0 @@
-/* 历史上的今天 - 手机端优先的响应式设计 */
-
-/* 重置样式 */
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body {
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- min-height: 100vh;
- color: #2c3e50;
- line-height: 1.6;
- overflow-x: hidden;
-}
-
-.container {
- max-width: 100%;
- margin: 0 auto;
- padding: 10px;
-}
-
-/* 头部样式 - 手机端优先 */
-.header {
- text-align: center;
- margin-bottom: 20px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 15px;
- padding: 20px 15px;
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
- backdrop-filter: blur(10px);
-}
-
-.header h1 {
- font-size: 1.8rem;
- color: #2c3e50;
- margin-bottom: 8px;
- font-weight: 700;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 10px;
- flex-wrap: wrap;
-}
-
-.header p {
- color: #7f8c8d;
- font-size: 0.9rem;
- line-height: 1.4;
-}
-
-/* 日期显示 */
-.date-info {
- background: rgba(255, 255, 255, 0.95);
- border-radius: 12px;
- padding: 15px;
- margin-bottom: 15px;
- text-align: center;
- box-shadow: 0 3px 15px rgba(0, 0, 0, 0.08);
-}
-
-.date-info h2 {
- font-size: 1.3rem;
- color: #2c3e50;
- margin-bottom: 5px;
-}
-
-.date-info .date-text {
- color: #7f8c8d;
- font-size: 0.9rem;
-}
-
-/* 加载状态 */
-.loading {
- text-align: center;
- padding: 30px 15px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 12px;
- box-shadow: 0 3px 15px rgba(0, 0, 0, 0.08);
-}
-
-.spinner {
- width: 35px;
- height: 35px;
- border: 3px solid #ecf0f1;
- border-top: 3px solid #667eea;
- border-radius: 50%;
- animation: spin 1s linear infinite;
- margin: 0 auto 15px;
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-/* 历史事件容器 */
-.events-container {
- background: rgba(255, 255, 255, 0.95);
- border-radius: 15px;
- padding: 15px;
- margin-bottom: 15px;
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
- backdrop-filter: blur(10px);
-}
-
-/* 统计信息 */
-.stats {
- display: grid;
- grid-template-columns: repeat(4, 1fr);
- gap: 8px;
- margin-bottom: 20px;
-}
-
-.stat-item {
- background: rgba(102, 126, 234, 0.1);
- border-radius: 10px;
- padding: 12px;
- text-align: center;
-}
-
-.stat-number {
- font-size: 1.4rem;
- font-weight: 700;
- color: #667eea;
- display: block;
-}
-
-.stat-label {
- color: #7f8c8d;
- font-size: 0.8rem;
- margin-top: 3px;
-}
-
-/* 事件列表 */
-.events-list {
- display: flex;
- flex-direction: column;
- gap: 12px;
-}
-
-.event-card {
- background: rgba(255, 255, 255, 0.9);
- border-radius: 12px;
- padding: 15px;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
- transition: all 0.3s ease;
- border-left: 4px solid #667eea;
- position: relative;
-}
-
-.event-card:hover {
- transform: translateY(-2px);
- box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
-}
-
-/* 事件类型标签 */
-.event-type {
- position: absolute;
- top: 10px;
- right: 10px;
- padding: 4px 8px;
- border-radius: 12px;
- font-size: 0.7rem;
- font-weight: 600;
- text-transform: uppercase;
-}
-
-.event-type.birth {
- background: #e8f5e8;
- color: #27ae60;
-}
-
-.event-type.death {
- background: #fdf2e9;
- color: #e67e22;
-}
-
-.event-type.event {
- background: #ebf3fd;
- color: #3498db;
-}
-
-/* 事件年份 */
-.event-year {
- font-size: 1.1rem;
- font-weight: 700;
- color: #667eea;
- margin-bottom: 8px;
- display: flex;
- align-items: center;
- gap: 8px;
-}
-
-.event-year::before {
- content: "📅";
- font-size: 1rem;
-}
-
-/* 事件标题 */
-.event-title {
- font-size: 1rem;
- font-weight: 600;
- color: #2c3e50;
- margin-bottom: 8px;
- line-height: 1.4;
-}
-
-/* 事件描述 */
-.event-description {
- color: #7f8c8d;
- font-size: 0.85rem;
- line-height: 1.5;
- margin-bottom: 10px;
-}
-
-/* 链接按钮 */
-.event-link {
- display: inline-flex;
- align-items: center;
- gap: 5px;
- color: #667eea;
- text-decoration: none;
- font-size: 0.8rem;
- font-weight: 500;
- padding: 6px 12px;
- background: rgba(102, 126, 234, 0.1);
- border-radius: 15px;
- transition: all 0.3s ease;
-}
-
-.event-link:hover {
- background: rgba(102, 126, 234, 0.2);
- transform: translateX(2px);
-}
-
-.event-link::after {
- content: "🔗";
- font-size: 0.7rem;
-}
-
-/* 错误提示 */
-.error {
- background: #fed7d7;
- color: #c53030;
- padding: 15px;
- border-radius: 12px;
- text-align: center;
- border: 1px solid #feb2b2;
- margin: 15px 0;
- font-size: 0.9rem;
-}
-
-/* 隐藏类 */
-.hidden {
- display: none;
-}
-
-/* 淡入动画 */
-.fade-in {
- animation: fadeIn 0.6s ease-in;
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(20px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/* 平板端适配 (768px+) */
-@media (min-width: 768px) {
- .container {
- max-width: 750px;
- padding: 20px;
- }
-
- .header {
- padding: 30px 25px;
- }
-
- .header h1 {
- font-size: 2.2rem;
- }
-
- .header p {
- font-size: 1rem;
- }
-
- .date-info {
- padding: 20px;
- }
-
- .date-info h2 {
- font-size: 1.5rem;
- }
-
- .events-container {
- padding: 25px;
- }
-
- .stats {
- gap: 15px;
- }
-
- .event-card {
- padding: 20px;
- }
-
- .event-title {
- font-size: 1.1rem;
- }
-
- .event-description {
- font-size: 0.9rem;
- }
-}
-
-/* 电脑端适配 (1024px+) */
-@media (min-width: 1024px) {
- .container {
- max-width: 1000px;
- padding: 30px;
- }
-
- .header {
- padding: 40px 35px;
- }
-
- .header h1 {
- font-size: 2.5rem;
- }
-
- .events-list {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 20px;
- }
-
- .event-card {
- padding: 25px;
- }
-
- .event-title {
- font-size: 1.2rem;
- }
-
- .event-description {
- font-size: 0.95rem;
- }
-}
-
-/* 大屏幕优化 (1200px+) */
-@media (min-width: 1200px) {
- .container {
- max-width: 1200px;
- padding: 40px;
- }
-
- .events-list {
- grid-template-columns: repeat(3, 1fr);
- gap: 25px;
- }
-}
-
-/* 滚动条样式 */
-::-webkit-scrollbar {
- width: 6px;
-}
-
-::-webkit-scrollbar-track {
- background: rgba(255, 255, 255, 0.1);
-}
-
-::-webkit-scrollbar-thumb {
- background: rgba(102, 126, 234, 0.5);
- border-radius: 3px;
-}
-
-::-webkit-scrollbar-thumb:hover {
- background: rgba(102, 126, 234, 0.7);
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/index.html b/frontend/react-app/public/60sapi/日更资讯/历史上的今天/index.html
deleted file mode 100644
index 2f941a44..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/index.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
历史上的今天 - 60s API集合
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/js/script.js b/frontend/react-app/public/60sapi/日更资讯/历史上的今天/js/script.js
deleted file mode 100644
index 986eac74..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/js/script.js
+++ /dev/null
@@ -1,295 +0,0 @@
-// 历史上的今天 - JavaScript 功能实现
-
-// API 配置
-const API = {
- endpoints: [],
- currentIndex: 0,
- encoding: 'utf-8',
- // 初始化API接口列表
- async init() {
- try {
- const res = await fetch('./接口集合.json');
- const endpoints = await res.json();
- this.endpoints = endpoints.map(endpoint => `${endpoint}/v2/today_in_history`);
- } catch (e) {
- // 如果无法加载接口集合,使用默认接口
- this.endpoints = ['https://60s.viki.moe/v2/today_in_history'];
- }
- },
- // 获取当前接口URL
- getCurrentUrl() {
- if (this.endpoints.length === 0) return null;
- const url = new URL(this.endpoints[this.currentIndex]);
- url.searchParams.append('encoding', this.encoding);
- return url.toString();
- },
- // 切换到下一个接口
- switchToNext() {
- this.currentIndex = (this.currentIndex + 1) % this.endpoints.length;
- return this.currentIndex < this.endpoints.length;
- },
- // 重置到第一个接口
- reset() {
- this.currentIndex = 0;
- }
-};
-
-// 事件类型映射
-const EVENT_TYPE_MAP = {
- 'birth': { name: '诞生', icon: '🎂', color: '#27ae60' },
- 'death': { name: '逝世', icon: '🕊️', color: '#e67e22' },
- 'event': { name: '事件', icon: '📰', color: '#3498db' }
-};
-
-// DOM 元素
-let elements = {};
-let currentData = null;
-
-// 页面加载完成后初始化
-document.addEventListener('DOMContentLoaded', function() {
- initElements();
- loadTodayInHistory();
-});
-
-// 初始化 DOM 元素
-function initElements() {
- elements = {
- loading: document.getElementById('loading'),
- content: document.getElementById('history-content'),
- dateInfo: document.getElementById('date-info'),
- dateText: document.getElementById('date-text'),
- totalEvents: document.getElementById('total-events'),
- birthEvents: document.getElementById('birth-events'),
- deathEvents: document.getElementById('death-events'),
- otherEvents: document.getElementById('other-events'),
- eventsList: document.getElementById('events-list')
- };
-}
-
-// 加载历史上的今天数据
-async function loadTodayInHistory() {
- try {
- showLoading(true);
-
- // 初始化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 response = await fetch(url, {
- cache: 'no-store',
- timeout: 10000 // 10秒超时
- });
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- }
-
- const data = await response.json();
- console.log('API响应数据:', data);
-
- if (data.code === 200 && data.data) {
- console.log(`接口 ${i + 1} 请求成功`);
- currentData = data.data;
- displayHistoryData(data.data);
- return;
- } else {
- throw new Error(data.message || '获取数据失败');
- }
-
- } catch (error) {
- console.warn(`接口 ${i + 1} 失败:`, error.message);
-
- // 如果不是最后一个接口,切换到下一个
- if (i < API.endpoints.length - 1) {
- API.switchToNext();
- continue;
- }
-
- // 所有接口都失败了,抛出错误
- throw new Error('所有接口都无法访问');
- }
- }
-
- } catch (error) {
- console.error('加载历史数据失败:', error);
- showError(`加载失败: ${error.message}`);
- } finally {
- showLoading(false);
- }
-}
-
-// 显示历史数据
-function displayHistoryData(data) {
- if (!data || !data.items) {
- showError('没有获取到历史数据');
- return;
- }
-
- // 更新日期信息
- updateDateInfo(data);
-
- // 更新统计信息
- updateStats(data.items);
-
- // 显示事件列表
- renderEventsList(data.items);
-
- // 显示内容区域
- if (elements.content) {
- elements.content.classList.add('fade-in');
- elements.content.style.display = 'block';
- }
-}
-
-// 更新日期信息
-function updateDateInfo(data) {
- if (elements.dateText && data.date) {
- const today = new Date();
- const year = today.getFullYear();
- elements.dateText.textContent = `${year}年${data.month}月${data.day}日`;
- }
-}
-
-// 更新统计信息
-function updateStats(items) {
- const stats = {
- total: items.length,
- birth: items.filter(item => item.event_type === 'birth').length,
- death: items.filter(item => item.event_type === 'death').length,
- event: items.filter(item => item.event_type === 'event').length
- };
-
- if (elements.totalEvents) {
- elements.totalEvents.textContent = stats.total;
- }
-
- if (elements.birthEvents) {
- elements.birthEvents.textContent = stats.birth;
- }
-
- if (elements.deathEvents) {
- elements.deathEvents.textContent = stats.death;
- }
-
- if (elements.otherEvents) {
- elements.otherEvents.textContent = stats.event;
- }
-}
-
-// 渲染事件列表
-function renderEventsList(items) {
- if (!elements.eventsList || !items) return;
-
- // 按年份排序(从今到古)
- const sortedItems = [...items].sort((a, b) => {
- return parseInt(b.year) - parseInt(a.year);
- });
-
- elements.eventsList.innerHTML = '';
-
- sortedItems.forEach(item => {
- const eventCard = createEventCard(item);
- elements.eventsList.appendChild(eventCard);
- });
-}
-
-// 创建事件卡片
-function createEventCard(item) {
- const card = document.createElement('div');
- card.className = 'event-card';
-
- const eventType = EVENT_TYPE_MAP[item.event_type] || EVENT_TYPE_MAP['event'];
-
- card.innerHTML = `
-
${eventType.name}
-
${formatYear(item.year)}
-
${escapeHtml(item.title)}
-
${escapeHtml(item.description)}
- ${item.link ? `
了解更多` : ''}
- `;
-
- return card;
-}
-
-// 格式化年份显示
-function formatYear(year) {
- const yearNum = parseInt(year);
- if (yearNum < 0) {
- return `公元前${Math.abs(yearNum)}年`;
- } else if (yearNum < 1000) {
- return `公元${yearNum}年`;
- } else {
- return `${yearNum}年`;
- }
-}
-
-// 显示加载状态
-function showLoading(show) {
- if (elements.loading) {
- elements.loading.style.display = show ? 'block' : 'none';
- }
-
- if (elements.content) {
- elements.content.style.display = show ? 'none' : 'block';
- }
-}
-
-// 显示错误信息
-function showError(message) {
- if (elements.content) {
- elements.content.innerHTML = `
-
-
😔 加载失败
-
${escapeHtml(message)}
-
-
- `;
- elements.content.style.display = 'block';
- }
-}
-
-// HTML 转义
-function escapeHtml(text) {
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
-}
-
-// 错误处理
-window.addEventListener('error', function(event) {
- console.error('页面错误:', event.error);
-});
-
-// 网络状态监听
-window.addEventListener('online', function() {
- console.log('网络已连接');
-});
-
-window.addEventListener('offline', function() {
- console.log('网络已断开');
- showError('网络连接已断开,请检查网络设置');
-});
-
-// 导出全局方法
-window.TodayInHistory = {
- loadTodayInHistory,
- showError,
- showLoading
-};
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/接口集合.json b/frontend/react-app/public/60sapi/日更资讯/历史上的今天/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/返回接口.json b/frontend/react-app/public/60sapi/日更资讯/历史上的今天/返回接口.json
deleted file mode 100644
index 8531e735..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/历史上的今天/返回接口.json
+++ /dev/null
@@ -1,102 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": {
- "date": "8-19",
- "month": 8,
- "day": 19,
- "items": [
- {
- "title": "罗马帝国开国皇帝奥古斯都逝世",
- "year": "14",
- "description": "奥古斯都(拉丁文 Augustus的中译,复数型 Augusti)的原意为“神圣的”、“高贵的”,带有宗教与神学式的意味。",
- "event_type": "death",
- "link": "https://baike.baidu.com/item/%E5%A5%A5%E5%8F%A4%E6%96%AF%E9%83%BD/14291"
- },
- {
- "title": "近代概率论的奠基者帕斯卡逝世",
- "year": "1662",
- "description": "布莱士·帕斯卡(Blaise Pascal ,1623-1662)是法国数学家、物理学家、哲学家、散文家。",
- "event_type": "death",
- "link": "https://baike.baidu.com/item/%E5%B8%83%E8%8E%B1%E5%A3%AB%C2%B7%E5%B8%95%E6%96%AF%E5%8D%A1"
- },
- {
- "title": "瑞典国王古斯塔夫三世发动政变夺取权力",
- "year": "1772",
- "description": "古斯塔夫三世(Gustavus III,1746-1792)是瑞典历史上褒贬最多的国王(1771-1792)。阿道夫·弗里德里克国王的儿子和继承者。",
- "event_type": "event",
- "link": "https://baike.baidu.com/item/%E5%8F%A4%E6%96%AF%E5%A1%94%E5%A4%AB%E4%B8%89%E4%B8%96"
- },
- {
- "title": "美国飞机设计师奥维尔·莱特诞生",
- "year": "1871",
- "description": "奥威尔莱特(公元1871~公元1948)。 奥维尔·莱特1871年生于美国俄亥俄州代顿市。上过中学,但实际上未获得毕业文凭。",
- "event_type": "birth",
- "link": "https://baike.baidu.com/item/%E5%A5%A5%E7%BB%B4%E5%B0%94%C2%B7%E8%8E%B1%E7%89%B9"
- },
- {
- "title": "法国著名时装设计师、香奈儿品牌创始人加布里埃·香奈儿出生",
- "year": "1883",
- "description": "香奈儿儿时入读修女院学校学得一手针线活。后来她与许多上流社会男士有过交往。1910年,毅然放弃嫁入豪门做阔太太的她在巴黎开设了一家女装帽子店,从此开创了香奈儿时尚帝国。",
- "event_type": "birth",
- "link": "https://baike.baidu.com/item/%E5%8A%A0%E5%B8%83%E9%87%8C%E5%9F%83%C2%B7%E9%A6%99%E5%A5%88%E5%84%BF/9480318"
- },
- {
- "title": "美国宇航员斯托里·马斯格雷夫出生",
- "year": "1935",
- "description": "斯托里·马斯格雷夫(Franklin Story Musgrave,1935年8月19日-),美国宇航员,拥有医学、数学、文学等六个学位,入选美国国家航空航天局(NASA)科学家宇航员。",
- "event_type": "birth",
- "link": "https://baike.baidu.com/item/%E6%96%AF%E6%89%98%E9%87%8C%C2%B7%E9%A9%AC%E6%96%AF%E6%A0%BC%E9%9B%B7%E5%A4%AB"
- },
- {
- "title": "纳粹德国陆军元帅京特·冯·克鲁格畏罪自杀",
- "year": "1944",
- "description": "汉斯·京特·冯·克卢格(Günther·von·Kluge, 1882年10月30日-1944年8月19日),纳粹德国陆军元帅(1940.7.19),著名军事家、统帅。",
- "event_type": "death",
- "link": "https://baike.baidu.com/item/%E4%BA%AC%E7%89%B9%C2%B7%E5%86%AF%C2%B7%E5%85%8B%E9%B2%81%E6%A0%BC"
- },
- {
- "title": "美国第42任总统克林顿出生",
- "year": "1946",
- "description": "威廉·杰斐逊·克林顿,美国律师、政治家,美国民主党成员,曾任阿肯色州州长和第42任美国总统。克林顿基金会主席 。",
- "event_type": "birth",
- "link": "https://baike.baidu.com/item/%E5%A8%81%E5%BB%89%C2%B7%E6%9D%B0%E6%96%90%E9%80%8A%C2%B7%E5%85%8B%E6%9E%97%E9%A1%BF"
- },
- {
- "title": "美国演员马修·派瑞出生",
- "year": "1969",
- "description": "马修·派瑞(Matthew Perry,1969年8月19日—2023年10月28日),出生于美国马萨诸塞州普利茅斯,美国、加拿大籍男演员、编剧。",
- "event_type": "birth",
- "link": "https://baike.baidu.com/item/%E9%A9%AC%E4%BF%AE%C2%B7%E6%B4%BE%E7%91%9E"
- },
- {
- "title": "北回归线标志塔在广州落成",
- "year": "1985",
- "description": "北回归线标志塔,是标志地理学上北回归线经过地方的建筑物。",
- "event_type": "event",
- "link": "https://baike.baidu.com/item/%E5%8C%97%E5%9B%9E%E5%BD%92%E7%BA%BF%E6%A0%87%E5%BF%97%E5%A1%94"
- },
- {
- "title": "“八一九事件”,苏联八月政变",
- "year": "1991",
- "description": "八一九事件,又称“苏联政变”、“八月政变”,指1991年8月19日-8月21日在苏联发生的一次政变。",
- "event_type": "event",
- "link": "https://baike.baidu.com/item/%E5%85%AB%E4%B8%80%E4%B9%9D%E4%BA%8B%E4%BB%B6"
- },
- {
- "title": "量子化学家莱纳斯·卡尔·鲍林逝世",
- "year": "1994",
- "description": "莱纳斯·卡尔·鲍林(Linus Carl Pauling,1901年2月28日—1994年8月19日),出生于美国俄勒冈州波特兰,化学家、美国国家科学院院士、美国艺术与科学院院士,1954年诺贝尔化学奖获得者。",
- "event_type": "death",
- "link": "https://baike.baidu.com/item/%E8%8E%B1%E7%BA%B3%E6%96%AF%C2%B7%E5%8D%A1%E5%B0%94%C2%B7%E9%B2%8D%E6%9E%97"
- },
- {
- "title": "中国三江源自然保护区成立",
- "year": "2000",
- "description": "青海三江源国家级自然保护区位于青藏高原腹地,青海省南部,地理位置介于东经89°24′~102°23′,北纬31°39′~36°16′之间,青海三江源国家级自然保护区属湿地类型的自然保护区。",
- "event_type": "event",
- "link": "https://baike.baidu.com/item/%E4%B8%89%E6%B1%9F%E6%BA%90%E8%87%AA%E7%84%B6%E4%BF%9D%E6%8A%A4%E5%8C%BA"
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/css/style.css b/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/css/style.css
deleted file mode 100644
index ac8ca0e5..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/css/style.css
+++ /dev/null
@@ -1,326 +0,0 @@
-/* 必应每日壁纸 - 淡绿色清新风格样式 */
-
-/* 重置样式 */
-* {
- 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); }
-}
-
-/* 壁纸容器 */
-.wallpaper-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;
-}
-
-/* 壁纸信息 */
-.wallpaper-info {
- text-align: center;
- margin-bottom: 25px;
-}
-
-.wallpaper-title {
- font-size: 1.8rem;
- font-weight: 700;
- color: #2d5016;
- margin-bottom: 10px;
-}
-
-.wallpaper-date {
- color: #5a7c65;
- font-size: 1rem;
- margin-bottom: 15px;
-}
-
-.wallpaper-description {
- color: #2d5016;
- font-size: 1.1rem;
- line-height: 1.6;
- max-width: 800px;
- margin: 0 auto;
-}
-
-/* 壁纸图片 */
-.wallpaper-image {
- position: relative;
- border-radius: 15px;
- overflow: hidden;
- box-shadow: 0 10px 30px rgba(45, 80, 22, 0.15);
- margin: 20px 0;
-}
-
-.wallpaper-image img {
- width: 100%;
- height: auto;
- display: block;
- transition: transform 0.3s ease;
-}
-
-.wallpaper-image:hover img {
- transform: scale(1.02);
-}
-
-/* 下载按钮 */
-.download-section {
- text-align: center;
- margin-top: 25px;
-}
-
-.download-btn {
- background: linear-gradient(135deg, #81c784 0%, #66bb6a 100%);
- color: white;
- border: none;
- padding: 15px 30px;
- border-radius: 25px;
- font-size: 1.1rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.3s ease;
- box-shadow: 0 4px 15px rgba(129, 199, 132, 0.3);
- text-decoration: none;
- display: inline-flex;
- align-items: center;
- gap: 10px;
-}
-
-.download-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(129, 199, 132, 0.4);
-}
-
-.download-btn:active {
- transform: translateY(0);
-}
-
-/* 错误提示 */
-.error {
- background: #fed7d7;
- color: #c53030;
- padding: 20px;
- border-radius: 15px;
- text-align: center;
- border: 1px solid #feb2b2;
- margin: 20px 0;
-}
-
-/* 版权信息 */
-.copyright {
- background: rgba(255, 255, 255, 0.7);
- border-radius: 15px;
- padding: 20px;
- text-align: center;
- color: #5a7c65;
- font-size: 0.9rem;
- margin-top: 20px;
-}
-
-/* 响应式设计 */
-
-/* 平板端 */
-@media (max-width: 768px) {
- .container {
- padding: 15px;
- }
-
- .header h1 {
- font-size: 2rem;
- flex-direction: column;
- gap: 10px;
- }
-
- .header {
- padding: 20px;
- }
-
- .wallpaper-container {
- padding: 20px;
- }
-
- .wallpaper-title {
- font-size: 1.5rem;
- }
-
- .wallpaper-description {
- font-size: 1rem;
- }
-}
-
-/* 手机端 */
-@media (max-width: 480px) {
- .container {
- padding: 10px;
- }
-
- .header {
- padding: 15px;
- margin-bottom: 20px;
- }
-
- .header h1 {
- font-size: 1.8rem;
- }
-
- .wallpaper-container {
- padding: 15px;
- }
-
- .wallpaper-title {
- font-size: 1.3rem;
- }
-
- .wallpaper-description {
- font-size: 0.95rem;
- }
-
- .download-btn {
- padding: 12px 25px;
- font-size: 1rem;
- width: 100%;
- justify-content: center;
- }
-
- .copyright {
- padding: 15px;
- font-size: 0.8rem;
- }
-}
-
-/* 大屏幕优化 */
-@media (min-width: 1200px) {
- .container {
- padding: 40px;
- }
-
- .header {
- padding: 40px;
- }
-
- .wallpaper-container {
- padding: 40px;
- }
-
- .wallpaper-image {
- max-height: 70vh;
- overflow: hidden;
- }
-
- .wallpaper-image img {
- width: 100%;
- height: 100%;
- object-fit: cover;
- }
-}
-
-/* 特殊效果 */
-.fade-in {
- animation: fadeIn 0.6s ease-in;
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(20px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/* 图片加载效果 */
-.wallpaper-image img {
- opacity: 0;
- transition: opacity 0.3s ease;
-}
-
-.wallpaper-image img.loaded {
- opacity: 1;
-}
-
-/* 滚动条样式 */
-::-webkit-scrollbar {
- width: 8px;
-}
-
-::-webkit-scrollbar-track {
- background: rgba(255, 255, 255, 0.1);
-}
-
-::-webkit-scrollbar-thumb {
- background: rgba(129, 199, 132, 0.5);
- border-radius: 4px;
-}
-
-::-webkit-scrollbar-thumb:hover {
- background: rgba(129, 199, 132, 0.7);
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/index.html b/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/index.html
deleted file mode 100644
index ac3ecb85..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
必应每日壁纸
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/js/script.js b/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/js/script.js
deleted file mode 100644
index 9e231288..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/js/script.js
+++ /dev/null
@@ -1,315 +0,0 @@
-// 必应每日壁纸 JavaScript 功能
-
-// API配置
-const API = {
- endpoints: [],
- currentIndex: 0,
- params: {
- encoding: 'json'
- },
- // 初始化API接口列表
- async init() {
- try {
- const res = await fetch('./接口集合.json');
- const endpoints = await res.json();
- this.endpoints = endpoints.map(endpoint => `${endpoint}/v2/bing`);
- } catch (e) {
- // 如果无法加载接口集合,使用默认接口
- this.endpoints = ['https://60s.viki.moe/v2/bing'];
- }
- },
- // 获取当前接口URL
- getCurrentUrl() {
- if (this.endpoints.length === 0) return null;
- const url = new URL(this.endpoints[this.currentIndex]);
- Object.keys(this.params).forEach(key => {
- url.searchParams.append(key, this.params[key]);
- });
- return url.toString();
- },
- // 切换到下一个接口
- switchToNext() {
- this.currentIndex = (this.currentIndex + 1) % this.endpoints.length;
- return this.currentIndex < this.endpoints.length;
- },
- // 重置到第一个接口
- reset() {
- this.currentIndex = 0;
- }
-};
-
-// DOM元素
-let elements = {};
-
-// 初始化
-document.addEventListener('DOMContentLoaded', function() {
- initElements();
- loadWallpaper();
-});
-
-// 初始化DOM元素
-function initElements() {
- elements = {
- container: document.getElementById('wallpaper-content'),
- loading: document.getElementById('loading')
- };
-}
-
-// 加载壁纸数据
-async function loadWallpaper() {
- try {
- showLoading(true);
-
- // 初始化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 response = await fetch(url, {
- cache: 'no-store',
- timeout: 10000 // 10秒超时
- });
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- }
-
- const data = await response.json();
- console.log('API响应数据:', data);
-
- // 检查数据有效性
- if (data && (data.code === 200 || data.data)) {
- console.log(`接口 ${i + 1} 请求成功`);
- displayWallpaper(data);
- return;
- }
-
- throw new Error(data && data.message ? data.message : '接口返回异常');
-
- } catch (error) {
- console.warn(`接口 ${i + 1} 失败:`, error.message);
-
- // 如果不是最后一个接口,切换到下一个
- if (i < API.endpoints.length - 1) {
- API.switchToNext();
- continue;
- }
-
- // 所有接口都失败了,抛出错误
- throw new Error('所有接口都无法访问');
- }
- }
-
- } catch (error) {
- console.error('加载壁纸失败:', error);
- showError('加载壁纸失败,请稍后重试');
- } finally {
- showLoading(false);
- }
-}
-
-// 显示壁纸
-function displayWallpaper(data) {
- if (!data) {
- showError('没有获取到壁纸数据');
- return;
- }
-
- // 提取壁纸信息
- const wallpaperInfo = extractWallpaperInfo(data);
-
- if (!wallpaperInfo || !wallpaperInfo.imageUrl) {
- showError('壁纸图片链接无效');
- return;
- }
-
- // 生成HTML内容
- const html = generateWallpaperHTML(wallpaperInfo);
-
- // 显示内容
- elements.container.innerHTML = html;
- elements.container.classList.add('fade-in');
-
- // 绑定图片加载事件
- bindImageEvents();
-}
-
-// 提取壁纸信息
-function extractWallpaperInfo(data) {
- // 根据API响应结构提取信息
- let imageUrl = '';
- let title = '必应每日壁纸';
- let description = '';
- let date = new Date().toLocaleDateString('zh-CN');
- let copyright = '';
-
- // 处理新的API响应格式
- if (data.data) {
- const wallpaperData = data.data;
- title = wallpaperData.title || title;
- description = wallpaperData.description || wallpaperData.main_text || '';
- copyright = wallpaperData.copyright || '';
- date = wallpaperData.update_date || date;
-
- // 提取图片URL,去除反引号
- if (wallpaperData.cover) {
- imageUrl = wallpaperData.cover.replace(/`/g, '').trim();
- }
- }
- // 处理其他可能的API响应格式
- else if (data.url) {
- imageUrl = data.url;
- } else if (data.image_url) {
- imageUrl = data.image_url;
- } else if (data.images && data.images.length > 0) {
- imageUrl = data.images[0].url || data.images[0].image_url;
- title = data.images[0].title || title;
- description = data.images[0].description || data.images[0].copyright || '';
- copyright = data.images[0].copyright || '';
- }
-
- // 如果是相对路径,转换为完整URL
- if (imageUrl && imageUrl.startsWith('/')) {
- imageUrl = 'https://www.bing.com' + imageUrl;
- }
-
- // 确保图片URL有效
- if (!imageUrl || imageUrl === '') {
- console.error('无法提取图片URL,原始数据:', data);
- return null;
- }
-
- return {
- imageUrl,
- title,
- description: description || copyright,
- date,
- copyright
- };
-}
-
-// 生成壁纸HTML
-function generateWallpaperHTML(info) {
- return `
-
-
-
${escapeHtml(info.title)}
-
${info.date}
- ${info.description ? `
${escapeHtml(info.description)}
` : ''}
-
-
-
-

-
-
-
-
-
- ${info.copyright ? `
-
-
${escapeHtml(info.copyright)}
-
- ` : ''}
- `;
-}
-
-// 绑定图片事件
-function bindImageEvents() {
- const images = elements.container.querySelectorAll('img');
-
- images.forEach(img => {
- img.addEventListener('load', function() {
- this.classList.add('loaded');
- });
-
- img.addEventListener('error', function() {
- console.error('图片加载失败:', this.src);
- this.parentElement.innerHTML = `
-
-
🖼️ 图片加载失败
-
请检查网络连接或稍后重试
-
- `;
- });
- });
-}
-
-// 显示/隐藏加载状态
-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) {
- elements.container.innerHTML = `
-
-
⚠️ 加载失败
-
${escapeHtml(message)}
-
请检查网络连接或稍后重试
-
- `;
- elements.container.style.display = 'block';
- }
-}
-
-// HTML转义
-function escapeHtml(text) {
- if (!text) return '';
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
-}
-
-// 格式化日期
-function formatDate(dateString) {
- try {
- const date = new Date(dateString);
- return date.toLocaleDateString('zh-CN', {
- year: 'numeric',
- month: 'long',
- day: 'numeric'
- });
- } catch (error) {
- return dateString;
- }
-}
-
-// 错误处理
-window.addEventListener('error', function(event) {
- console.error('页面错误:', event.error);
-});
-
-// 网络状态监听
-window.addEventListener('online', function() {
- console.log('网络已连接');
-});
-
-window.addEventListener('offline', function() {
- console.log('网络已断开');
- showError('网络连接已断开,请检查网络设置');
-});
-
-// 导出函数供外部调用
-window.BingWallpaper = {
- loadWallpaper,
- showError,
- showLoading
-};
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/接口集合.json b/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/返回接口.json b/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/返回接口.json
deleted file mode 100644
index 2c6a72a4..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/必应每日壁纸/返回接口.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": {
- "title": "瑟沃格湖,瓦加尔岛,法罗群岛",
- "headline": "海洋上方的湖泊",
- "description": "大自然自有其奇妙之处,瑟沃格湖(Sørvágsvatn)便是其中最精彩的之一。世界湖泊日是探索法罗群岛(丹麦王国的一个自治行政区)这片视错觉的绝佳时机。这座位于沃格岛上的湖泊也被称为莱蒂斯湖(Leitisvatn),看似漂浮在海平面之上。实际上,它的海拔不到100英尺。索尔瓦格斯湖是法罗群岛最大的湖泊,面积约1.3平方英里,为Bøsdalafossur瀑布Bøsdalafossur提供水源,瀑布的湖水在那里奔腾而下,最终倾泻而入大海。",
- "main_text": "该湖位于瓦加尔岛南部,通过Bøsdalafossur瀑布与大西洋相连,形成了壮丽的“悬湖”景观。",
- "cover": "https://bing.com/th?id=OHR.FaroeLake_ZH-CN3977660997_1920x1080.jpg",
- "cover_4k": "https://bing.com/th?id=OHR.FaroeLake_ZH-CN3977660997_UHD.jpg",
- "copyright": "© Anton Petrus/Getty Images",
- "update_date": "2025-08-27 13:24:37",
- "update_date_at": 1756301077809
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/css/style.css b/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/css/style.css
deleted file mode 100644
index 9bd66ac6..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/css/style.css
+++ /dev/null
@@ -1,327 +0,0 @@
-/* 每天60s读懂世界 - 清新风格样式 */
-
-/* 重置样式 */
-* {
- 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;
-}
-
-.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;
-}
-
-.header p {
- color: #5a7c65;
- font-size: 1.1rem;
-}
-
-/* 控制面板 */
-.controls {
- background: rgba(255, 255, 255, 0.85);
- border-radius: 15px;
- padding: 20px;
- margin-bottom: 30px;
- box-shadow: 0 5px 20px rgba(45, 80, 22, 0.08);
- backdrop-filter: blur(10px);
-}
-
-.date-selector {
- display: flex;
- align-items: center;
- gap: 15px;
- margin-bottom: 20px;
- flex-wrap: wrap;
-}
-
-.date-selector label {
- font-weight: 600;
- color: #4a5568;
-}
-
-.date-selector input {
- padding: 10px 15px;
- border: 2px solid #e2e8f0;
- border-radius: 10px;
- font-size: 1rem;
- transition: all 0.3s ease;
-}
-
-.date-selector input:focus {
- outline: none;
- border-color: #81c784;
- box-shadow: 0 0 0 3px rgba(129, 199, 132, 0.1);
-}
-
-.btn {
- background: linear-gradient(135deg, #81c784 0%, #66bb6a 100%);
- color: white;
- border: none;
- padding: 12px 25px;
- border-radius: 10px;
- font-size: 1rem;
- font-weight: 600;
- cursor: pointer;
- transition: all 0.3s ease;
- box-shadow: 0 4px 15px rgba(129, 199, 132, 0.3);
-}
-
-.btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(129, 199, 132, 0.4);
-}
-
-.btn:active {
- transform: translateY(0);
-}
-
-/* 加载状态 */
-.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); }
-}
-
-/* 内容区域 */
-.content {
- 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);
-}
-
-.news-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 25px;
- flex-wrap: wrap;
- gap: 15px;
-}
-
-.news-date {
- font-size: 1.5rem;
- font-weight: 700;
- color: #2d5016;
-}
-
-.lunar-date {
- color: #5a7c65;
- font-size: 1rem;
-}
-
-/* 新闻图片 */
-.news-image {
- width: 100%;
- max-width: 600px;
- height: auto;
- border-radius: 15px;
- margin: 20px auto;
- display: block;
- box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
-}
-
-/* 新闻列表 */
-.news-list {
- margin: 25px 0;
-}
-
-.news-item {
- background: #f1f8e9;
- border-left: 4px solid #81c784;
- padding: 15px 20px;
- margin-bottom: 15px;
- border-radius: 0 10px 10px 0;
- transition: all 0.3s ease;
- position: relative;
-}
-
-.news-item:hover {
- background: #e8f5e8;
- transform: translateX(5px);
- box-shadow: 0 4px 15px rgba(45, 80, 22, 0.1);
-}
-
-.news-item::before {
- content: counter(news-counter);
- counter-increment: news-counter;
- position: absolute;
- left: -15px;
- top: 50%;
- transform: translateY(-50%);
- background: #81c784;
- color: white;
- width: 25px;
- height: 25px;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 0.8rem;
- font-weight: bold;
-}
-
-.news-list {
- counter-reset: news-counter;
-}
-
-/* 每日一句 */
-.daily-tip {
- background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);
- padding: 20px;
- border-radius: 15px;
- margin: 25px 0;
- text-align: center;
- font-style: italic;
- font-size: 1.1rem;
- color: #744210;
- box-shadow: 0 5px 20px rgba(252, 182, 159, 0.3);
-}
-
-/* 错误提示 */
-.error {
- background: #fed7d7;
- color: #c53030;
- padding: 20px;
- border-radius: 10px;
- text-align: center;
- border: 1px solid #feb2b2;
-}
-
-/* 响应式设计 */
-
-/* 平板端 */
-@media (max-width: 768px) {
- .container {
- padding: 15px;
- }
-
- .header h1 {
- font-size: 2rem;
- }
-
- .header {
- padding: 20px;
- }
-
- .content {
- padding: 20px;
- }
-
- .date-selector {
- flex-direction: column;
- align-items: stretch;
- }
-
- .news-header {
- flex-direction: column;
- align-items: flex-start;
- }
-}
-
-/* 手机端 */
-@media (max-width: 480px) {
- .container {
- padding: 10px;
- }
-
- .header {
- padding: 15px;
- margin-bottom: 20px;
- }
-
- .header h1 {
- font-size: 1.8rem;
- }
-
- .controls {
- padding: 15px;
- }
-
- .content {
- padding: 15px;
- }
-
- .news-item {
- padding: 12px 15px;
- margin-left: 10px;
- }
-
- .news-item::before {
- left: -10px;
- width: 20px;
- height: 20px;
- font-size: 0.7rem;
- }
-
- .daily-tip {
- padding: 15px;
- font-size: 1rem;
- }
-
- .btn {
- width: 100%;
- padding: 15px;
- }
-}
-
-/* 大屏幕优化 */
-@media (min-width: 1200px) {
- .container {
- padding: 40px;
- }
-
- .header {
- padding: 40px;
- }
-
- .content {
- padding: 40px;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/index.html b/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/index.html
deleted file mode 100644
index 3240ff17..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/index.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
每天60秒读懂世界 | 最新资讯
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/js/script.js b/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/js/script.js
deleted file mode 100644
index 63c2d19f..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/js/script.js
+++ /dev/null
@@ -1,305 +0,0 @@
-// 每天60s读懂世界 - 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/60s`);
- } catch (e) {
- // 如果无法加载接口集合,使用默认接口
- this.endpoints = ['https://60s.viki.moe/v2/60s'];
- }
- },
- // 获取当前接口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;
- }
-};
-
-class NewsApp {
- constructor() {
- this.apiUrl = 'https://60s.viki.moe/v2/60s';
- this.init();
- }
-
- init() {
- this.bindEvents();
- this.loadTodayNews();
- }
-
- bindEvents() {
- // 移除了刷新按钮,不需要绑定事件
- }
-
- formatDate(date) {
- const year = date.getFullYear();
- const month = String(date.getMonth() + 1).padStart(2, '0');
- const day = String(date.getDate()).padStart(2, '0');
- return `${year}-${month}-${day}`;
- }
-
- showLoading() {
- const contentDiv = document.getElementById('content');
- if (contentDiv) {
- contentDiv.innerHTML = `
-
- `;
- }
- }
-
- showError(message) {
- const contentDiv = document.getElementById('content');
- if (contentDiv) {
- contentDiv.innerHTML = `
-
- `;
- }
- }
-
- async loadNews() {
- try {
- this.showLoading();
-
- // 尝试从API获取数据
- let data = await this.fetchFromAPI();
-
- // 如果API失败,尝试本地数据
- if (!data) {
- data = await this.fetchFromLocal();
- }
-
- if (!data) {
- throw new Error('无法获取数据,请检查网络连接或稍后重试');
- }
-
- if (data.code !== 200) {
- throw new Error(data.message || '获取数据失败');
- }
-
- this.renderNews(data.data);
-
- } catch (error) {
- console.error('获取新闻失败:', error);
- this.showError(error.message || '网络连接失败,请检查网络后重试');
- }
- }
-
- async 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'
- });
-
- 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 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;
- }
- }
-
- loadTodayNews() {
- this.loadNews();
- }
-
- renderNews(newsData) {
- const contentDiv = document.getElementById('content');
- if (!contentDiv || !newsData) return;
-
- const {
- date,
- day_of_week,
- lunar_date,
- news,
- tip,
- link
- } = newsData;
-
- let newsListHtml = '';
- if (news && news.length > 0) {
- newsListHtml = news.map(item => `
-
- ${this.escapeHtml(item)}
-
- `).join('');
- }
-
- // 移除图片显示功能
-
- const tipHtml = tip ? `
-
- 💡 ${this.escapeHtml(tip)}
-
- ` : '';
-
- const linkHtml = link ? `
-
- ` : '';
-
- contentDiv.innerHTML = `
-
-
- ${tipHtml}
-
-
-
📰 今日要闻
- ${newsListHtml}
-
-
- ${linkHtml}
-
-
-
数据来源:每天60秒读懂世界
-
更新时间:${newsData.api_updated || '未知'}
-
- `;
- }
-
- escapeHtml(text) {
- if (typeof text !== 'string') return text;
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
- }
-}
-
-// 页面加载完成后初始化应用
-document.addEventListener('DOMContentLoaded', function() {
- window.newsApp = new NewsApp();
-});
-
-// 添加一些实用功能
-function copyToClipboard(text) {
- navigator.clipboard.writeText(text).then(() => {
- showToast('已复制到剪贴板');
- }).catch(() => {
- showToast('复制失败,请手动复制');
- });
-}
-
-function showToast(message) {
- // 创建提示框
- const toast = document.createElement('div');
- toast.style.cssText = `
- position: fixed;
- top: 20px;
- right: 20px;
- background: #4a5568;
- color: white;
- padding: 12px 20px;
- border-radius: 8px;
- z-index: 1000;
- font-size: 14px;
- box-shadow: 0 4px 12px rgba(0,0,0,0.3);
- animation: slideIn 0.3s ease;
- `;
- toast.textContent = message;
-
- // 添加动画样式
- const style = document.createElement('style');
- style.textContent = `
- @keyframes slideIn {
- from { transform: translateX(100%); opacity: 0; }
- to { transform: translateX(0); opacity: 1; }
- }
- `;
- document.head.appendChild(style);
-
- document.body.appendChild(toast);
-
- // 3秒后自动移除
- setTimeout(() => {
- toast.remove();
- style.remove();
- }, 3000);
-}
-
-// 添加键盘快捷键支持
-document.addEventListener('keydown', function(e) {
- // Ctrl/Cmd + R 刷新数据
- if ((e.ctrlKey || e.metaKey) && e.key === 'r') {
- e.preventDefault();
- if (window.newsApp) {
- window.newsApp.loadNews();
- }
- }
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/接口集合.json b/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/返回接口.json b/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/返回接口.json
deleted file mode 100644
index 7804d62a..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每天60s读懂世界/返回接口.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": [
- {
- "id": "9aa227e2ba294bb1a95c95fde892eb31",
- "title": "《Totally Reliable Delivery Service》 Standard Edition",
- "cover": "https://cdn1.epicgames.com/52b90f9a982a404781b189f6a7903226/offer/EGS_TotallyReliableDeliveryService_WereFiveGames_S1-2560x1440-47e6e9562d62705a75ea7b7096d0b8dc.jpg",
- "original_price": 52,
- "original_price_desc": "¥52.00",
- "description": "穿好护腰护具,发动货车,送货的时间到啦!在一个高度互动的沙盒世界中,与最多三位好友一起随意地完成送货。货物已试投,这就是我们靠谱快递(Totally Reliable Delivery Service)的品质保证!",
- "seller": "Infogrames LLC",
- "is_free_now": true,
- "free_start": "2025/08/14 23:00:00",
- "free_start_at": 1755183600000,
- "free_end": "2025/08/21 23:00:00",
- "free_end_at": 1755788400000,
- "link": "https://store.epicgames.com/store/zh-CN/p/totally-reliable-delivery-service/home"
- },
- {
- "id": "8ea3500dc38e4f429702bf889c172d3d",
- "title": "Hidden Folks",
- "cover": "https://cdn1.epicgames.com/spt-assets/7bfd56b0586348dcb139945d9e59f988/hidden-folks-1b7hh.png",
- "original_price": 47,
- "original_price_desc": "¥47.00",
- "description": "Search for hidden folks in hand-drawn, interactive, miniature landscapes. Unfurl tent flaps, cut through bushes, slam doors, and poke some crocodiles! Rooooaaaarrrr!!!!!",
- "seller": "Adriaan de Jongh",
- "is_free_now": true,
- "free_start": "2025/08/14 23:00:00",
- "free_start_at": 1755183600000,
- "free_end": "2025/08/21 23:00:00",
- "free_end_at": 1755788400000,
- "link": "https://store.epicgames.com/store/zh-CN/p/hidden-folks-239d16"
- },
- {
- "id": "4cbb6c3704d240f19c3dd5f5cb2b0cb4",
- "title": "Kamaeru",
- "cover": "https://cdn1.epicgames.com/spt-assets/44313cfbb62b4df5801d0c8d541c2624/kamaeru-40asc.png",
- "original_price": 62,
- "original_price_desc": "¥62.00",
- "description": "Foster a sanctuary for frogs and restore the biodiversity of the wetlands in Kamaeru, a cozy frog collecting game, where you take pictures of frogs, play mini-games and decorate your habitat. Hop right to it!",
- "seller": "Armor Games Studios",
- "is_free_now": false,
- "free_start": "2025/08/21 23:00:00",
- "free_start_at": 1755788400000,
- "free_end": "2025/08/28 23:00:00",
- "free_end_at": 1756393200000,
- "link": "https://store.epicgames.com/store/zh-CN/p/kamaeru-0c301e"
- },
- {
- "id": "0d9a533f0e684cc18620a8f408e8e72c",
- "title": "Strange Horticulture",
- "cover": "https://cdn1.epicgames.com/spt-assets/15e8e3eba65a4763a815d6eae1d763b2/strange-horticulture-offer-2wghv.png",
- "original_price": 45,
- "original_price_desc": "¥45.00",
- "description": "款神秘学解谜游戏,你将扮演当地植物商店的店主,寻找并识别新的植物,悠闲撸猫,与女巫团体交谈,或加入异教。收集各种强大的植物,用它们来影响故事走向,揭开昂德米尔镇的黑暗谜团。",
- "seller": "Iceberg Interactive",
- "is_free_now": false,
- "free_start": "2025/08/21 23:00:00",
- "free_start_at": 1755788400000,
- "free_end": "2025/08/28 23:00:00",
- "free_end_at": 1756393200000,
- "link": "https://store.epicgames.com/store/zh-CN/p/strange-horticulture-360e80"
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/css/style.css b/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/css/style.css
deleted file mode 100644
index 5bb68371..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/css/style.css
+++ /dev/null
@@ -1,409 +0,0 @@
-/* 每日国际汇率 - 淡绿色清新风格样式 */
-
-/* 重置样式 */
-* {
- 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;
-}
-
-/* 货币选择器 */
-.currency-selector {
- 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);
- text-align: center;
-}
-
-.currency-selector label {
- display: block;
- margin-bottom: 10px;
- font-weight: 600;
- color: #2d5016;
-}
-
-.currency-selector select {
- padding: 12px 20px;
- border: 2px solid #c8e6c9;
- border-radius: 25px;
- background: white;
- color: #2d5016;
- font-size: 1rem;
- min-width: 200px;
- cursor: pointer;
- transition: all 0.3s ease;
-}
-
-.currency-selector select:focus {
- outline: none;
- border-color: #81c784;
- box-shadow: 0 0 0 3px rgba(129, 199, 132, 0.2);
-}
-
-/* 加载状态 */
-.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); }
-}
-
-/* 汇率信息容器 */
-.exchange-info {
- background: rgba(255, 255, 255, 0.85);
- border-radius: 20px;
- padding: 25px;
- margin-bottom: 20px;
- box-shadow: 0 8px 25px rgba(45, 80, 22, 0.08);
- backdrop-filter: blur(10px);
-}
-
-.base-currency {
- text-align: center;
- margin-bottom: 20px;
-}
-
-.base-currency h2 {
- font-size: 1.8rem;
- color: #2d5016;
- margin-bottom: 10px;
-}
-
-.update-time {
- color: #5a7c65;
- font-size: 0.9rem;
-}
-
-/* 汇率网格 */
-.rates-grid {
- display: grid;
- grid-template-columns: repeat(8, 1fr);
- gap: 10px;
- margin-top: 20px;
-}
-
-.rate-card {
- background: rgba(255, 255, 255, 0.9);
- border-radius: 10px;
- padding: 12px;
- box-shadow: 0 3px 10px rgba(45, 80, 22, 0.06);
- transition: all 0.3s ease;
- border: 1px solid rgba(200, 230, 201, 0.5);
- text-align: center;
-}
-
-.rate-card:hover {
- transform: translateY(-1px);
- box-shadow: 0 4px 15px rgba(45, 80, 22, 0.1);
- border-color: #81c784;
-}
-
-.currency-code {
- font-size: 1rem;
- font-weight: 700;
- color: #2d5016;
- margin-bottom: 6px;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 6px;
-}
-
-.currency-flag {
- font-size: 1.2rem;
-}
-
-.exchange-rate {
- font-size: 1.1rem;
- font-weight: 600;
- color: #388e3c;
- margin-bottom: 4px;
-}
-
-.currency-name {
- color: #5a7c65;
- font-size: 0.8rem;
- line-height: 1.2;
-}
-
-/* 搜索框 */
-.search-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);
-}
-
-.search-input {
- width: 100%;
- padding: 12px 20px;
- border: 2px solid #c8e6c9;
- border-radius: 25px;
- background: white;
- color: #2d5016;
- font-size: 1rem;
- transition: all 0.3s ease;
-}
-
-.search-input:focus {
- outline: none;
- border-color: #81c784;
- box-shadow: 0 0 0 3px rgba(129, 199, 132, 0.2);
-}
-
-.search-input::placeholder {
- color: #81c784;
-}
-
-/* 错误提示 */
-.error {
- background: #fed7d7;
- color: #c53030;
- padding: 20px;
- border-radius: 15px;
- text-align: center;
- border: 1px solid #feb2b2;
- margin: 20px 0;
-}
-
-/* 统计信息 */
-.stats {
- 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);
- text-align: center;
-}
-
-.stats-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
- gap: 20px;
- margin-top: 15px;
-}
-
-.stat-item {
- padding: 15px;
- background: rgba(129, 199, 132, 0.1);
- border-radius: 10px;
-}
-
-.stat-number {
- font-size: 1.5rem;
- font-weight: 700;
- color: #2d5016;
-}
-
-.stat-label {
- color: #5a7c65;
- font-size: 0.9rem;
- margin-top: 5px;
-}
-
-/* 响应式设计 */
-
-/* 平板端 */
-@media (max-width: 768px) and (min-width: 481px) {
- .container {
- padding: 15px;
- }
-
- .header h1 {
- font-size: 2rem;
- flex-direction: column;
- gap: 10px;
- }
-
- .header {
- padding: 20px;
- }
-
- .rates-grid {
- grid-template-columns: repeat(6, 1fr);
- gap: 8px;
- }
-
- .rate-card {
- padding: 10px;
- }
-
- .currency-selector select {
- min-width: 180px;
- }
-}
-
-/* 手机端 */
-@media (max-width: 480px) {
- .container {
- padding: 10px;
- }
-
- .header {
- padding: 15px;
- margin-bottom: 20px;
- }
-
- .header h1 {
- font-size: 1.8rem;
- }
-
- .rates-grid {
- grid-template-columns: repeat(4, 1fr);
- gap: 6px;
- }
-
- .rate-card {
- padding: 8px;
- border-radius: 8px;
- }
-
- .currency-code {
- font-size: 0.85rem;
- margin-bottom: 4px;
- gap: 4px;
- }
-
- .currency-flag {
- font-size: 1rem;
- }
-
- .exchange-rate {
- font-size: 0.9rem;
- margin-bottom: 3px;
- }
-
- .currency-name {
- font-size: 0.7rem;
- line-height: 1.1;
- }
-
- .currency-selector {
- padding: 15px;
- }
-
- .currency-selector select {
- min-width: 100%;
- padding: 10px 15px;
- }
-
- .search-input {
- padding: 10px 15px;
- }
-
- .stats-grid {
- grid-template-columns: repeat(2, 1fr);
- gap: 10px;
- }
-}
-
-/* 大屏幕优化 */
-@media (min-width: 1200px) {
- .container {
- padding: 40px;
- }
-
- .header {
- padding: 40px;
- }
-}
-
-/* 特殊效果 */
-.fade-in {
- animation: fadeIn 0.6s ease-in;
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(20px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/* 滚动条样式 */
-::-webkit-scrollbar {
- width: 8px;
-}
-
-::-webkit-scrollbar-track {
- background: rgba(255, 255, 255, 0.1);
-}
-
-::-webkit-scrollbar-thumb {
- background: rgba(129, 199, 132, 0.5);
- border-radius: 4px;
-}
-
-::-webkit-scrollbar-thumb:hover {
- background: rgba(129, 199, 132, 0.7);
-}
-
-/* 隐藏类 */
-.hidden {
- display: none;
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/index.html b/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/index.html
deleted file mode 100644
index 644740d2..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
-
每日国际汇率
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/js/script.js b/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/js/script.js
deleted file mode 100644
index d7d217b3..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/js/script.js
+++ /dev/null
@@ -1,520 +0,0 @@
-// 每日国际汇率 JavaScript 功能
-
-// API配置
-const API = {
- endpoints: [],
- currentIndex: 0,
- defaultCurrency: 'CNY',
- localFallback: '返回接口.json',
- // 初始化API接口列表
- async init() {
- try {
- const res = await fetch('./接口集合.json');
- const endpoints = await res.json();
- this.endpoints = endpoints.map(endpoint => `${endpoint}/v2/exchange_rate`);
- } catch (e) {
- // 如果无法加载接口集合,使用默认接口
- this.endpoints = ['https://60s.viki.moe/v2/exchange_rate'];
- }
- },
- // 获取当前接口URL
- getCurrentUrl(currency) {
- if (this.endpoints.length === 0) return null;
- const url = new URL(this.endpoints[this.currentIndex]);
- url.searchParams.append('currency', currency);
- return url.toString();
- },
- // 切换到下一个接口
- switchToNext() {
- this.currentIndex = (this.currentIndex + 1) % this.endpoints.length;
- return this.currentIndex < this.endpoints.length;
- },
- // 重置到第一个接口
- reset() {
- this.currentIndex = 0;
- }
-};
-
-// 常用货币列表
-const POPULAR_CURRENCIES = [
- { code: 'CNY', name: '人民币', flag: '🇨🇳' },
- { code: 'USD', name: '美元', flag: '🇺🇸' },
- { code: 'EUR', name: '欧元', flag: '🇪🇺' },
- { code: 'JPY', name: '日元', flag: '🇯🇵' },
- { code: 'GBP', name: '英镑', flag: '🇬🇧' },
- { code: 'AUD', name: '澳元', flag: '🇦🇺' },
- { code: 'CAD', name: '加元', flag: '🇨🇦' },
- { code: 'CHF', name: '瑞士法郎', flag: '🇨🇭' },
- { code: 'HKD', name: '港币', flag: '🇭🇰' },
- { code: 'SGD', name: '新加坡元', flag: '🇸🇬' },
- { code: 'KRW', name: '韩元', flag: '🇰🇷' },
- { code: 'THB', name: '泰铢', flag: '🇹🇭' }
-];
-
-// 货币优先级排序 - 经济发达、交易频繁的国家货币优先
-const CURRENCY_PRIORITY = {
- // 第一梯队:全球主要储备货币和交易货币
- 'USD': 1, // 美元 - 全球储备货币
- 'EUR': 2, // 欧元 - 欧盟统一货币
- 'JPY': 3, // 日元 - 亚洲主要货币
- 'GBP': 4, // 英镑 - 传统储备货币
- 'CNY': 5, // 人民币 - 中国货币
-
- // 第二梯队:发达国家货币
- 'CHF': 10, // 瑞士法郎 - 避险货币
- 'CAD': 11, // 加拿大元
- 'AUD': 12, // 澳大利亚元
- 'NZD': 13, // 新西兰元
- 'SEK': 14, // 瑞典克朗
- 'NOK': 15, // 挪威克朗
- 'DKK': 16, // 丹麦克朗
-
- // 第三梯队:亚洲发达经济体
- 'HKD': 20, // 港币
- 'SGD': 21, // 新加坡元
- 'KRW': 22, // 韩元
- 'TWD': 23, // 新台币
-
- // 第四梯队:重要新兴市场货币
- 'RUB': 30, // 俄罗斯卢布
- 'INR': 31, // 印度卢比
- 'BRL': 32, // 巴西雷亚尔
- 'MXN': 33, // 墨西哥比索
- 'ZAR': 34, // 南非兰特
- 'TRY': 35, // 土耳其里拉
-
- // 第五梯队:亚洲重要货币
- 'THB': 40, // 泰铢
- 'MYR': 41, // 马来西亚林吉特
- 'IDR': 42, // 印尼盾
- 'PHP': 43, // 菲律宾比索
- 'VND': 44, // 越南盾
-
- // 第六梯队:中东石油国家货币
- 'SAR': 50, // 沙特里亚尔
- 'AED': 51, // 阿联酋迪拉姆
- 'QAR': 52, // 卡塔尔里亚尔
- 'KWD': 53, // 科威特第纳尔
-
- // 第七梯队:欧洲其他货币
- 'PLN': 60, // 波兰兹罗提
- 'CZK': 61, // 捷克克朗
- 'HUF': 62, // 匈牙利福林
- 'RON': 63, // 罗马尼亚列伊
- 'BGN': 64, // 保加利亚列弗
- 'HRK': 65, // 克罗地亚库纳
-
- // 第八梯队:拉美货币
- 'ARS': 70, // 阿根廷比索
- 'CLP': 71, // 智利比索
- 'COP': 72, // 哥伦比亚比索
- 'PEN': 73, // 秘鲁索尔
- 'UYU': 74, // 乌拉圭比索
-
- // 其他货币默认优先级为 999
-};
-
-// 货币名称映射
-const CURRENCY_NAMES = {
- 'CNY': '人民币', 'USD': '美元', 'EUR': '欧元', 'JPY': '日元', 'GBP': '英镑',
- 'AUD': '澳元', 'CAD': '加元', 'CHF': '瑞士法郎', 'HKD': '港币', 'SGD': '新加坡元',
- 'KRW': '韩元', 'THB': '泰铢', 'AED': '阿联酋迪拉姆', 'AFN': '阿富汗尼',
- 'ALL': '阿尔巴尼亚列克', 'AMD': '亚美尼亚德拉姆', 'ANG': '荷属安的列斯盾',
- 'AOA': '安哥拉宽扎', 'ARS': '阿根廷比索', 'AWG': '阿鲁巴弗罗林',
- 'AZN': '阿塞拜疆马纳特', 'BAM': '波黑马克', 'BBD': '巴巴多斯元',
- 'BDT': '孟加拉塔卡', 'BGN': '保加利亚列弗', 'BHD': '巴林第纳尔',
- 'BIF': '布隆迪法郎', 'BMD': '百慕大元', 'BND': '文莱元', 'BOB': '玻利维亚诺',
- 'BRL': '巴西雷亚尔', 'BSD': '巴哈马元', 'BTN': '不丹努尔特鲁姆',
- 'BWP': '博茨瓦纳普拉', 'BYN': '白俄罗斯卢布', 'BZD': '伯利兹元',
- 'CDF': '刚果法郎', 'CLP': '智利比索', 'COP': '哥伦比亚比索', 'CRC': '哥斯达黎加科朗',
- 'CUP': '古巴比索', 'CVE': '佛得角埃斯库多', 'CZK': '捷克克朗', 'DJF': '吉布提法郎',
- 'DKK': '丹麦克朗', 'DOP': '多米尼加比索', 'DZD': '阿尔及利亚第纳尔', 'EGP': '埃及镑',
- 'ERN': '厄立特里亚纳克法', 'ETB': '埃塞俄比亚比尔', 'FJD': '斐济元', 'FKP': '福克兰群岛镑',
- 'FOK': '法罗群岛克朗', 'GEL': '格鲁吉亚拉里', 'GGP': '根西岛镑', 'GHS': '加纳塞地',
- 'GIP': '直布罗陀镑', 'GMD': '冈比亚达拉西', 'GNF': '几内亚法郎', 'GTQ': '危地马拉格查尔',
- 'GYD': '圭亚那元', 'HNL': '洪都拉斯伦皮拉', 'HRK': '克罗地亚库纳', 'HTG': '海地古德',
- 'HUF': '匈牙利福林', 'IDR': '印尼盾', 'ILS': '以色列新谢克尔', 'IMP': '马恩岛镑',
- 'INR': '印度卢比', 'IQD': '伊拉克第纳尔', 'IRR': '伊朗里亚尔', 'ISK': '冰岛克朗',
- 'JEP': '泽西岛镑', 'JMD': '牙买加元', 'JOD': '约旦第纳尔', 'KES': '肯尼亚先令',
- 'KGS': '吉尔吉斯斯坦索姆', 'KHR': '柬埔寨瑞尔', 'KID': '基里巴斯元', 'KMF': '科摩罗法郎',
- 'KWD': '科威特第纳尔', 'KYD': '开曼群岛元', 'KZT': '哈萨克斯坦坚戈', 'LAK': '老挝基普',
- 'LBP': '黎巴嫩镑', 'LKR': '斯里兰卡卢比', 'LRD': '利比里亚元', 'LSL': '莱索托洛蒂',
- 'LYD': '利比亚第纳尔', 'MAD': '摩洛哥迪拉姆', 'MDL': '摩尔多瓦列伊', 'MGA': '马达加斯加阿里亚里',
- 'MKD': '北马其顿第纳尔', 'MMK': '缅甸缅元', 'MNT': '蒙古图格里克', 'MOP': '澳门帕塔卡',
- 'MRU': '毛里塔尼亚乌吉亚', 'MUR': '毛里求斯卢比', 'MVR': '马尔代夫拉菲亚', 'MWK': '马拉维克瓦查',
- 'MXN': '墨西哥比索', 'MYR': '马来西亚林吉特', 'MZN': '莫桑比克梅蒂卡尔', 'NAD': '纳米比亚元',
- 'NGN': '尼日利亚奈拉', 'NIO': '尼加拉瓜科多巴', 'NOK': '挪威克朗', 'NPR': '尼泊尔卢比',
- 'NZD': '新西兰元', 'OMR': '阿曼里亚尔', 'PAB': '巴拿马巴波亚', 'PEN': '秘鲁索尔',
- 'PGK': '巴布亚新几内亚基那', 'PHP': '菲律宾比索', 'PKR': '巴基斯坦卢比', 'PLN': '波兰兹罗提',
- 'PYG': '巴拉圭瓜拉尼', 'QAR': '卡塔尔里亚尔', 'RON': '罗马尼亚列伊', 'RSD': '塞尔维亚第纳尔',
- 'RUB': '俄罗斯卢布', 'RWF': '卢旺达法郎', 'SAR': '沙特里亚尔', 'SBD': '所罗门群岛元',
- 'SCR': '塞舌尔卢比', 'SDG': '苏丹镑', 'SEK': '瑞典克朗', 'SHP': '圣赫勒拿镑',
- 'SLE': '塞拉利昂利昂', 'SLL': '塞拉利昂利昂(旧)', 'SOS': '索马里先令', 'SRD': '苏里南元',
- 'SSP': '南苏丹镑', 'STN': '圣多美和普林西比多布拉', 'SYP': '叙利亚镑', 'SZL': '斯威士兰里兰吉尼',
- 'TJS': '塔吉克斯坦索莫尼', 'TMT': '土库曼斯坦马纳特', 'TND': '突尼斯第纳尔', 'TOP': '汤加潘加',
- 'TRY': '土耳其里拉', 'TTD': '特立尼达和多巴哥元', 'TVD': '图瓦卢元', 'TWD': '新台币',
- 'TZS': '坦桑尼亚先令', 'UAH': '乌克兰格里夫纳', 'UGX': '乌干达先令', 'UYU': '乌拉圭比索',
- 'UZS': '乌兹别克斯坦苏姆', 'VES': '委内瑞拉玻利瓦尔', 'VND': '越南盾', 'VUV': '瓦努阿图瓦图',
- 'WST': '萨摩亚塔拉', 'XAF': '中非法郎', 'XCD': '东加勒比元', 'XCG': '加勒比盾',
- 'XDR': '特别提款权', 'XOF': '西非法郎', 'XPF': '太平洋法郎', 'YER': '也门里亚尔',
- 'ZAR': '南非兰特', 'ZMW': '赞比亚克瓦查', 'ZWL': '津巴布韦元'
-};
-
-// 货币旗帜映射
-const CURRENCY_FLAGS = {
- 'CNY': '🇨🇳', 'USD': '🇺🇸', 'EUR': '🇪🇺', 'JPY': '🇯🇵', 'GBP': '🇬🇧',
- 'AUD': '🇦🇺', 'CAD': '🇨🇦', 'CHF': '🇨🇭', 'HKD': '🇭🇰', 'SGD': '🇸🇬',
- 'KRW': '🇰🇷', 'THB': '🇹🇭', 'AED': '🇦🇪', 'AFN': '🇦🇫', 'ALL': '🇦🇱',
- 'AMD': '🇦🇲', 'ANG': '🇳🇱', 'AOA': '🇦🇴', 'ARS': '🇦🇷', 'AWG': '🇦🇼',
- 'AZN': '🇦🇿', 'BAM': '🇧🇦', 'BBD': '🇧🇧', 'BDT': '🇧🇩', 'BGN': '🇧🇬',
- 'BHD': '🇧🇭', 'BIF': '🇧🇮', 'BMD': '🇧🇲', 'BND': '🇧🇳', 'BOB': '🇧🇴',
- 'BRL': '🇧🇷', 'BSD': '🇧🇸', 'BTN': '🇧🇹', 'BWP': '🇧🇼', 'BYN': '🇧🇾',
- 'BZD': '🇧🇿', 'CDF': '🇨🇩', 'CLP': '🇨🇱', 'COP': '🇨🇴', 'CRC': '🇨🇷',
- 'CUP': '🇨🇺', 'CVE': '🇨🇻', 'CZK': '🇨🇿', 'DJF': '🇩🇯', 'DKK': '🇩🇰',
- 'DOP': '🇩🇴', 'DZD': '🇩🇿', 'EGP': '🇪🇬', 'ERN': '🇪🇷', 'ETB': '🇪🇹',
- 'FJD': '🇫🇯', 'FKP': '🇫🇰', 'FOK': '🇫🇴', 'GEL': '🇬🇪', 'GGP': '🇬🇬',
- 'GHS': '🇬🇭', 'GIP': '🇬🇮', 'GMD': '🇬🇲', 'GNF': '🇬🇳', 'GTQ': '🇬🇹',
- 'GYD': '🇬🇾', 'HNL': '🇭🇳', 'HRK': '🇭🇷', 'HTG': '🇭🇹', 'HUF': '🇭🇺',
- 'IDR': '🇮🇩', 'ILS': '🇮🇱', 'IMP': '🇮🇲', 'INR': '🇮🇳', 'IQD': '🇮🇶',
- 'IRR': '🇮🇷', 'ISK': '🇮🇸', 'JEP': '🇯🇪', 'JMD': '🇯🇲', 'JOD': '🇯🇴',
- 'KES': '🇰🇪', 'KGS': '🇰🇬', 'KHR': '🇰🇭', 'KID': '🇰🇮', 'KMF': '🇰🇲',
- 'KWD': '🇰🇼', 'KYD': '🇰🇾', 'KZT': '🇰🇿', 'LAK': '🇱🇦', 'LBP': '🇱🇧',
- 'LKR': '🇱🇰', 'LRD': '🇱🇷', 'LSL': '🇱🇸', 'LYD': '🇱🇾', 'MAD': '🇲🇦',
- 'MDL': '🇲🇩', 'MGA': '🇲🇬', 'MKD': '🇲🇰', 'MMK': '🇲🇲', 'MNT': '🇲🇳',
- 'MOP': '🇲🇴', 'MRU': '🇲🇷', 'MUR': '🇲🇺', 'MVR': '🇲🇻', 'MWK': '🇲🇼',
- 'MXN': '🇲🇽', 'MYR': '🇲🇾', 'MZN': '🇲🇿', 'NAD': '🇳🇦', 'NGN': '🇳🇬',
- 'NIO': '🇳🇮', 'NOK': '🇳🇴', 'NPR': '🇳🇵', 'NZD': '🇳🇿', 'OMR': '🇴🇲',
- 'PAB': '🇵🇦', 'PEN': '🇵🇪', 'PGK': '🇵🇬', 'PHP': '🇵🇭', 'PKR': '🇵🇰',
- 'PLN': '🇵🇱', 'PYG': '🇵🇾', 'QAR': '🇶🇦', 'RON': '🇷🇴', 'RSD': '🇷🇸',
- 'RUB': '🇷🇺', 'RWF': '🇷🇼', 'SAR': '🇸🇦', 'SBD': '🇸🇧', 'SCR': '🇸🇨',
- 'SDG': '🇸🇩', 'SEK': '🇸🇪', 'SHP': '🇸🇭', 'SLE': '🇸🇱', 'SLL': '🇸🇱',
- 'SOS': '🇸🇴', 'SRD': '🇸🇷', 'SSP': '🇸🇸', 'STN': '🇸🇹', 'SYP': '🇸🇾',
- 'SZL': '🇸🇿', 'TJS': '🇹🇯', 'TMT': '🇹🇲', 'TND': '🇹🇳', 'TOP': '🇹🇴',
- 'TRY': '🇹🇷', 'TTD': '🇹🇹', 'TVD': '🇹🇻', 'TWD': '🇹🇼', 'TZS': '🇹🇿',
- 'UAH': '🇺🇦', 'UGX': '🇺🇬', 'UYU': '🇺🇾', 'UZS': '🇺🇿', 'VES': '🇻🇪',
- 'VND': '🇻🇳', 'VUV': '🇻🇺', 'WST': '🇼🇸', 'XAF': '🌍', 'XCD': '🏝️',
- 'XCG': '🏝️', 'XDR': '🌐', 'XOF': '🌍', 'XPF': '🌊', 'YER': '🇾🇪',
- 'ZAR': '🇿🇦', 'ZMW': '🇿🇲', 'ZWL': '🇿🇼'
-};
-
-// DOM元素
-let elements = {};
-let currentRates = [];
-let filteredRates = [];
-
-// 初始化
-document.addEventListener('DOMContentLoaded', function() {
- initElements();
- initCurrencySelector();
- bindEvents();
- loadExchangeRates();
-});
-
-// 初始化DOM元素
-function initElements() {
- elements = {
- currencySelect: document.getElementById('currency-select'),
- searchInput: document.getElementById('search-input'),
- loading: document.getElementById('loading'),
- content: document.getElementById('exchange-content'),
- baseCurrency: document.getElementById('base-currency'),
- updateTime: document.getElementById('update-time'),
- ratesGrid: document.getElementById('rates-grid'),
- totalCurrencies: document.getElementById('total-currencies'),
- lastUpdate: document.getElementById('last-update')
- };
-}
-
-// 初始化货币选择器
-function initCurrencySelector() {
- if (!elements.currencySelect) return;
-
- // 添加常用货币选项
- POPULAR_CURRENCIES.forEach(currency => {
- const option = document.createElement('option');
- option.value = currency.code;
- option.textContent = `${currency.flag} ${currency.code} - ${currency.name}`;
- if (currency.code === API.defaultCurrency) {
- option.selected = true;
- }
- elements.currencySelect.appendChild(option);
- });
-}
-
-// 绑定事件
-function bindEvents() {
- // 货币选择变化
- if (elements.currencySelect) {
- elements.currencySelect.addEventListener('change', function() {
- loadExchangeRates(this.value);
- });
- }
-
- // 搜索功能
- if (elements.searchInput) {
- elements.searchInput.addEventListener('input', function() {
- filterRates(this.value);
- });
- }
-}
-
-// 加载汇率数据
-async function loadExchangeRates(currency = API.defaultCurrency) {
- try {
- showLoading(true);
-
- // 尝试从API获取数据
- const data = await fetchFromAPI(currency);
-
- if (data && data.code === 200 && data.data) {
- currentRates = data.data.rates || [];
- displayExchangeRates(data.data);
- } else {
- // 尝试从本地获取数据
- const localData = await fetchFromLocal();
- if (localData && localData.code === 200 && localData.data) {
- currentRates = localData.data.rates || [];
- displayExchangeRates(localData.data);
- showError('使用本地数据,可能不是最新汇率');
- } else {
- throw new Error('无法获取汇率数据');
- }
- }
-
- } catch (error) {
- console.error('加载汇率失败:', error);
- showError('加载汇率数据失败,请稍后重试');
- } finally {
- showLoading(false);
- }
-}
-
-// 从API获取数据
-async function fetchFromAPI(currency) {
- // 初始化API接口列表
- await API.init();
-
- // 重置API索引到第一个接口
- API.reset();
-
- // 尝试所有API接口
- for (let i = 0; i < API.endpoints.length; i++) {
- try {
- const url = API.getCurrentUrl(currency);
- console.log(`尝试接口 ${i + 1}/${API.endpoints.length}: ${url}`);
-
- const response = await fetch(url, {
- cache: 'no-store'
- });
-
- if (!response.ok) {
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- }
-
- const data = await response.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 response = await fetch(API.localFallback + `?t=${Date.now()}`);
- if (!response.ok) throw new Error(`本地文件HTTP ${response.status}`);
- const data = await response.json();
- return data;
- } catch (e) {
- console.error('读取本地返回接口.json失败:', e);
- return null;
- }
-}
-
-// 显示汇率数据
-function displayExchangeRates(data) {
- if (!data || !data.rates) {
- showError('没有获取到汇率数据');
- return;
- }
-
- // 更新基础货币信息
- if (elements.baseCurrency) {
- const baseCurrencyName = CURRENCY_NAMES[data.base_code] || data.base_code;
- const baseCurrencyFlag = CURRENCY_FLAGS[data.base_code] || '💱';
- elements.baseCurrency.textContent = `${baseCurrencyFlag} ${data.base_code} - ${baseCurrencyName}`;
- }
-
- // 更新时间信息
- if (elements.updateTime && data.updated) {
- elements.updateTime.textContent = `更新时间: ${data.updated}`;
- }
-
- // 更新统计信息
- updateStats(data);
-
- // 显示汇率列表
- filteredRates = data.rates;
- renderRates(filteredRates);
-
- // 显示内容区域
- if (elements.content) {
- elements.content.classList.add('fade-in');
- elements.content.style.display = 'block';
- }
-}
-
-// 更新统计信息
-function updateStats(data) {
- if (elements.totalCurrencies) {
- elements.totalCurrencies.textContent = data.rates ? data.rates.length : 0;
- }
-
- if (elements.lastUpdate && data.updated) {
- elements.lastUpdate.textContent = data.updated;
- }
-}
-
-// 渲染汇率列表
-function renderRates(rates) {
- if (!elements.ratesGrid || !rates) return;
-
- // 按优先级排序货币
- const sortedRates = [...rates].sort((a, b) => {
- const priorityA = CURRENCY_PRIORITY[a.currency] || 999;
- const priorityB = CURRENCY_PRIORITY[b.currency] || 999;
-
- // 优先级相同时按货币代码字母顺序排序
- if (priorityA === priorityB) {
- return a.currency.localeCompare(b.currency);
- }
-
- return priorityA - priorityB;
- });
-
- elements.ratesGrid.innerHTML = '';
-
- sortedRates.forEach(rate => {
- const rateCard = createRateCard(rate);
- elements.ratesGrid.appendChild(rateCard);
- });
-}
-
-// 创建汇率卡片
-function createRateCard(rate) {
- const card = document.createElement('div');
- card.className = 'rate-card';
-
- const currencyName = CURRENCY_NAMES[rate.currency] || rate.currency;
- const currencyFlag = CURRENCY_FLAGS[rate.currency] || '💱';
-
- card.innerHTML = `
-
- ${currencyFlag}
- ${rate.currency}
-
-
${formatRate(rate.rate)}
-
${currencyName}
- `;
-
- return card;
-}
-
-// 格式化汇率
-function formatRate(rate) {
- if (rate >= 1) {
- return rate.toFixed(4);
- } else if (rate >= 0.01) {
- return rate.toFixed(6);
- } else {
- return rate.toFixed(8);
- }
-}
-
-// 过滤汇率数据
-function filterRates(searchTerm) {
- if (!searchTerm.trim()) {
- renderRates(currentRates);
- return;
- }
-
- const filtered = currentRates.filter(rate => {
- const currencyName = CURRENCY_NAMES[rate.currency] || rate.currency;
- return rate.currency.toLowerCase().includes(searchTerm.toLowerCase()) ||
- currencyName.toLowerCase().includes(searchTerm.toLowerCase());
- });
-
- renderRates(filtered);
-}
-
-// 显示/隐藏加载状态
-function showLoading(show) {
- if (elements.loading) {
- elements.loading.style.display = show ? 'block' : 'none';
- }
- if (elements.content) {
- elements.content.style.display = show ? 'none' : 'block';
- }
-}
-
-// 显示错误信息
-function showError(message) {
- if (elements.content) {
- elements.content.innerHTML = `
-
-
⚠️ 加载失败
-
${escapeHtml(message)}
-
请检查网络连接或稍后重试
-
- `;
- elements.content.style.display = 'block';
- }
-}
-
-// HTML转义
-function escapeHtml(text) {
- if (!text) return '';
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
-}
-
-// 错误处理
-window.addEventListener('error', function(event) {
- console.error('页面错误:', event.error);
-});
-
-// 网络状态监听
-window.addEventListener('online', function() {
- console.log('网络已连接');
-});
-
-window.addEventListener('offline', function() {
- console.log('网络已断开');
- showError('网络连接已断开,请检查网络设置');
-});
-
-// 导出函数供外部调用
-window.ExchangeRate = {
- loadExchangeRates,
- showError,
- showLoading
-};
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/接口集合.json b/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/返回接口.json b/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/返回接口.json
deleted file mode 100644
index b376d9c2..00000000
--- a/frontend/react-app/public/60sapi/日更资讯/每日国际汇率/返回接口.json
+++ /dev/null
@@ -1 +0,0 @@
-{"code":200,"message":"获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841","data":{"base_code":"CNY","updated":"2025/08/19 08:02:31","updated_at":1755561751000,"next_updated":"2025/08/20 08:11:41","next_updated_at":1755648701000,"rates":[{"currency":"CNY","rate":1},{"currency":"AED","rate":0.511124},{"currency":"AFN","rate":9.517171},{"currency":"ALL","rate":11.591448},{"currency":"AMD","rate":53.380737},{"currency":"ANG","rate":0.249125},{"currency":"AOA","rate":130.082117},{"currency":"ARS","rate":180.766035},{"currency":"AUD","rate":0.214039},{"currency":"AWG","rate":0.249125},{"currency":"AZN","rate":0.236907},{"currency":"BAM","rate":0.233194},{"currency":"BBD","rate":0.278352},{"currency":"BDT","rate":16.911823},{"currency":"BGN","rate":0.233216},{"currency":"BHD","rate":0.05233},{"currency":"BIF","rate":416.872549},{"currency":"BMD","rate":0.139176},{"currency":"BND","rate":0.178681},{"currency":"BOB","rate":0.962893},{"currency":"BRL","rate":0.752907},{"currency":"BSD","rate":0.139176},{"currency":"BTN","rate":12.167157},{"currency":"BWP","rate":1.952087},{"currency":"BYN","rate":0.44452},{"currency":"BZD","rate":0.278352},{"currency":"CAD","rate":0.19212},{"currency":"CDF","rate":404.961905},{"currency":"CHF","rate":0.112314},{"currency":"CLP","rate":134.245001},{"currency":"COP","rate":560.180139},{"currency":"CRC","rate":70.415535},{"currency":"CUP","rate":3.340225},{"currency":"CVE","rate":13.146924},{"currency":"CZK","rate":2.918414},{"currency":"DJF","rate":24.734508},{"currency":"DKK","rate":0.889716},{"currency":"DOP","rate":8.582359},{"currency":"DZD","rate":18.079862},{"currency":"EGP","rate":6.734271},{"currency":"ERN","rate":2.087641},{"currency":"ETB","rate":19.722171},{"currency":"EUR","rate":0.119223},{"currency":"FJD","rate":0.314391},{"currency":"FKP","rate":0.102914},{"currency":"FOK","rate":0.889734},{"currency":"GBP","rate":0.102909},{"currency":"GEL","rate":0.375537},{"currency":"GGP","rate":0.102914},{"currency":"GHS","rate":1.578239},{"currency":"GIP","rate":0.102914},{"currency":"GMD","rate":10.138575},{"currency":"GNF","rate":1210.235138},{"currency":"GTQ","rate":1.068254},{"currency":"GYD","rate":29.143934},{"currency":"HKD","rate":1.088795},{"currency":"HNL","rate":3.652528},{"currency":"HRK","rate":0.89834},{"currency":"HTG","rate":18.225889},{"currency":"HUF","rate":47.111579},{"currency":"IDR","rate":2251.38752},{"currency":"ILS","rate":0.471627},{"currency":"IMP","rate":0.102914},{"currency":"INR","rate":12.167163},{"currency":"IQD","rate":182.493562},{"currency":"IRR","rate":5947.331641},{"currency":"ISK","rate":17.059481},{"currency":"JEP","rate":0.102914},{"currency":"JMD","rate":22.284011},{"currency":"JOD","rate":0.098676},{"currency":"JPY","rate":20.560161},{"currency":"KES","rate":18.001838},{"currency":"KGS","rate":12.154697},{"currency":"KHR","rate":559.486842},{"currency":"KID","rate":0.213953},{"currency":"KMF","rate":58.657438},{"currency":"KRW","rate":193.082196},{"currency":"KWD","rate":0.042467},{"currency":"KYD","rate":0.11598},{"currency":"KZT","rate":75.044843},{"currency":"LAK","rate":3020.068103},{"currency":"LBP","rate":12456.256905},{"currency":"LKR","rate":41.92144},{"currency":"LRD","rate":27.931467},{"currency":"LSL","rate":2.453056},{"currency":"LYD","rate":0.753251},{"currency":"MAD","rate":1.256183},{"currency":"MDL","rate":2.318865},{"currency":"MGA","rate":616.246377},{"currency":"MKD","rate":7.330199},{"currency":"MMK","rate":292.821503},{"currency":"MNT","rate":496.284455},{"currency":"MOP","rate":1.121431},{"currency":"MRU","rate":5.575062},{"currency":"MUR","rate":6.322278},{"currency":"MVR","rate":2.152859},{"currency":"MWK","rate":242.759976},{"currency":"MXN","rate":2.615768},{"currency":"MYR","rate":0.587931},{"currency":"MZN","rate":8.897355},{"currency":"NAD","rate":2.453056},{"currency":"NGN","rate":213.548738},{"currency":"NIO","rate":5.126446},{"currency":"NOK","rate":1.418768},{"currency":"NPR","rate":19.467451},{"currency":"NZD","rate":0.234779},{"currency":"OMR","rate":0.053513},{"currency":"PAB","rate":0.139176},{"currency":"PEN","rate":0.494927},{"currency":"PGK","rate":0.582729},{"currency":"PHP","rate":7.93572},{"currency":"PKR","rate":39.46328},{"currency":"PLN","rate":0.506978},{"currency":"PYG","rate":1027.399127},{"currency":"QAR","rate":0.506601},{"currency":"RON","rate":0.603459},{"currency":"RSD","rate":13.970729},{"currency":"RUB","rate":11.172399},{"currency":"RWF","rate":202.11696},{"currency":"SAR","rate":0.52191},{"currency":"SBD","rate":1.166597},{"currency":"SCR","rate":2.048212},{"currency":"SDG","rate":62.256223},{"currency":"SEK","rate":1.330729},{"currency":"SGD","rate":0.178681},{"currency":"SHP","rate":0.102914},{"currency":"SLE","rate":3.233657},{"currency":"SLL","rate":3233.656465},{"currency":"SOS","rate":79.627341},{"currency":"SRD","rate":5.237221},{"currency":"SSP","rate":656.433807},{"currency":"STN","rate":2.921141},{"currency":"SYP","rate":1797.905083},{"currency":"SZL","rate":2.453056},{"currency":"THB","rate":4.522448},{"currency":"TJS","rate":1.304898},{"currency":"TMT","rate":0.487573},{"currency":"TND","rate":0.400111},{"currency":"TOP","rate":0.334775},{"currency":"TRY","rate":5.692494},{"currency":"TTD","rate":0.944407},{"currency":"TVD","rate":0.213953},{"currency":"TWD","rate":4.180337},{"currency":"TZS","rate":362.491953},{"currency":"UAH","rate":5.749996},{"currency":"UGX","rate":495.482314},{"currency":"USD","rate":0.139189},{"currency":"UYU","rate":5.574},{"currency":"UZS","rate":1755.559577},{"currency":"VES","rate":19.06244},{"currency":"VND","rate":3651.953637},{"currency":"VUV","rate":16.614981},{"currency":"WST","rate":0.37355},{"currency":"XAF","rate":78.209917},{"currency":"XCD","rate":0.375775},{"currency":"XCG","rate":0.249125},{"currency":"XDR","rate":0.101791},{"currency":"XOF","rate":78.209917},{"currency":"XPF","rate":14.227984},{"currency":"YER","rate":33.479791},{"currency":"ZAR","rate":2.453082},{"currency":"ZMW","rate":3.244378},{"currency":"ZWL","rate":3.727233}]}}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/css/background.css b/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/css/background.css
deleted file mode 100644
index b889760c..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/css/background.css
+++ /dev/null
@@ -1,106 +0,0 @@
-/* 彩虹背景相关样式 */
-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);
- }
-}
diff --git a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/css/style.css b/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/css/style.css
deleted file mode 100644
index caf27e8e..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/css/style.css
+++ /dev/null
@@ -1,1037 +0,0 @@
-/* 重置样式 */
-* {
- 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: #2c3e50;
- overflow-x: hidden;
-}
-
-/* 容器 */
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 20px;
- animation: containerFadeIn 1s ease-out;
-}
-
-@keyframes containerFadeIn {
- from {
- opacity: 0;
- transform: translateY(30px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-/* 头部 */
-.header {
- text-align: center;
- margin-bottom: 40px;
- background: rgba(255, 255, 255, 0.95);
- padding: 40px 30px;
- border-radius: 25px;
- box-shadow:
- 0 10px 40px rgba(0, 0, 0, 0.1),
- 0 0 0 1px rgba(255, 255, 255, 0.5);
- backdrop-filter: blur(20px);
- border: 2px solid transparent;
- background-clip: padding-box;
- position: relative;
- overflow: hidden;
-}
-
-.header::before {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background: linear-gradient(45deg,
- rgba(255, 107, 107, 0.1),
- rgba(78, 205, 196, 0.1),
- rgba(69, 183, 209, 0.1),
- rgba(150, 206, 180, 0.1)
- );
- animation: headerShimmer 4s ease-in-out infinite;
- z-index: -1;
-}
-
-@keyframes headerShimmer {
- 0%, 100% { opacity: 0.3; }
- 50% { opacity: 0.7; }
-}
-
-.header-icon {
- font-size: 4em;
- margin-bottom: 15px;
- animation: rainbowBounce 3s ease-in-out infinite;
- text-shadow: 0 0 20px rgba(255, 255, 255, 0.8);
-}
-
-@keyframes rainbowBounce {
- 0%, 100% {
- transform: translateY(0) scale(1);
- filter: hue-rotate(0deg);
- }
- 25% {
- transform: translateY(-10px) scale(1.05);
- filter: hue-rotate(90deg);
- }
- 50% {
- transform: translateY(-15px) scale(1.1);
- filter: hue-rotate(180deg);
- }
- 75% {
- transform: translateY(-5px) scale(1.05);
- filter: hue-rotate(270deg);
- }
-}
-
-.title {
- font-size: 3.2em;
- font-weight: 800;
- background: linear-gradient(45deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #feca57, #ff9ff3);
- background-size: 400% 400%;
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-clip: text;
- animation: rainbowText 3s ease-in-out infinite;
- margin-bottom: 10px;
- text-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
- letter-spacing: 2px;
-}
-
-@keyframes rainbowText {
- 0%, 100% { background-position: 0% 50%; }
- 50% { background-position: 100% 50%; }
-}
-
-.subtitle {
- font-size: 1.3em;
- color: #34495e;
- margin-bottom: 25px;
- font-weight: 600;
- opacity: 0.9;
-}
-
-/* 标签切换 */
-.tab-container {
- display: flex;
- justify-content: center;
- gap: 15px;
- margin-bottom: 25px;
- flex-wrap: wrap;
-}
-
-.tab-btn {
- background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.7));
- border: 2px solid transparent;
- padding: 12px 24px;
- border-radius: 25px;
- cursor: pointer;
- font-size: 1em;
- font-weight: 600;
- transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
- position: relative;
- overflow: hidden;
- display: flex;
- align-items: center;
- gap: 8px;
- color: #2c3e50;
- backdrop-filter: blur(10px);
- box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
-}
-
-.tab-btn::before {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
- transition: left 0.5s ease;
-}
-
-.tab-btn:hover::before {
- left: 100%;
-}
-
-.tab-btn.active {
- background: linear-gradient(135deg, #ff6b6b, #4ecdc4);
- color: white;
- transform: translateY(-3px) scale(1.05);
- box-shadow: 0 8px 25px rgba(255, 107, 107, 0.4);
-}
-
-.tab-btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15);
-}
-
-.tab-icon {
- font-size: 1.2em;
- transition: transform 0.3s ease;
-}
-
-.tab-btn:hover .tab-icon {
- transform: scale(1.2) rotate(10deg);
-}
-
-.update-time {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 8px;
- color: #34495e;
- font-size: 1em;
- margin-bottom: 20px;
- padding: 10px 20px;
- background: rgba(52, 73, 94, 0.1);
- border-radius: 25px;
- display: inline-flex;
- backdrop-filter: blur(5px);
-}
-
-.time-icon {
- font-size: 1.2em;
- animation: tick 2s infinite;
-}
-
-@keyframes tick {
- 0%, 50% { transform: rotate(0deg); }
- 25% { transform: rotate(20deg); }
- 75% { transform: rotate(-20deg); }
-}
-
-.refresh-btn {
- background: linear-gradient(135deg, #ff6b6b, #4ecdc4, #45b7d1);
- background-size: 200% 200%;
- color: white;
- border: none;
- padding: 15px 35px;
- border-radius: 30px;
- cursor: pointer;
- font-size: 1.1em;
- font-weight: 700;
- transition: all 0.4s ease;
- box-shadow: 0 6px 20px rgba(255, 107, 107, 0.3);
- display: inline-flex;
- align-items: center;
- gap: 10px;
- position: relative;
- overflow: hidden;
- animation: buttonRainbow 3s ease-in-out infinite;
-}
-
-@keyframes buttonRainbow {
- 0%, 100% { background-position: 0% 50%; }
- 50% { background-position: 100% 50%; }
-}
-
-.refresh-btn::before {
- content: '';
- position: absolute;
- top: 50%;
- left: 50%;
- width: 0;
- height: 0;
- background: rgba(255, 255, 255, 0.3);
- border-radius: 50%;
- transform: translate(-50%, -50%);
- transition: all 0.6s ease;
-}
-
-.refresh-btn:hover::before {
- width: 300px;
- height: 300px;
-}
-
-.refresh-btn:hover {
- transform: translateY(-4px) scale(1.05);
- box-shadow: 0 10px 30px rgba(255, 107, 107, 0.5);
-}
-
-.btn-icon {
- font-size: 1.3em;
- transition: transform 0.4s ease;
-}
-
-.refresh-btn:hover .btn-icon {
- transform: rotate(360deg);
-}
-
-/* 彩虹加载动画 */
-.loading {
- text-align: center;
- padding: 70px 40px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 25px;
- margin-bottom: 25px;
- box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
- backdrop-filter: blur(20px);
-}
-
-.loading-content {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 25px;
-}
-
-.rainbow-spinner {
- width: 60px;
- height: 60px;
- border: 6px solid transparent;
- border-radius: 50%;
- background: linear-gradient(45deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #feca57, #ff9ff3) border-box;
- background-clip: padding-box;
- position: relative;
- animation: rainbowSpin 2s linear infinite;
-}
-
-.rainbow-spinner::before {
- content: '';
- position: absolute;
- top: -6px;
- left: -6px;
- right: -6px;
- bottom: -6px;
- background: linear-gradient(45deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #feca57, #ff9ff3);
- border-radius: 50%;
- z-index: -1;
- animation: rainbowSpin 2s linear infinite reverse;
-}
-
-@keyframes rainbowSpin {
- 0% { transform: rotate(0deg); filter: hue-rotate(0deg); }
- 100% { transform: rotate(360deg); filter: hue-rotate(360deg); }
-}
-
-.loading-text {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 15px;
-}
-
-.loading-emoji {
- font-size: 3em;
- animation: rocketPulse 1.5s ease-in-out infinite alternate;
-}
-
-@keyframes rocketPulse {
- 0% { transform: scale(1) rotate(-10deg); }
- 100% { transform: scale(1.2) rotate(10deg); }
-}
-
-.loading-text p {
- font-size: 1.2em;
- color: #34495e;
- font-weight: 600;
- margin: 0;
-}
-
-.loading-dots {
- display: flex;
- gap: 8px;
-}
-
-.loading-dots span {
- width: 10px;
- height: 10px;
- border-radius: 50%;
- animation: dotRainbow 1.4s ease-in-out infinite both;
-}
-
-.loading-dots span:nth-child(1) {
- background: #ff6b6b;
- animation-delay: -0.32s;
-}
-.loading-dots span:nth-child(2) {
- background: #4ecdc4;
- animation-delay: -0.16s;
-}
-.loading-dots span:nth-child(3) {
- background: #45b7d1;
- animation-delay: 0s;
-}
-
-@keyframes dotRainbow {
- 0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }
- 40% { transform: scale(1.3); opacity: 1; }
-}
-
-/* 新闻列表 */
-.news-list {
- display: grid;
- gap: 25px;
- animation: listFadeIn 0.8s ease-out;
-}
-
-@keyframes listFadeIn {
- from {
- opacity: 0;
- transform: translateY(40px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-.news-item {
- background: rgba(255, 255, 255, 0.98);
- border-radius: 20px;
- padding: 30px;
- box-shadow: 0 5px 25px rgba(0, 0, 0, 0.08);
- transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
- border: 2px solid transparent;
- backdrop-filter: blur(15px);
- position: relative;
- overflow: hidden;
- animation: itemSlideIn 0.6s ease-out;
- animation-fill-mode: both;
-}
-
-.news-item:nth-child(odd) {
- animation-delay: 0.1s;
-}
-
-.news-item:nth-child(even) {
- animation-delay: 0.2s;
-}
-
-@keyframes itemSlideIn {
- from {
- opacity: 0;
- transform: translateX(-60px);
- }
- to {
- opacity: 1;
- transform: translateX(0);
- }
-}
-
-.news-item::before {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- width: 6px;
- height: 100%;
- background: linear-gradient(to bottom, #ff6b6b, #4ecdc4, #45b7d1);
- transform: scaleY(0);
- transition: transform 0.4s ease;
-}
-
-.news-item:hover::before {
- transform: scaleY(1);
-}
-
-.news-item:hover {
- box-shadow: 0 10px 50px rgba(0, 0, 0, 0.12);
- transform: translateY(-8px) scale(1.02);
- border-color: rgba(255, 107, 107, 0.3);
-}
-
-.news-header {
- display: flex;
- align-items: center;
- margin-bottom: 20px;
- gap: 15px;
-}
-
-.news-rank {
- background: linear-gradient(135deg, #ff6b6b, #4ecdc4);
- color: white;
- min-width: 45px;
- height: 45px;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- font-weight: bold;
- font-size: 1.1em;
- flex-shrink: 0;
- position: relative;
- box-shadow: 0 4px 15px rgba(255, 107, 107, 0.3);
- animation: rankGlow 3s ease-in-out infinite;
-}
-
-@keyframes rankGlow {
- 0%, 100% {
- box-shadow: 0 4px 15px rgba(255, 107, 107, 0.3);
- background: linear-gradient(135deg, #ff6b6b, #4ecdc4);
- }
- 33% {
- box-shadow: 0 4px 20px rgba(78, 205, 196, 0.4);
- background: linear-gradient(135deg, #4ecdc4, #45b7d1);
- }
- 66% {
- box-shadow: 0 4px 20px rgba(69, 183, 209, 0.4);
- background: linear-gradient(135deg, #45b7d1, #96ceb4);
- }
-}
-
-.news-rank.top-5 {
- background: linear-gradient(135deg, #feca57, #ff9ff3, #54a0ff);
- animation: topRankGlow 2s ease-in-out infinite alternate;
-}
-
-@keyframes topRankGlow {
- 0% {
- box-shadow: 0 4px 20px rgba(254, 202, 87, 0.5);
- transform: scale(1);
- }
- 100% {
- box-shadow: 0 6px 30px rgba(255, 159, 243, 0.6), 0 0 40px rgba(84, 160, 255, 0.3);
- transform: scale(1.05);
- }
-}
-
-.news-rank.top-5::before {
- content: '⭐';
- position: absolute;
- top: -10px;
- right: -8px;
- font-size: 0.8em;
- animation: starTwinkle 1s ease-in-out infinite alternate;
-}
-
-@keyframes starTwinkle {
- 0% { transform: translateY(0) rotate(-10deg) scale(1); }
- 100% { transform: translateY(-3px) rotate(10deg) scale(1.1); }
-}
-
-.news-score {
- background: linear-gradient(135deg, #ff6b6b, #feca57);
- color: white;
- padding: 8px 16px;
- border-radius: 20px;
- font-weight: 700;
- font-size: 1em;
- box-shadow: 0 3px 10px rgba(255, 107, 107, 0.3);
- animation: scoreFloat 2s ease-in-out infinite alternate;
-}
-
-@keyframes scoreFloat {
- 0% { transform: translateY(0); }
- 100% { transform: translateY(-2px); }
-}
-
-.news-title {
- font-size: 1.3em;
- font-weight: 700;
- color: #2c3e50;
- line-height: 1.4;
- margin-bottom: 15px;
- position: relative;
-}
-
-.news-meta {
- display: flex;
- align-items: center;
- gap: 20px;
- margin-bottom: 15px;
- flex-wrap: wrap;
-}
-
-.news-author {
- color: #7f8c8d;
- font-size: 1em;
- font-weight: 600;
- display: flex;
- align-items: center;
- gap: 6px;
-}
-
-.news-author::before {
- content: '👤';
- font-size: 1.1em;
-}
-
-.news-time {
- color: #95a5a6;
- font-size: 0.95em;
- display: flex;
- align-items: center;
- gap: 6px;
-}
-
-.news-time::before {
- content: '🕒';
- font-size: 1em;
-}
-
-.news-link {
- display: inline-flex;
- align-items: center;
- gap: 8px;
- color: white;
- text-decoration: none;
- font-size: 1em;
- font-weight: 600;
- padding: 12px 24px;
- background: linear-gradient(135deg, #ff6b6b, #4ecdc4);
- background-size: 200% 200%;
- border-radius: 30px;
- transition: all 0.4s ease;
- position: relative;
- overflow: hidden;
- animation: linkRainbow 4s ease-in-out infinite;
- box-shadow: 0 4px 15px rgba(255, 107, 107, 0.3);
-}
-
-@keyframes linkRainbow {
- 0%, 100% { background-position: 0% 50%; }
- 50% { background-position: 100% 50%; }
-}
-
-.news-link::before {
- content: '🚀';
- font-size: 1.1em;
-}
-
-.news-link::after {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
- transition: left 0.6s ease;
-}
-
-.news-link:hover::after {
- left: 100%;
-}
-
-.news-link:hover {
- transform: scale(1.05) translateY(-2px);
- box-shadow: 0 8px 25px rgba(255, 107, 107, 0.5);
-}
-
-/* 错误信息 */
-.error-message {
- text-align: center;
- padding: 70px 40px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 25px;
- box-shadow: 0 10px 40px rgba(231, 76, 60, 0.1);
- backdrop-filter: blur(20px);
-}
-
-.error-content {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 25px;
-}
-
-.error-icon {
- font-size: 5em;
- animation: errorShake 1.5s ease-in-out infinite alternate;
-}
-
-@keyframes errorShake {
- 0% { transform: translateX(0) rotate(0deg); }
- 25% { transform: translateX(-8px) rotate(-8deg); }
- 50% { transform: translateX(8px) rotate(8deg); }
- 75% { transform: translateX(-5px) rotate(-5deg); }
- 100% { transform: translateX(0) rotate(0deg); }
-}
-
-.error-content h3 {
- font-size: 1.8em;
- color: #e74c3c;
- margin: 0;
- font-weight: 700;
-}
-
-.error-content p {
- color: #7f8c8d;
- font-size: 1.1em;
- margin: 0;
- line-height: 1.6;
-}
-
-.retry-btn {
- background: linear-gradient(135deg, #ff6b6b, #4ecdc4);
- color: white;
- border: none;
- padding: 15px 30px;
- border-radius: 30px;
- cursor: pointer;
- font-size: 1.1em;
- font-weight: 700;
- transition: all 0.4s ease;
- box-shadow: 0 6px 20px rgba(255, 107, 107, 0.3);
- display: inline-flex;
- align-items: center;
- gap: 10px;
-}
-
-.retry-btn:hover {
- background: linear-gradient(135deg, #e74c3c, #3498db);
- box-shadow: 0 8px 25px rgba(255, 107, 107, 0.5);
- transform: translateY(-3px);
-}
-
-.retry-btn span {
- font-size: 1.2em;
- transition: transform 0.4s ease;
-}
-
-.retry-btn:hover span {
- transform: rotate(360deg);
-}
-
-/* 平板端适配 (768px - 1024px) */
-@media (min-width: 768px) and (max-width: 1024px) {
- .container {
- padding: 25px;
- }
-
- .header {
- padding: 35px 25px;
- }
-
- .header-icon {
- font-size: 3.5em;
- }
-
- .title {
- font-size: 2.8em;
- letter-spacing: 1.5px;
- }
-
- .subtitle {
- font-size: 1.2em;
- }
-
- .news-list {
- grid-template-columns: repeat(auto-fit, minmax(450px, 1fr));
- gap: 30px;
- }
-
- .news-item {
- padding: 25px;
- }
-
- .news-rank {
- min-width: 42px;
- height: 42px;
- font-size: 1.05em;
- }
-
- .news-title {
- font-size: 1.25em;
- }
-
- .tab-container {
- gap: 12px;
- }
-
- .tab-btn {
- padding: 10px 20px;
- font-size: 0.95em;
- }
-}
-
-/* 电脑端适配 (1025px+) */
-@media (min-width: 1025px) {
- .container {
- padding: 40px;
- }
-
- .header {
- padding: 50px 40px;
- margin-bottom: 50px;
- }
-
- .header-icon {
- font-size: 4.5em;
- }
-
- .title {
- font-size: 3.8em;
- letter-spacing: 3px;
- }
-
- .subtitle {
- font-size: 1.4em;
- }
-
- .news-list {
- grid-template-columns: repeat(auto-fit, minmax(550px, 1fr));
- gap: 35px;
- }
-
- .news-item {
- padding: 35px;
- }
-
- .news-rank {
- min-width: 50px;
- height: 50px;
- font-size: 1.2em;
- }
-
- .news-title {
- font-size: 1.4em;
- }
-
- .news-meta {
- gap: 25px;
- }
-
- .news-author {
- font-size: 1.05em;
- }
-
- .news-time {
- font-size: 1em;
- }
-
- .news-link {
- font-size: 1.05em;
- padding: 14px 28px;
- }
-
- /* 电脑端特殊效果 */
- .news-item:hover {
- transform: translateY(-10px) scale(1.03);
- }
-
- .tab-btn {
- padding: 14px 28px;
- font-size: 1.05em;
- }
-}
-
-/* 手机端适配 (767px以下) */
-@media (max-width: 767px) {
- .container {
- padding: 15px;
- }
-
- .header {
- padding: 25px 20px;
- margin-bottom: 25px;
- }
-
- .header-icon {
- font-size: 2.8em;
- }
-
- .title {
- font-size: 2.2em;
- letter-spacing: 1px;
- }
-
- .subtitle {
- font-size: 1em;
- }
-
- .tab-container {
- gap: 8px;
- justify-content: center;
- }
-
- .tab-btn {
- padding: 8px 16px;
- font-size: 0.85em;
- flex-direction: column;
- gap: 4px;
- }
-
- .update-time {
- font-size: 0.9em;
- padding: 8px 16px;
- }
-
- .refresh-btn {
- padding: 12px 24px;
- font-size: 0.95em;
- }
-
- .news-item {
- padding: 20px;
- border-radius: 15px;
- }
-
- .news-rank {
- min-width: 38px;
- height: 38px;
- font-size: 0.95em;
- }
-
- .news-title {
- font-size: 1.15em;
- line-height: 1.3;
- }
-
- .news-meta {
- flex-direction: column;
- align-items: flex-start;
- gap: 10px;
- }
-
- .news-author {
- font-size: 0.9em;
- }
-
- .news-time {
- font-size: 0.85em;
- }
-
- .news-link {
- font-size: 0.9em;
- padding: 10px 20px;
- align-self: flex-start;
- }
-
- /* 手机端动画优化 */
- .news-item {
- animation-duration: 0.4s;
- }
-
- .news-item:hover {
- transform: translateY(-3px) scale(1.01);
- }
-}
-
-/* 超小屏幕适配 (480px以下) */
-@media (max-width: 480px) {
- .container {
- padding: 12px;
- }
-
- .header {
- padding: 20px 15px;
- margin-bottom: 20px;
- }
-
- .header-icon {
- font-size: 2.5em;
- }
-
- .title {
- font-size: 1.9em;
- letter-spacing: 0.5px;
- }
-
- .subtitle {
- font-size: 0.95em;
- }
-
- .tab-container {
- gap: 6px;
- }
-
- .tab-btn {
- padding: 6px 12px;
- font-size: 0.8em;
- min-width: auto;
- }
-
- .tab-icon {
- font-size: 1em;
- }
-
- .update-time {
- font-size: 0.85em;
- padding: 6px 12px;
- flex-direction: column;
- gap: 4px;
- }
-
- .refresh-btn {
- padding: 10px 20px;
- font-size: 0.9em;
- }
-
- .news-list {
- gap: 15px;
- }
-
- .news-item {
- padding: 18px 15px;
- border-radius: 12px;
- }
-
- .news-header {
- gap: 12px;
- margin-bottom: 15px;
- }
-
- .news-rank {
- min-width: 35px;
- height: 35px;
- font-size: 0.9em;
- }
-
- .news-title {
- font-size: 1.05em;
- line-height: 1.25;
- }
-
- .news-meta {
- gap: 8px;
- }
-
- .news-author {
- font-size: 0.85em;
- }
-
- .news-time {
- font-size: 0.8em;
- }
-
- .news-link {
- font-size: 0.85em;
- padding: 8px 16px;
- }
-
- /* 超小屏幕性能优化 */
- .news-item {
- transition: transform 0.2s ease, box-shadow 0.2s ease;
- }
-
- .news-item::before,
- .news-item::after,
- .news-link::after {
- display: none;
- }
-
- .loading-content {
- gap: 15px;
- }
-
- .loading-emoji {
- font-size: 2.5em;
- }
-
- .error-icon {
- font-size: 3.5em;
- }
-
- .error-content h3 {
- font-size: 1.4em;
- }
-
- .error-content p {
- font-size: 0.95em;
- }
-}
diff --git a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/index.html b/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/index.html
deleted file mode 100644
index 765583af..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/index.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
🔥 HackerNews 热门榜单
-
-
-
-
-
-
-
-
-
-
-
-
🚀
-
正在获取最新榜单...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
💥
-
加载失败了
-
网络连接出现问题,请稍后重试
-
-
-
-
-
-
-
-
diff --git a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/js/script.js b/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/js/script.js
deleted file mode 100644
index 33d90bed..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/js/script.js
+++ /dev/null
@@ -1,338 +0,0 @@
-// 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 = `
-
-
${rankEmoji} ${escapeHtml(item.title)}
-
-
- 🚀 阅读全文
-
- `;
-
- 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();
- }
- }
-});
diff --git a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/接口集合.json b/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/返回接口.json b/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/返回接口.json
deleted file mode 100644
index 0008f691..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/HackerNews榜单/返回接口.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "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
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/css/background.css b/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/css/background.css
deleted file mode 100644
index 91b3ee72..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/css/background.css
+++ /dev/null
@@ -1,40 +0,0 @@
-.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);
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/css/style.css b/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/css/style.css
deleted file mode 100644
index b7d33692..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/css/style.css
+++ /dev/null
@@ -1,155 +0,0 @@
-* {
- 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;
- }
-}
-
-/* 电脑端 - 默认样式已经设置 */
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/index.html b/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/index.html
deleted file mode 100644
index 0cb32410..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
微博热搜榜
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/js/main.js b/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/js/main.js
deleted file mode 100644
index 8a5e3bd4..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/js/main.js
+++ /dev/null
@@ -1,94 +0,0 @@
-// 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 = `
-
${index + 1}
-
-
${item.title}
- ${item.hot_value ? `
${item.hot_value}
` : ''}
-
- `;
-
- 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 = `
-
- 获取数据失败,正在尝试其他接口...
-
- `;
-
- // 延迟后重试
- setTimeout(fetchWeiboHotList, 2000);
- }
-}
-
-// 页面加载完成后获取数据
-document.addEventListener('DOMContentLoaded', () => {
- fetchWeiboHotList();
-
- // 每隔5分钟刷新一次数据
- setInterval(fetchWeiboHotList, 5 * 60 * 1000);
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/接口集合.json b/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/返回接口.json b/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/返回接口.json
deleted file mode 100644
index 0779a075..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/微博热搜榜/返回接口.json
+++ /dev/null
@@ -1,261 +0,0 @@
-{
- "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"
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/css/background.css b/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/css/background.css
deleted file mode 100644
index fbf1fd3f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/css/background.css
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 背景相关样式 */
-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);
- }
-}
diff --git a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/css/style.css b/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/css/style.css
deleted file mode 100644
index 2d1682db..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/css/style.css
+++ /dev/null
@@ -1,956 +0,0 @@
-/* 重置样式 */
-* {
- 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;
- }
-}
diff --git a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/index.html b/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/index.html
deleted file mode 100644
index 9892695a..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/index.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
抖音热搜榜
-
-
-
-
-
-
-
-
-
-
-
-
🎭
-
正在获取最新热搜...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
😵
-
加载失败了
-
网络连接出现问题,请稍后重试
-
-
-
-
-
-
-
-
diff --git a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/js/script.js b/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/js/script.js
deleted file mode 100644
index 5e57415c..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/js/script.js
+++ /dev/null
@@ -1,300 +0,0 @@
-// 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 = `
-
-
-

-
-
${fireLevel} ${formattedHotValue}
-
${formattedTime}
-
- 查看详情
-
-
-
- `;
-
- 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);
diff --git a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/接口集合.json b/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/返回接口.json b/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/返回接口.json
deleted file mode 100644
index 5094d4ec..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/抖音热搜榜/返回接口.json
+++ /dev/null
@@ -1,496 +0,0 @@
-{
- "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
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/css/style.css b/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/css/style.css
deleted file mode 100644
index e76f60c9..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/css/style.css
+++ /dev/null
@@ -1,495 +0,0 @@
-/* 猫眼票房排行榜 - 淡绿色清新风格样式 */
-
-/* 重置样式 */
-* {
- 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;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/index.html b/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/index.html
deleted file mode 100644
index 21b84c4b..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
猫眼票房排行榜 | 全球电影总票房
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/js/script.js b/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/js/script.js
deleted file mode 100644
index 39119c89..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/js/script.js
+++ /dev/null
@@ -1,249 +0,0 @@
-// 猫眼票房排行榜 - 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 = `
-
-
-
-
${list.length}
-
入榜影片数量
-
-
-
${Math.min(10, list.length)}
-
TOP10 数量
-
-
-
-
- 全球电影总票房排行榜
-
- ${list.map(item => renderMovieItem(item)).join('')}
-
-
- ${tip ? `
${escapeHtml(tip)}
` : ''}
- ${update_time ? `
更新时间:${escapeHtml(update_time)}
` : ''}
- `;
-
- 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 `
-
-
${rank}
-
-
#${rank}
-
-
${escapeHtml(item.movie_name)}
-
上映年份:${escapeHtml(item.release_year || '')}
-
-
-
${formatCurrencyDesc(item.box_office_desc, item.box_office)}
-
总票房
-
-
-
- `;
-}
-
-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 = `
-
-
⚠️ 加载失败
-
${escapeHtml(message)}
-
请稍后重试
-
- `;
- 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();
- }
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/接口集合.json b/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/返回接口.json b/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/返回接口.json
deleted file mode 100644
index 945e5cfe..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/猫眼票房排行榜/返回接口.json
+++ /dev/null
@@ -1,171 +0,0 @@
-{
- "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
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单列表/接口集合.json b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单列表/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单列表/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单列表/返回接口.json b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单列表/返回接口.json
deleted file mode 100644
index f0b8c79f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单列表/返回接口.json
+++ /dev/null
@@ -1,750 +0,0 @@
-{
- "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"
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/css/background.css b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/css/background.css
deleted file mode 100644
index a4c76f7a..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/css/background.css
+++ /dev/null
@@ -1,123 +0,0 @@
-/* 背景样式文件 */
-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;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/css/style.css b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/css/style.css
deleted file mode 100644
index 5f93a361..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/css/style.css
+++ /dev/null
@@ -1,483 +0,0 @@
-/* 基础样式重置 */
-* {
- 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;
- }
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/index.html b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/index.html
deleted file mode 100644
index 9215b81c..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/index.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
网易云榜单详情
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/js/script.js b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/js/script.js
deleted file mode 100644
index 0ff2eb10..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/js/script.js
+++ /dev/null
@@ -1,349 +0,0 @@
-// 网易云榜单详情 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 = `
-
${song.rank}
-
-
${this.escapeHtml(song.title)}
-
${this.escapeHtml(artistNames)}
-
${this.escapeHtml(albumName)}
-
-
- `;
-
- // 添加点击事件
- 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);
- });
-});
\ No newline at end of file
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/接口集合.json b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/接口集合.json
deleted file mode 100644
index 04e92b7f..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/接口集合.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "https://60s-cf.viki.moe",
- "https://60s.viki.moe",
- "https://60s.b23.run",
- "https://60s.114128.xyz",
- "https://60s-cf.114128.xyz"
-]
diff --git a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/返回接口.json b/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/返回接口.json
deleted file mode 100644
index c5ed47a3..00000000
--- a/frontend/react-app/public/60sapi/热搜榜单/网易云榜单详情/返回接口.json
+++ /dev/null
@@ -1,5612 +0,0 @@
-{
- "code": 200,
- "message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
- "data": [
- {
- "id": 2040015902,
- "rank": 1,
- "rank_name": "飙升榜",
- "title": "熄灭",
- "artist": [
- {
- "id": 12324449,
- "name": "TC",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12324449"
- }
- ],
- "album": {
- "id": 163848123,
- "name": "熄灭",
- "cover": "http://p1.music.126.net/sNOy5UAdfk_OYumV4qF-0g==/109951168551205771.jpg",
- "published": "2023-07-15",
- "published_at": 1689436800000,
- "company": ""
- },
- "duration": 148611,
- "duration_desc": "2:28",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 29724874,
- "size_desc": "29.72 MB",
- "bitrate": 1600134,
- "extension": "flac"
- },
- "hq": {
- "size": 5947603,
- "size_desc": "5.95 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3568579,
- "size_desc": "3.57 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2379067,
- "size_desc": "2.38 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2040015902"
- },
- {
- "id": 2733008419,
- "rank": 2,
- "rank_name": "飙升榜",
- "title": "LOVE",
- "artist": [
- {
- "id": 12356808,
- "name": "范世錡",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12356808"
- }
- ],
- "album": {
- "id": 280422980,
- "name": "LOVE,So...",
- "cover": "http://p1.music.126.net/BHdtr1R0-yuXLdoY3kJGUg==/109951171697418256.jpg",
- "published": "2025-08-04",
- "published_at": 1754323200000,
- "company": "天娱传媒"
- },
- "duration": 238523,
- "duration_desc": "3:58",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 30885411,
- "size_desc": "30.89 MB",
- "bitrate": 1035740,
- "extension": "flac"
- },
- "hq": {
- "size": 9543405,
- "size_desc": "9.54 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5726061,
- "size_desc": "5.73 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3817389,
- "size_desc": "3.82 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2733008419"
- },
- {
- "id": 2735554018,
- "rank": 3,
- "rank_name": "飙升榜",
- "title": "拍拍灰",
- "artist": [
- {
- "id": 30000014,
- "name": "脏饼干",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=30000014"
- }
- ],
- "album": {
- "id": 281295264,
- "name": "拍拍灰",
- "cover": "http://p1.music.126.net/4riboo3M7VuJj6We6Sc1xw==/109951171845374025.jpg",
- "published": "2025-08-14",
- "published_at": 1755187200000,
- "company": ""
- },
- "duration": 184106,
- "duration_desc": "3:04",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 21134984,
- "size_desc": "21.13 MB",
- "bitrate": 918233,
- "extension": "flac"
- },
- "hq": {
- "size": 7367085,
- "size_desc": "7.37 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4420269,
- "size_desc": "4.42 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 2946861,
- "size_desc": "2.95 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2735554018"
- },
- {
- "id": 2684422547,
- "rank": 4,
- "rank_name": "飙升榜",
- "title": "Money Loves Me",
- "artist": [
- {
- "id": 97594003,
- "name": "Alchemist Harmony",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=97594003"
- }
- ],
- "album": {
- "id": 265812259,
- "name": "Money Loves Me",
- "cover": "http://p1.music.126.net/nKyjr2f050Dl7CD4NUyKCQ==/109951170609858632.jpg",
- "published": "2025-03-09",
- "published_at": 1741536000000,
- "company": "Alchemist Harmony"
- },
- "duration": 174000,
- "duration_desc": "2:54",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 34717430,
- "size_desc": "34.72 MB",
- "bitrate": 1596056,
- "extension": "flac"
- },
- "hq": {
- "size": 6962199,
- "size_desc": "6.96 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4177337,
- "size_desc": "4.18 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 2784906,
- "size_desc": "2.78 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2684422547"
- },
- {
- "id": 2677396501,
- "rank": 5,
- "rank_name": "飙升榜",
- "title": "NOT GOOD",
- "artist": [
- {
- "id": 12563131,
- "name": "Rapeter",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12563131"
- }
- ],
- "album": {
- "id": 263242113,
- "name": "IMGOOD别担心我",
- "cover": "http://p1.music.126.net/QpNRZsfMP5J4tOlziA8Pnw==/109951170504642760.jpg",
- "published": "2025-02-21",
- "published_at": 1740153600000,
- "company": ""
- },
- "duration": 190558,
- "duration_desc": "3:10",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 24001098,
- "size_desc": "24 MB",
- "bitrate": 1007462,
- "extension": "flac"
- },
- "hq": {
- "size": 7624365,
- "size_desc": "7.62 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4574637,
- "size_desc": "4.57 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3049773,
- "size_desc": "3.05 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2677396501"
- },
- {
- "id": 405253632,
- "rank": 6,
- "rank_name": "飙升榜",
- "title": "梦回还 (TV size)",
- "artist": [
- {
- "id": 1215003,
- "name": "呦猫UNEKO",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1215003"
- }
- ],
- "album": {
- "id": 34513527,
- "name": "梦回还",
- "cover": "http://p1.music.126.net/hAfIXJP_ZBRQKd1VE_Hqbg==/16625715324173485.jpg",
- "published": "2016-03-05",
- "published_at": 1457142849504,
- "company": ""
- },
- "duration": 72456,
- "duration_desc": "1:12",
- "popularity": 100,
- "score": 100,
- "fee": 0,
- "status": 0,
- "mb": {
- "sq": null,
- "hq": {
- "size": 2902769,
- "size_desc": "2.9 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 1741679,
- "size_desc": "1.74 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 1161133,
- "size_desc": "1.16 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=405253632"
- },
- {
- "id": 1975295694,
- "rank": 7,
- "rank_name": "飙升榜",
- "title": "小哑巴",
- "artist": [
- {
- "id": 48277407,
- "name": "BOBBYNOPEACE",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=48277407"
- }
- ],
- "album": {
- "id": 150299202,
- "name": "小哑巴",
- "cover": "http://p1.music.126.net/IhsEqn9OXuBYt2_Y8pAgCQ==/109951167815351812.jpg",
- "published": "2022-08-27",
- "published_at": 1661616000000,
- "company": ""
- },
- "duration": 171176,
- "duration_desc": "2:51",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 17473483,
- "size_desc": "17.47 MB",
- "bitrate": 816630,
- "extension": "flac"
- },
- "hq": {
- "size": 6849645,
- "size_desc": "6.85 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4109805,
- "size_desc": "4.11 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2739885,
- "size_desc": "2.74 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=1975295694"
- },
- {
- "id": 88926,
- "rank": 8,
- "rank_name": "飙升榜",
- "title": "想你的夜",
- "artist": [
- {
- "id": 2868,
- "name": "关喆",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=2868"
- }
- ],
- "album": {
- "id": 8668,
- "name": "永远的永远",
- "cover": "http://p1.music.126.net/zu9MjBERozqTv_0NpM91Rg==/109951164094037727.jpg",
- "published": "2009-07-05",
- "published_at": 1246809600000,
- "company": "爱贝克思"
- },
- "duration": 265960,
- "duration_desc": "4:25",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 26941966,
- "size_desc": "26.94 MB",
- "bitrate": 1411000,
- "extension": "flac"
- },
- "hq": {
- "size": 10641285,
- "size_desc": "10.64 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6384788,
- "size_desc": "6.38 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4256540,
- "size_desc": "4.26 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=88926"
- },
- {
- "id": 2118740086,
- "rank": 9,
- "rank_name": "飙升榜",
- "title": "黒のバースデイ",
- "artist": [
- {
- "id": 56525844,
- "name": "Ave Mujica",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=56525844"
- }
- ],
- "album": {
- "id": 183578899,
- "name": "黒のバースデイ",
- "cover": "http://p1.music.126.net/0QwEBXfAZ8RzE41vZPlu7A==/109951170223390839.jpg",
- "published": "2023-04-10",
- "published_at": 1681142400000,
- "company": "ブシロードミュージック"
- },
- "duration": 225706,
- "duration_desc": "3:45",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 31389013,
- "size_desc": "31.39 MB",
- "bitrate": 1112559,
- "extension": "flac"
- },
- "hq": {
- "size": 9030765,
- "size_desc": "9.03 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5418477,
- "size_desc": "5.42 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3612333,
- "size_desc": "3.61 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2118740086"
- },
- {
- "id": 2729810172,
- "rank": 10,
- "rank_name": "飙升榜",
- "title": "Montagem Nada Tropic",
- "artist": [
- {
- "id": 99376836,
- "name": "MHM",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=99376836"
- }
- ],
- "album": {
- "id": 279515736,
- "name": "Montagem Nada Tropic",
- "cover": "http://p1.music.126.net/YTA1HZJcLit_QoFfG81puQ==/109951171520378357.jpg",
- "published": "2025-07-26",
- "published_at": 1753545600000,
- "company": ""
- },
- "duration": 121997,
- "duration_desc": "2:01",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 12718907,
- "size_desc": "12.72 MB",
- "bitrate": 833893,
- "extension": "flac"
- },
- "hq": {
- "size": 4882852,
- "size_desc": "4.88 MB",
- "bitrate": 320003,
- "extension": "mp3"
- },
- "mq": {
- "size": 2929729,
- "size_desc": "2.93 MB",
- "bitrate": 192003,
- "extension": "mp3"
- },
- "lq": {
- "size": 1953167,
- "size_desc": "1.95 MB",
- "bitrate": 128003,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2729810172"
- },
- {
- "id": 2734387620,
- "rank": 11,
- "rank_name": "飙升榜",
- "title": "No title -10 Years Later Edition-",
- "artist": [
- {
- "id": 13059968,
- "name": "Reol",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=13059968"
- }
- ],
- "album": {
- "id": 280924754,
- "name": "“No title” in NIPPON BUDOKAN",
- "cover": "http://p1.music.126.net/1OmrYxGKdMGXH_lql-N3iA==/109951171817417918.jpg",
- "published": "2025-08-16",
- "published_at": 1755360000000,
- "company": "索尼音乐"
- },
- "duration": 265264,
- "duration_desc": "4:25",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 58682245,
- "size_desc": "58.68 MB",
- "bitrate": 1769624,
- "extension": "flac"
- },
- "hq": {
- "size": 10613072,
- "size_desc": "10.61 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6367861,
- "size_desc": "6.37 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4245255,
- "size_desc": "4.25 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2734387620"
- },
- {
- "id": 2738501239,
- "rank": 12,
- "rank_name": "飙升榜",
- "title": "七小夕",
- "artist": [
- {
- "id": 53868079,
- "name": "Vvy王泽宇",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=53868079"
- }
- ],
- "album": {
- "id": 282255005,
- "name": "七小夕",
- "cover": "http://p1.music.126.net/EcEdbDFwZS41UcleVx5rAA==/109951171907096312.jpg",
- "published": "2025-08-20",
- "published_at": 1755705600000,
- "company": ""
- },
- "duration": 234461,
- "duration_desc": "3:54",
- "popularity": 100,
- "score": 100,
- "fee": 0,
- "status": 0,
- "mb": {
- "sq": {
- "size": 25150986,
- "size_desc": "25.15 MB",
- "bitrate": 858023,
- "extension": "flac"
- },
- "hq": {
- "size": 9381138,
- "size_desc": "9.38 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5628700,
- "size_desc": "5.63 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3752481,
- "size_desc": "3.75 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738501239"
- },
- {
- "id": 2622939350,
- "rank": 13,
- "rank_name": "飙升榜",
- "title": "莆田才子",
- "artist": [
- {
- "id": 35884195,
- "name": "翁杰Winjay",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=35884195"
- }
- ],
- "album": {
- "id": 247120411,
- "name": "莆田才子",
- "cover": "http://p1.music.126.net/quYbskDqRirX3-wqgRLk7A==/109951169934912352.jpg",
- "published": "2024-09-06",
- "published_at": 1725638400000,
- "company": ""
- },
- "duration": 150205,
- "duration_desc": "2:30",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 17815377,
- "size_desc": "17.82 MB",
- "bitrate": 948852,
- "extension": "flac"
- },
- "hq": {
- "size": 6010605,
- "size_desc": "6.01 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3606381,
- "size_desc": "3.61 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2404269,
- "size_desc": "2.4 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2622939350"
- },
- {
- "id": 2737575141,
- "rank": 14,
- "rank_name": "飙升榜",
- "title": "陪你度过漫长岁月",
- "artist": [
- {
- "id": 58810912,
- "name": "赵小童",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=58810912"
- }
- ],
- "album": {
- "id": 282015216,
- "name": "漫漫协奏曲",
- "cover": "http://p1.music.126.net/a0yqXomXz_85AzybTmxBCA==/109951171910165132.jpg",
- "published": "2025-08-21",
- "published_at": 1755792000000,
- "company": "网易·云上"
- },
- "duration": 307472,
- "duration_desc": "5:07",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 32893926,
- "size_desc": "32.89 MB",
- "bitrate": 855708,
- "extension": "flac"
- },
- "hq": {
- "size": 12301485,
- "size_desc": "12.3 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 7380909,
- "size_desc": "7.38 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4920621,
- "size_desc": "4.92 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2737575141"
- },
- {
- "id": 2739871903,
- "rank": 15,
- "rank_name": "飙升榜",
- "title": "路",
- "artist": [
- {
- "id": 62183661,
- "name": "DOMMIU李由音",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=62183661"
- }
- ],
- "album": {
- "id": 282846013,
- "name": "路",
- "cover": "http://p2.music.126.net/RWMmqPsIpY96teLLGPVKqg==/109951171928997751.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": "索尼音乐X 深声不息"
- },
- "duration": 222890,
- "duration_desc": "3:42",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 27957021,
- "size_desc": "27.96 MB",
- "bitrate": 1003287,
- "extension": "flac"
- },
- "hq": {
- "size": 8918445,
- "size_desc": "8.92 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5351085,
- "size_desc": "5.35 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3567405,
- "size_desc": "3.57 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2739871903"
- },
- {
- "id": 2161222939,
- "rank": 16,
- "rank_name": "飙升榜",
- "title": "沦陷",
- "artist": [
- {
- "id": 13005262,
- "name": "JuggShots",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=13005262"
- }
- ],
- "album": {
- "id": 197781559,
- "name": "沦陷",
- "cover": "http://p2.music.126.net/ctib5R--oR68W2IrOk765w==/109951169635716223.jpg",
- "published": "2024-05-28",
- "published_at": 1716912000000,
- "company": ""
- },
- "duration": 183770,
- "duration_desc": "3:03",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 22189011,
- "size_desc": "22.19 MB",
- "bitrate": 965943,
- "extension": "flac"
- },
- "hq": {
- "size": 7353645,
- "size_desc": "7.35 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4412205,
- "size_desc": "4.41 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2941485,
- "size_desc": "2.94 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2161222939"
- },
- {
- "id": 26093064,
- "rank": 17,
- "rank_name": "飙升榜",
- "title": "Sacred Play Secret Place",
- "artist": [
- {
- "id": 12283,
- "name": "Matryoshka",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12283"
- }
- ],
- "album": {
- "id": 2386118,
- "name": "Laideronnette",
- "cover": "http://p2.music.126.net/1opYZaMgfAQrKMKfLy1xZA==/109951169789816801.jpg",
- "published": "2012-12-11",
- "published_at": 1355241600000,
- "company": "Virgin Babylon Records"
- },
- "duration": 317547,
- "duration_desc": "5:17",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 30171985,
- "size_desc": "30.17 MB",
- "bitrate": 760124,
- "extension": "flac"
- },
- "hq": {
- "size": 12704958,
- "size_desc": "12.7 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 7622992,
- "size_desc": "7.62 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 5082009,
- "size_desc": "5.08 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=26093064"
- },
- {
- "id": 2081549596,
- "rank": 18,
- "rank_name": "飙升榜",
- "title": "下次见",
- "artist": [
- {
- "id": 55305505,
- "name": "林心念",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=55305505"
- }
- ],
- "album": {
- "id": 174605542,
- "name": "下次见",
- "cover": "http://p2.music.126.net/g6STNqcm32HjAm4CpoJcBg==/109951168910388635.jpg",
- "published": "2023-09-15",
- "published_at": 1694793600000,
- "company": "讯飞音乐"
- },
- "duration": 159375,
- "duration_desc": "2:39",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 17672725,
- "size_desc": "17.67 MB",
- "bitrate": 887101,
- "extension": "flac"
- },
- "hq": {
- "size": 6377325,
- "size_desc": "6.38 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3826413,
- "size_desc": "3.83 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2550957,
- "size_desc": "2.55 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2081549596"
- },
- {
- "id": 1894316939,
- "rank": 19,
- "rank_name": "飙升榜",
- "title": "最渣男主角",
- "artist": [
- {
- "id": 12292664,
- "name": "Shooter",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12292664"
- },
- {
- "id": 30003804,
- "name": "404 RAPPER",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=30003804"
- }
- ],
- "album": {
- "id": 136039945,
- "name": "最渣男主角",
- "cover": "http://p2.music.126.net/9UTbTz8efieRMQvnaoJRwQ==/109951166612306430.jpg",
- "published": "2021-11-11",
- "published_at": 1636646400000,
- "company": ""
- },
- "duration": 203664,
- "duration_desc": "3:23",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 20614401,
- "size_desc": "20.61 MB",
- "bitrate": 809738,
- "extension": "flac"
- },
- "hq": {
- "size": 8149485,
- "size_desc": "8.15 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4889709,
- "size_desc": "4.89 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3259821,
- "size_desc": "3.26 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=1894316939"
- },
- {
- "id": 2740938171,
- "rank": 20,
- "rank_name": "飙升榜",
- "title": "须臾Karios(栩渝同人曲)",
- "artist": [
- {
- "id": 33696439,
- "name": "周冠宏",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=33696439"
- },
- {
- "id": 34270051,
- "name": "赵春寒Z&Hanl",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=34270051"
- }
- ],
- "album": {
- "id": 283152840,
- "name": "须臾Karios(栩渝同人曲)",
- "cover": "http://p2.music.126.net/s28QYI-yCjr2kHRGVsrr2g==/109951171943770807.jpg",
- "published": "2025-08-27",
- "published_at": 1756310400000,
- "company": ""
- },
- "duration": 246342,
- "duration_desc": "4:06",
- "popularity": 100,
- "score": 100,
- "fee": 0,
- "status": 0,
- "mb": {
- "sq": {
- "size": 32856508,
- "size_desc": "32.86 MB",
- "bitrate": 1066872,
- "extension": "flac"
- },
- "hq": {
- "size": 9856365,
- "size_desc": "9.86 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5913837,
- "size_desc": "5.91 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3942573,
- "size_desc": "3.94 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2740938171"
- },
- {
- "id": 2738228860,
- "rank": 21,
- "rank_name": "飙升榜",
- "title": "Dehors (普通话版)",
- "artist": [
- {
- "id": 338718,
- "name": "JORDANN",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=338718"
- }
- ],
- "album": {
- "id": 282257834,
- "name": "Dehors (普通话版)",
- "cover": "http://p2.music.126.net/8mNbLer5tKnkgj3Q4JPpWw==/109951171903070287.jpg",
- "published": "2025-08-21",
- "published_at": 1755792000000,
- "company": "JORDANN"
- },
- "duration": 198026,
- "duration_desc": "3:18",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 20334981,
- "size_desc": "20.33 MB",
- "bitrate": 821356,
- "extension": "flac"
- },
- "hq": {
- "size": 7923885,
- "size_desc": "7.92 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4754349,
- "size_desc": "4.75 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3169581,
- "size_desc": "3.17 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738228860"
- },
- {
- "id": 2710416778,
- "rank": 22,
- "rank_name": "飙升榜",
- "title": "Long term",
- "artist": [
- {
- "id": 94359653,
- "name": "AI MUSIC MATRIX",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=94359653"
- }
- ],
- "album": {
- "id": 273690835,
- "name": "Relax R&B 76",
- "cover": "http://p2.music.126.net/p8hySF3PjpGyEdExUAocCw==/109951171182041062.jpg",
- "published": "2025-05-30",
- "published_at": 1748620800000,
- "company": "Sound Matrix"
- },
- "duration": 189960,
- "duration_desc": "3:09",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 14200860,
- "size_desc": "14.2 MB",
- "bitrate": 597909,
- "extension": "flac"
- },
- "hq": {
- "size": 7600631,
- "size_desc": "7.6 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4560396,
- "size_desc": "4.56 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3040279,
- "size_desc": "3.04 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2710416778"
- },
- {
- "id": 2038203229,
- "rank": 23,
- "rank_name": "飙升榜",
- "title": "FRIDAY9 II",
- "artist": [
- {
- "id": 28642672,
- "name": "kkluv",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=28642672"
- }
- ],
- "album": {
- "id": 163444153,
- "name": "FRIDAY9 II",
- "cover": "http://p2.music.126.net/TAz4QuITFBhN4D1xsiq0kg==/109951168538063565.jpg",
- "published": "2023-01-17",
- "published_at": 1673971200000,
- "company": "索尼音乐"
- },
- "duration": 166285,
- "duration_desc": "2:46",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 32263929,
- "size_desc": "32.26 MB",
- "bitrate": 1552216,
- "extension": "flac"
- },
- "hq": {
- "size": 6653954,
- "size_desc": "6.65 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3992390,
- "size_desc": "3.99 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2661608,
- "size_desc": "2.66 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2038203229"
- },
- {
- "id": 2740641241,
- "rank": 24,
- "rank_name": "飙升榜",
- "title": "归舟",
- "artist": [
- {
- "id": 9491,
- "name": "谭晶",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=9491"
- },
- {
- "id": 53926051,
- "name": "燕云十六声",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=53926051"
- }
- ],
- "album": {
- "id": 283122508,
- "name": "归舟",
- "cover": "http://p2.music.126.net/gWQj5VbaDK8kUvJS3uOl2g==/109951171939389473.jpg",
- "published": "2025-08-27",
- "published_at": 1756310400000,
- "company": ""
- },
- "duration": 301006,
- "duration_desc": "5:01",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 35503109,
- "size_desc": "35.5 MB",
- "bitrate": 943436,
- "extension": "flac"
- },
- "hq": {
- "size": 12042285,
- "size_desc": "12.04 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 7225389,
- "size_desc": "7.23 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 4816941,
- "size_desc": "4.82 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2740641241"
- },
- {
- "id": 2604224368,
- "rank": 25,
- "rank_name": "飙升榜",
- "title": "São Paulo",
- "artist": [
- {
- "id": 30384202,
- "name": "Fyex",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=30384202"
- }
- ],
- "album": {
- "id": 240979251,
- "name": "São Paulo",
- "cover": "http://p2.music.126.net/aGGl_ANW0kVZzfJMtmLR9Q==/109951169743205693.jpg",
- "published": "2024-06-06",
- "published_at": 1717689600000,
- "company": "Fyex"
- },
- "duration": 97850,
- "duration_desc": "1:37",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 9831272,
- "size_desc": "9.83 MB",
- "bitrate": 803775,
- "extension": "flac"
- },
- "hq": {
- "size": 3916321,
- "size_desc": "3.92 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 2349810,
- "size_desc": "2.35 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 1566555,
- "size_desc": "1.57 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2604224368"
- },
- {
- "id": 2738715964,
- "rank": 26,
- "rank_name": "飙升榜",
- "title": "染春",
- "artist": [
- {
- "id": 27730224,
- "name": "回春丹",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=27730224"
- }
- ],
- "album": {
- "id": 282452357,
- "name": "大把时间璀璨",
- "cover": "http://p2.music.126.net/_gJgbfqTgWH2T1vk1Br1ig==/109951171911478103.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": "池沼版全"
- },
- "duration": 206094,
- "duration_desc": "3:26",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 23766803,
- "size_desc": "23.77 MB",
- "bitrate": 922409,
- "extension": "flac"
- },
- "hq": {
- "size": 8246445,
- "size_desc": "8.25 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4947885,
- "size_desc": "4.95 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3298605,
- "size_desc": "3.3 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738715964"
- },
- {
- "id": 2716412355,
- "rank": 27,
- "rank_name": "飙升榜",
- "title": "Supra",
- "artist": [
- {
- "id": 52410166,
- "name": "泰格西",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=52410166"
- },
- {
- "id": 32438941,
- "name": "cLoner23",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=32438941"
- }
- ],
- "album": {
- "id": 275450408,
- "name": "Block Core",
- "cover": "http://p2.music.126.net/w6MAd3zX38cPTkB9v9aMZg==/109951171319396818.jpg",
- "published": "2025-06-17",
- "published_at": 1750176000000,
- "company": ""
- },
- "duration": 126666,
- "duration_desc": "2:06",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 15475009,
- "size_desc": "15.48 MB",
- "bitrate": 977219,
- "extension": "flac"
- },
- "hq": {
- "size": 5068845,
- "size_desc": "5.07 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3041325,
- "size_desc": "3.04 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2027565,
- "size_desc": "2.03 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2716412355"
- },
- {
- "id": 109196,
- "rank": 28,
- "rank_name": "飙升榜",
- "title": "想太多",
- "artist": [
- {
- "id": 3689,
- "name": "李玖哲",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=3689"
- }
- ],
- "album": {
- "id": 10826,
- "name": "想太多",
- "cover": "http://p2.music.126.net/rseQHt6MVwmyLMpY_f5bOQ==/131941395346293.jpg",
- "published": "2007-10-11",
- "published_at": 1192118400000,
- "company": "华纳音乐"
- },
- "duration": 216613,
- "duration_desc": "3:36",
- "popularity": 100,
- "score": 100,
- "fee": 0,
- "status": 0,
- "mb": {
- "sq": {
- "size": 23196782,
- "size_desc": "23.2 MB",
- "bitrate": 856705,
- "extension": "flac"
- },
- "hq": {
- "size": 8667472,
- "size_desc": "8.67 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5200501,
- "size_desc": "5.2 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3467015,
- "size_desc": "3.47 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=109196"
- },
- {
- "id": 167942,
- "rank": 29,
- "rank_name": "飙升榜",
- "title": "王妃",
- "artist": [
- {
- "id": 5768,
- "name": "萧敬腾",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=5768"
- }
- ],
- "album": {
- "id": 16961,
- "name": "王妃",
- "cover": "http://p2.music.126.net/Ewy0QAwwv6gXxszRn1KNpQ==/109951168271412207.jpg",
- "published": "2009-07-16",
- "published_at": 1247760000000,
- "company": "华纳音乐"
- },
- "duration": 221760,
- "duration_desc": "3:41",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 29095408,
- "size_desc": "29.1 MB",
- "bitrate": 1049617,
- "extension": "flac"
- },
- "hq": {
- "size": 8873317,
- "size_desc": "8.87 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5324008,
- "size_desc": "5.32 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3549353,
- "size_desc": "3.55 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=167942"
- },
- {
- "id": 2738583947,
- "rank": 30,
- "rank_name": "飙升榜",
- "title": "Happy Hare",
- "artist": [
- {
- "id": 97654074,
- "name": "X Chamber",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=97654074"
- }
- ],
- "album": {
- "id": 282405671,
- "name": "Happy Hare",
- "cover": "http://p2.music.126.net/ctQm9kmi8CjooxADvLyMQA==/109951171908403517.jpg",
- "published": "2025-08-20",
- "published_at": 1755705600000,
- "company": ""
- },
- "duration": 96190,
- "duration_desc": "1:36",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 20048170,
- "size_desc": "20.05 MB",
- "bitrate": 1667227,
- "extension": "flac"
- },
- "hq": {
- "size": 3850493,
- "size_desc": "3.85 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 2310313,
- "size_desc": "2.31 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 1540223,
- "size_desc": "1.54 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738583947"
- },
- {
- "id": 2735962127,
- "rank": 31,
- "rank_name": "飙升榜",
- "title": "放大",
- "artist": [
- {
- "id": 49844742,
- "name": "徐子未",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=49844742"
- }
- ],
- "album": {
- "id": 281446148,
- "name": "放大",
- "cover": "http://p2.music.126.net/WBbtAlKQBRgItkpbzUXa1w==/109951171856097610.jpg",
- "published": "2025-08-15",
- "published_at": 1755273600000,
- "company": "索尼音乐"
- },
- "duration": 205200,
- "duration_desc": "3:25",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 23835315,
- "size_desc": "23.84 MB",
- "bitrate": 929104,
- "extension": "flac"
- },
- "hq": {
- "size": 8209965,
- "size_desc": "8.21 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4925997,
- "size_desc": "4.93 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3284013,
- "size_desc": "3.28 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2735962127"
- },
- {
- "id": 2738719308,
- "rank": 32,
- "rank_name": "飙升榜",
- "title": "骑士",
- "artist": [
- {
- "id": 27730224,
- "name": "回春丹",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=27730224"
- }
- ],
- "album": {
- "id": 282452357,
- "name": "大把时间璀璨",
- "cover": "http://p2.music.126.net/_gJgbfqTgWH2T1vk1Br1ig==/109951171911478103.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": "池沼版全"
- },
- "duration": 205376,
- "duration_desc": "3:25",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 24969418,
- "size_desc": "24.97 MB",
- "bitrate": 972482,
- "extension": "flac"
- },
- "hq": {
- "size": 8217645,
- "size_desc": "8.22 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4930605,
- "size_desc": "4.93 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3287085,
- "size_desc": "3.29 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738719308"
- },
- {
- "id": 2162160807,
- "rank": 33,
- "rank_name": "飙升榜",
- "title": "NEXT!",
- "artist": [
- {
- "id": 54842340,
- "name": "NCTS",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=54842340"
- }
- ],
- "album": {
- "id": 198075556,
- "name": "NEXT!",
- "cover": "http://p2.music.126.net/W4C4eI4EAE4dXwtZAeZv8Q==/109951169644186817.jpg",
- "published": "2024-06-06",
- "published_at": 1717689600000,
- "company": "broke"
- },
- "duration": 99692,
- "duration_desc": "1:39",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 12133996,
- "size_desc": "12.13 MB",
- "bitrate": 973715,
- "extension": "flac"
- },
- "hq": {
- "size": 3990509,
- "size_desc": "3.99 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 2394323,
- "size_desc": "2.39 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 1596230,
- "size_desc": "1.6 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2162160807"
- },
- {
- "id": 2099778087,
- "rank": 34,
- "rank_name": "飙升榜",
- "title": "发迹",
- "artist": [
- {
- "id": 49141872,
- "name": "Top Barry",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=49141872"
- }
- ],
- "album": {
- "id": 179034955,
- "name": "发迹",
- "cover": "http://p2.music.126.net/WKf8wp_58LjK2I2EA1gKjQ==/109951169055625483.jpg",
- "published": "2023-11-14",
- "published_at": 1699977600000,
- "company": ""
- },
- "duration": 162304,
- "duration_desc": "2:42",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 16266288,
- "size_desc": "16.27 MB",
- "bitrate": 801764,
- "extension": "flac"
- },
- "hq": {
- "size": 6494445,
- "size_desc": "6.49 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3896685,
- "size_desc": "3.9 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2597805,
- "size_desc": "2.6 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2099778087"
- },
- {
- "id": 2738719309,
- "rank": 35,
- "rank_name": "飙升榜",
- "title": "梦蝶",
- "artist": [
- {
- "id": 27730224,
- "name": "回春丹",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=27730224"
- }
- ],
- "album": {
- "id": 282452357,
- "name": "大把时间璀璨",
- "cover": "http://p2.music.126.net/_gJgbfqTgWH2T1vk1Br1ig==/109951171911478103.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": "池沼版全"
- },
- "duration": 239939,
- "duration_desc": "3:59",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 32723142,
- "size_desc": "32.72 MB",
- "bitrate": 1090898,
- "extension": "flac"
- },
- "hq": {
- "size": 9600045,
- "size_desc": "9.6 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5760045,
- "size_desc": "5.76 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3840045,
- "size_desc": "3.84 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738719309"
- },
- {
- "id": 2740511420,
- "rank": 36,
- "rank_name": "飙升榜",
- "title": "WANTCHU (94bpm)",
- "artist": [
- {
- "id": 12544511,
- "name": "keshi",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12544511"
- }
- ],
- "album": {
- "id": 283084927,
- "name": "WANTCHU (94bpm)",
- "cover": "http://p2.music.126.net/6EQM-q53CjlapnKMTOSyKQ==/109951171937786942.jpg",
- "published": "2025-08-26",
- "published_at": 1756224000000,
- "company": "Island Records"
- },
- "duration": 254873,
- "duration_desc": "4:14",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 29015872,
- "size_desc": "29.02 MB",
- "bitrate": 910607,
- "extension": "flac"
- },
- "hq": {
- "size": 10197203,
- "size_desc": "10.2 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6118339,
- "size_desc": "6.12 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4078907,
- "size_desc": "4.08 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2740511420"
- },
- {
- "id": 2729743751,
- "rank": 37,
- "rank_name": "飙升榜",
- "title": "Dreamin",
- "artist": [
- {
- "id": 51253492,
- "name": "穆祉丞",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=51253492"
- }
- ],
- "album": {
- "id": 279543769,
- "name": "Dreamin",
- "cover": "http://p2.music.126.net/X0NUwa8wMffZGXoPZtNpsA==/109951171517669783.jpg",
- "published": "2025-07-27",
- "published_at": 1753632000000,
- "company": "北京时代峰峻文化艺术发展有限公司"
- },
- "duration": 136944,
- "duration_desc": "2:16",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 19166561,
- "size_desc": "19.17 MB",
- "bitrate": 1119520,
- "extension": "flac"
- },
- "hq": {
- "size": 5480685,
- "size_desc": "5.48 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3288429,
- "size_desc": "3.29 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2192301,
- "size_desc": "2.19 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2729743751"
- },
- {
- "id": 2729689943,
- "rank": 38,
- "rank_name": "飙升榜",
- "title": "为时已晚(越大越觉孤单)",
- "artist": [
- {
- "id": 58568204,
- "name": "管小天",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=58568204"
- }
- ],
- "album": {
- "id": 279534034,
- "name": "为时已晚",
- "cover": "http://p2.music.126.net/xSs5l9BWlKJGqXdH3SW_oA==/109951171516866306.jpg",
- "published": "2025-07-24",
- "published_at": 1753372800000,
- "company": "看见音乐"
- },
- "duration": 204218,
- "duration_desc": "3:24",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 18189938,
- "size_desc": "18.19 MB",
- "bitrate": 712421,
- "extension": "flac"
- },
- "hq": {
- "size": 8171146,
- "size_desc": "8.17 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4902705,
- "size_desc": "4.9 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3268484,
- "size_desc": "3.27 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2729689943"
- },
- {
- "id": 2736196294,
- "rank": 39,
- "rank_name": "飙升榜",
- "title": "你啊你,我的心",
- "artist": [
- {
- "id": 37092139,
- "name": "babychair",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=37092139"
- },
- {
- "id": 12789956,
- "name": "陈婧霏",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12789956"
- }
- ],
- "album": {
- "id": 281535136,
- "name": "你啊你,我的心",
- "cover": "http://p2.music.126.net/zWRB5KYDrulefgh_FVzIfw==/109951171865682128.jpg",
- "published": "2025-08-18",
- "published_at": 1755532800000,
- "company": "网易云音乐|网易音乐人 x 中国数字音乐基地"
- },
- "duration": 199621,
- "duration_desc": "3:19",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 17022552,
- "size_desc": "17.02 MB",
- "bitrate": 682047,
- "extension": "flac"
- },
- "hq": {
- "size": 7987245,
- "size_desc": "7.99 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4792365,
- "size_desc": "4.79 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3194925,
- "size_desc": "3.19 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2736196294"
- },
- {
- "id": 27955654,
- "rank": 40,
- "rank_name": "飙升榜",
- "title": "其实",
- "artist": [
- {
- "id": 5781,
- "name": "薛之谦",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=5781"
- }
- ],
- "album": {
- "id": 2681139,
- "name": "意外",
- "cover": "http://p2.music.126.net/ywVjRpbu9KpcBQh9KJz2HA==/109951164499974026.jpg",
- "published": "2013-11-10",
- "published_at": 1384099200000,
- "company": "潮石音乐"
- },
- "duration": 242146,
- "duration_desc": "4:02",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 23339701,
- "size_desc": "23.34 MB",
- "bitrate": 771093,
- "extension": "flac"
- },
- "hq": {
- "size": 9688338,
- "size_desc": "9.69 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 5813020,
- "size_desc": "5.81 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3875361,
- "size_desc": "3.88 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=27955654"
- },
- {
- "id": 2738459901,
- "rank": 41,
- "rank_name": "飙升榜",
- "title": "空心人札记",
- "artist": [
- {
- "id": 98856697,
- "name": "Calia-林焰",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=98856697"
- },
- {
- "id": 12046092,
- "name": "星尘",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12046092"
- }
- ],
- "album": {
- "id": 282297325,
- "name": "空心人札记",
- "cover": "http://p2.music.126.net/7pZP5egJfBxAnJ1xZNdhXg==/109951171906929489.jpg",
- "published": "2025-08-19",
- "published_at": 1755619200000,
- "company": ""
- },
- "duration": 178909,
- "duration_desc": "2:58",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 22224636,
- "size_desc": "22.22 MB",
- "bitrate": 993636,
- "extension": "flac"
- },
- "hq": {
- "size": 7158765,
- "size_desc": "7.16 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4295277,
- "size_desc": "4.3 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2863533,
- "size_desc": "2.86 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738459901"
- },
- {
- "id": 2721839629,
- "rank": 42,
- "rank_name": "飙升榜",
- "title": "Velvet Horizon/天鹅绒地平线",
- "artist": [
- {
- "id": 97183508,
- "name": "朱砂未央",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=97183508"
- }
- ],
- "album": {
- "id": 275635771,
- "name": "Eternal Echoes",
- "cover": "http://p2.music.126.net/RxQ2ueBidRYZBCtQTXJdLw==/109951171331877000.jpg",
- "published": "2025-06-18",
- "published_at": 1750262400000,
- "company": ""
- },
- "duration": 203149,
- "duration_desc": "3:23",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 20906818,
- "size_desc": "20.91 MB",
- "bitrate": 823160,
- "extension": "flac"
- },
- "hq": {
- "size": 8128365,
- "size_desc": "8.13 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4877037,
- "size_desc": "4.88 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3251373,
- "size_desc": "3.25 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2721839629"
- },
- {
- "id": 63574,
- "rank": 43,
- "rank_name": "飙升榜",
- "title": "背叛",
- "artist": [
- {
- "id": 2110,
- "name": "曹格",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=2110"
- }
- ],
- "album": {
- "id": 6295,
- "name": "Superman",
- "cover": "http://p2.music.126.net/eDinSMXNYMZHP9nAZ_sQkw==/48378511634444.jpg",
- "published": "2006-12-26",
- "published_at": 1167148800000,
- "company": "滚石唱片"
- },
- "duration": 321629,
- "duration_desc": "5:21",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 34294620,
- "size_desc": "34.29 MB",
- "bitrate": 853022,
- "extension": "flac"
- },
- "hq": {
- "size": 12867962,
- "size_desc": "12.87 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 7720795,
- "size_desc": "7.72 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 5147211,
- "size_desc": "5.15 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=63574"
- },
- {
- "id": 2738719310,
- "rank": 44,
- "rank_name": "飙升榜",
- "title": "福寿螺",
- "artist": [
- {
- "id": 27730224,
- "name": "回春丹",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=27730224"
- }
- ],
- "album": {
- "id": 282452357,
- "name": "大把时间璀璨",
- "cover": "http://p2.music.126.net/_gJgbfqTgWH2T1vk1Br1ig==/109951171911478103.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": "池沼版全"
- },
- "duration": 171106,
- "duration_desc": "2:51",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 22295052,
- "size_desc": "22.3 MB",
- "bitrate": 1042244,
- "extension": "flac"
- },
- "hq": {
- "size": 6846765,
- "size_desc": "6.85 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4108077,
- "size_desc": "4.11 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 2738733,
- "size_desc": "2.74 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738719310"
- },
- {
- "id": 2730270719,
- "rank": 45,
- "rank_name": "飙升榜",
- "title": "Hollow",
- "artist": [
- {
- "id": 1132066,
- "name": "Fayzz",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1132066"
- }
- ],
- "album": {
- "id": 279675457,
- "name": "Patch",
- "cover": "http://p2.music.126.net/AmLRTNKjHJwOo11jlQX0lw==/109951171525802692.jpg",
- "published": "2025-08-04",
- "published_at": 1754323200000,
- "company": "HIFIVE"
- },
- "duration": 360000,
- "duration_desc": "6:00",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 44161333,
- "size_desc": "44.16 MB",
- "bitrate": 981217,
- "extension": "flac"
- },
- "hq": {
- "size": 14401965,
- "size_desc": "14.4 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 8641197,
- "size_desc": "8.64 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 5760813,
- "size_desc": "5.76 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2730270719"
- },
- {
- "id": 2738719307,
- "rank": 46,
- "rank_name": "飙升榜",
- "title": "降临",
- "artist": [
- {
- "id": 27730224,
- "name": "回春丹",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=27730224"
- }
- ],
- "album": {
- "id": 282452357,
- "name": "大把时间璀璨",
- "cover": "http://p2.music.126.net/_gJgbfqTgWH2T1vk1Br1ig==/109951171911478103.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": "池沼版全"
- },
- "duration": 330139,
- "duration_desc": "5:30",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 41595472,
- "size_desc": "41.6 MB",
- "bitrate": 1007803,
- "extension": "flac"
- },
- "hq": {
- "size": 13207725,
- "size_desc": "13.21 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 7924653,
- "size_desc": "7.92 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 5283117,
- "size_desc": "5.28 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738719307"
- },
- {
- "id": 2730270717,
- "rank": 47,
- "rank_name": "飙升榜",
- "title": "隐藏(Hide)",
- "artist": [
- {
- "id": 1132066,
- "name": "Fayzz",
- "cover": "http://p2.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1132066"
- }
- ],
- "album": {
- "id": 279675457,
- "name": "Patch",
- "cover": "http://p1.music.126.net/AmLRTNKjHJwOo11jlQX0lw==/109951171525802692.jpg",
- "published": "2025-08-04",
- "published_at": 1754323200000,
- "company": "HIFIVE"
- },
- "duration": 306000,
- "duration_desc": "5:06",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 31438598,
- "size_desc": "31.44 MB",
- "bitrate": 821778,
- "extension": "flac"
- },
- "hq": {
- "size": 12241965,
- "size_desc": "12.24 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 7345197,
- "size_desc": "7.35 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 4896813,
- "size_desc": "4.9 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2730270717"
- },
- {
- "id": 413812470,
- "rank": 48,
- "rank_name": "飙升榜",
- "title": "One More Time",
- "artist": [
- {
- "id": 29959,
- "name": "Craig David",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=29959"
- }
- ],
- "album": {
- "id": 34701579,
- "name": "One More Time",
- "cover": "http://p1.music.126.net/yGOnOKbJYXd7O_h0Ns_W_w==/1390882218000288.jpg",
- "published": "2016-05-19",
- "published_at": 1463673600007,
- "company": "索尼音乐"
- },
- "duration": 194520,
- "duration_desc": "3:14",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 40301209,
- "size_desc": "40.3 MB",
- "bitrate": 1657462,
- "extension": "flac"
- },
- "hq": {
- "size": 7783489,
- "size_desc": "7.78 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4670111,
- "size_desc": "4.67 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3113422,
- "size_desc": "3.11 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=413812470"
- },
- {
- "id": 2740182817,
- "rank": 49,
- "rank_name": "飙升榜",
- "title": "暗码",
- "artist": [
- {
- "id": 12236269,
- "name": "高天佐",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12236269"
- },
- {
- "id": 12085066,
- "name": "ZIV",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12085066"
- }
- ],
- "album": {
- "id": 282953625,
- "name": "暗码",
- "cover": "http://p1.music.126.net/zUqNfcfmNePSEazkOt9KXg==/109951171933460415.jpg",
- "published": "2025-08-27",
- "published_at": 1756310400000,
- "company": ""
- },
- "duration": 186838,
- "duration_desc": "3:06",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 22486402,
- "size_desc": "22.49 MB",
- "bitrate": 962670,
- "extension": "flac"
- },
- "hq": {
- "size": 7475565,
- "size_desc": "7.48 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4485357,
- "size_desc": "4.49 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2990253,
- "size_desc": "2.99 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2740182817"
- },
- {
- "id": 2735983727,
- "rank": 50,
- "rank_name": "飙升榜",
- "title": "光影戒断反应.wav",
- "artist": [
- {
- "id": 99613013,
- "name": "云落",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=99613013"
- }
- ],
- "album": {
- "id": 281406500,
- "name": "光影戒断反应",
- "cover": "http://p1.music.126.net/BZYzH0ODE-ypCtJvC6_x7w==/109951171857042141.jpg",
- "published": "2025-08-12",
- "published_at": 1755014400000,
- "company": ""
- },
- "duration": 275439,
- "duration_desc": "4:35",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 31477192,
- "size_desc": "31.48 MB",
- "bitrate": 914091,
- "extension": "flac"
- },
- "hq": {
- "size": 11019885,
- "size_desc": "11.02 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6611949,
- "size_desc": "6.61 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4407981,
- "size_desc": "4.41 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2735983727"
- },
- {
- "id": 2738715963,
- "rank": 51,
- "rank_name": "飙升榜",
- "title": "宝藏",
- "artist": [
- {
- "id": 27730224,
- "name": "回春丹",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=27730224"
- }
- ],
- "album": {
- "id": 282452357,
- "name": "大把时间璀璨",
- "cover": "http://p1.music.126.net/_gJgbfqTgWH2T1vk1Br1ig==/109951171911478103.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": "池沼版全"
- },
- "duration": 174001,
- "duration_desc": "2:54",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 23432952,
- "size_desc": "23.43 MB",
- "bitrate": 1077220,
- "extension": "flac"
- },
- "hq": {
- "size": 6962925,
- "size_desc": "6.96 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4177773,
- "size_desc": "4.18 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 2785197,
- "size_desc": "2.79 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738715963"
- },
- {
- "id": 2730600192,
- "rank": 52,
- "rank_name": "飙升榜",
- "title": "Out of my system",
- "artist": [
- {
- "id": 95288932,
- "name": "Nia Nkuna",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=95288932"
- }
- ],
- "album": {
- "id": 279776498,
- "name": "Mixed signals",
- "cover": "http://p1.music.126.net/ulsDcoiZogmbQ96YccOp3g==/109951171529990940.jpg",
- "published": "2025-08-06",
- "published_at": 1754496000000,
- "company": "7296470 Records DK2"
- },
- "duration": 211039,
- "duration_desc": "3:31",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 26480510,
- "size_desc": "26.48 MB",
- "bitrate": 1003662,
- "extension": "flac"
- },
- "hq": {
- "size": 8444205,
- "size_desc": "8.44 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 5066541,
- "size_desc": "5.07 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3377709,
- "size_desc": "3.38 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2730600192"
- },
- {
- "id": 2739853860,
- "rank": 53,
- "rank_name": "飙升榜",
- "title": "幻想彼岸",
- "artist": [
- {
- "id": 95441940,
- "name": "Tekoo",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=95441940"
- },
- {
- "id": 29303235,
- "name": "PSY.P",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=29303235"
- }
- ],
- "album": {
- "id": 282839523,
- "name": "幻想彼岸",
- "cover": "http://p1.music.126.net/Gi4zmlg7bemQ7_TG5QLI0w==/109951171928760549.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": ""
- },
- "duration": 154532,
- "duration_desc": "2:34",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 15954957,
- "size_desc": "15.95 MB",
- "bitrate": 825824,
- "extension": "flac"
- },
- "hq": {
- "size": 6183405,
- "size_desc": "6.18 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3710061,
- "size_desc": "3.71 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2473389,
- "size_desc": "2.47 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2739853860"
- },
- {
- "id": 2715139032,
- "rank": 54,
- "rank_name": "飙升榜",
- "title": "Got It Now (Phonk)",
- "artist": [
- {
- "id": 52436538,
- "name": "YaKio",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=52436538"
- },
- {
- "id": 96953508,
- "name": "Wehti",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=96953508"
- },
- {
- "id": 48853047,
- "name": "VZEUS",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=48853047"
- },
- {
- "id": 48855131,
- "name": "离离离",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=48855131"
- }
- ],
- "album": {
- "id": 275048395,
- "name": "Got It Now (Phonk)",
- "cover": "http://p1.music.126.net/zmottkLtPAA6_xz4ywWXhA==/109951171301374976.jpg",
- "published": "2025-06-12",
- "published_at": 1749744000000,
- "company": ""
- },
- "duration": 113170,
- "duration_desc": "1:53",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 13958890,
- "size_desc": "13.96 MB",
- "bitrate": 986598,
- "extension": "flac"
- },
- "hq": {
- "size": 4529676,
- "size_desc": "4.53 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 2717823,
- "size_desc": "2.72 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 1811897,
- "size_desc": "1.81 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2715139032"
- },
- {
- "id": 2730268845,
- "rank": 55,
- "rank_name": "飙升榜",
- "title": "Intro",
- "artist": [
- {
- "id": 1132066,
- "name": "Fayzz",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1132066"
- }
- ],
- "album": {
- "id": 279675457,
- "name": "Patch",
- "cover": "http://p1.music.126.net/AmLRTNKjHJwOo11jlQX0lw==/109951171525802692.jpg",
- "published": "2025-08-04",
- "published_at": 1754323200000,
- "company": "HIFIVE"
- },
- "duration": 122000,
- "duration_desc": "2:02",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 11610545,
- "size_desc": "11.61 MB",
- "bitrate": 761197,
- "extension": "flac"
- },
- "hq": {
- "size": 4882605,
- "size_desc": "4.88 MB",
- "bitrate": 320003,
- "extension": "mp3"
- },
- "mq": {
- "size": 2929581,
- "size_desc": "2.93 MB",
- "bitrate": 192003,
- "extension": "mp3"
- },
- "lq": {
- "size": 1953069,
- "size_desc": "1.95 MB",
- "bitrate": 128003,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2730268845"
- },
- {
- "id": 2730268846,
- "rank": 56,
- "rank_name": "飙升榜",
- "title": "Forlorn Hope",
- "artist": [
- {
- "id": 1132066,
- "name": "Fayzz",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1132066"
- }
- ],
- "album": {
- "id": 279675457,
- "name": "Patch",
- "cover": "http://p1.music.126.net/AmLRTNKjHJwOo11jlQX0lw==/109951171525802692.jpg",
- "published": "2025-08-04",
- "published_at": 1754323200000,
- "company": "HIFIVE"
- },
- "duration": 371000,
- "duration_desc": "6:11",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 47693449,
- "size_desc": "47.69 MB",
- "bitrate": 1028284,
- "extension": "flac"
- },
- "hq": {
- "size": 14842605,
- "size_desc": "14.84 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 8905581,
- "size_desc": "8.91 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 5937069,
- "size_desc": "5.94 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2730268846"
- },
- {
- "id": 2739834858,
- "rank": 57,
- "rank_name": "飙升榜",
- "title": "调色板",
- "artist": [
- {
- "id": 37334229,
- "name": "Sasuke",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=37334229"
- }
- ],
- "album": {
- "id": 282832994,
- "name": "调色板",
- "cover": "http://p1.music.126.net/F2fIIywgZ-U8-jGQnlWj-A==/109951171928465892.jpg",
- "published": "2025-08-25",
- "published_at": 1756137600000,
- "company": ""
- },
- "duration": 176206,
- "duration_desc": "2:56",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 21253895,
- "size_desc": "21.25 MB",
- "bitrate": 964805,
- "extension": "flac"
- },
- "hq": {
- "size": 7050285,
- "size_desc": "7.05 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4230189,
- "size_desc": "4.23 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2820141,
- "size_desc": "2.82 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2739834858"
- },
- {
- "id": 2605650585,
- "rank": 58,
- "rank_name": "飙升榜",
- "title": "Baigasai 想要有你在",
- "artist": [
- {
- "id": 31001926,
- "name": "Bohbat",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=31001926"
- },
- {
- "id": 94228106,
- "name": "Suie",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=94228106"
- },
- {
- "id": 34279887,
- "name": "布和都古仁",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=34279887"
- }
- ],
- "album": {
- "id": 241400517,
- "name": "Baigasai(想要有你在)",
- "cover": "http://p1.music.126.net/zA3k1aD3PRCDnmSI9zDqsw==/109951169757659301.jpg",
- "published": "2024-07-06",
- "published_at": 1720281600000,
- "company": ""
- },
- "duration": 170623,
- "duration_desc": "2:50",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 17200040,
- "size_desc": "17.2 MB",
- "bitrate": 806455,
- "extension": "flac"
- },
- "hq": {
- "size": 6827565,
- "size_desc": "6.83 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4096557,
- "size_desc": "4.1 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2731053,
- "size_desc": "2.73 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2605650585"
- },
- {
- "id": 2730270720,
- "rank": 59,
- "rank_name": "飙升榜",
- "title": "季风(Monsoon)",
- "artist": [
- {
- "id": 1132066,
- "name": "Fayzz",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1132066"
- }
- ],
- "album": {
- "id": 279675457,
- "name": "Patch",
- "cover": "http://p1.music.126.net/AmLRTNKjHJwOo11jlQX0lw==/109951171525802692.jpg",
- "published": "2025-08-04",
- "published_at": 1754323200000,
- "company": "HIFIVE"
- },
- "duration": 279500,
- "duration_desc": "4:39",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 34576225,
- "size_desc": "34.58 MB",
- "bitrate": 989513,
- "extension": "flac"
- },
- "hq": {
- "size": 11182125,
- "size_desc": "11.18 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6709293,
- "size_desc": "6.71 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4472877,
- "size_desc": "4.47 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2730270720"
- },
- {
- "id": 167655,
- "rank": 60,
- "rank_name": "飙升榜",
- "title": "幻听",
- "artist": [
- {
- "id": 5771,
- "name": "许嵩",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=5771"
- }
- ],
- "album": {
- "id": 16932,
- "name": "梦游计",
- "cover": "http://p1.music.126.net/IYgyEjL7w4xwPfyNDw8OzA==/109951169525619688.jpg",
- "published": "2012-07-10",
- "published_at": 1341936000000,
- "company": "海蝶"
- },
- "duration": 273266,
- "duration_desc": "4:33",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 26751365,
- "size_desc": "26.75 MB",
- "bitrate": 783157,
- "extension": "flac"
- },
- "hq": {
- "size": 10932811,
- "size_desc": "10.93 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6559704,
- "size_desc": "6.56 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4373151,
- "size_desc": "4.37 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=167655"
- },
- {
- "id": 642723,
- "rank": 61,
- "rank_name": "飙升榜",
- "title": "17",
- "artist": [
- {
- "id": 17635,
- "name": "椎名林檎",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=17635"
- }
- ],
- "album": {
- "id": 61637,
- "name": "罪と罰",
- "cover": "http://p1.music.126.net/W3zh73z9SEOVx4IugvgQ-g==/109951163318826464.jpg",
- "published": "2000-01-25",
- "published_at": 948816000000,
- "company": "Universal Music LLC"
- },
- "duration": 272625,
- "duration_desc": "4:32",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 59365794,
- "size_desc": "59.37 MB",
- "bitrate": 1742046,
- "extension": "flac"
- },
- "hq": {
- "size": 10907733,
- "size_desc": "10.91 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6544657,
- "size_desc": "6.54 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4363119,
- "size_desc": "4.36 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=642723"
- },
- {
- "id": 429348598,
- "rank": 62,
- "rank_name": "飙升榜",
- "title": "沦陷",
- "artist": [
- {
- "id": 1081293,
- "name": "李嘉格",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1081293"
- }
- ],
- "album": {
- "id": 34841497,
- "name": "四格",
- "cover": "http://p1.music.126.net/svLJT1S1O0DXHRIghiuJyg==/18599338695655987.jpg",
- "published": "2016-03-01",
- "published_at": 1456848000000,
- "company": "梦响当然"
- },
- "duration": 258933,
- "duration_desc": "4:18",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 30269959,
- "size_desc": "30.27 MB",
- "bitrate": 935220,
- "extension": "flac"
- },
- "hq": {
- "size": 10360207,
- "size_desc": "10.36 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6216142,
- "size_desc": "6.22 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4144109,
- "size_desc": "4.14 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=429348598"
- },
- {
- "id": 2678794854,
- "rank": 63,
- "rank_name": "飙升榜",
- "title": "MISERICÓRDIA GALLARDO",
- "artist": [
- {
- "id": 34342469,
- "name": "Prompto",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=34342469"
- }
- ],
- "album": {
- "id": 264022495,
- "name": "MISERICÓRDIA GALLARDO",
- "cover": "http://p1.music.126.net/JJYwOODi3m-YkPwAXeeiFA==/109951170518532282.jpg",
- "published": "2025-03-06",
- "published_at": 1741276800000,
- "company": "Prompto Productions"
- },
- "duration": 96000,
- "duration_desc": "1:36",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 11096948,
- "size_desc": "11.1 MB",
- "bitrate": 924594,
- "extension": "flac"
- },
- "hq": {
- "size": 3841965,
- "size_desc": "3.84 MB",
- "bitrate": 320004,
- "extension": "mp3"
- },
- "mq": {
- "size": 2305197,
- "size_desc": "2.31 MB",
- "bitrate": 192004,
- "extension": "mp3"
- },
- "lq": {
- "size": 1536813,
- "size_desc": "1.54 MB",
- "bitrate": 128004,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2678794854"
- },
- {
- "id": 1859339684,
- "rank": 64,
- "rank_name": "飙升榜",
- "title": "般配",
- "artist": [
- {
- "id": 12471927,
- "name": "江皓南",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12471927"
- }
- ],
- "album": {
- "id": 130039504,
- "name": "般配",
- "cover": "http://p1.music.126.net/_8D98wTjXWMhYl5Bofui0w==/109951166155884642.jpg",
- "published": "2021-07-09",
- "published_at": 1625846400000,
- "company": ""
- },
- "duration": 181500,
- "duration_desc": "3:01",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 37682299,
- "size_desc": "37.68 MB",
- "bitrate": 1660927,
- "extension": "flac"
- },
- "hq": {
- "size": 7263129,
- "size_desc": "7.26 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4357895,
- "size_desc": "4.36 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2905278,
- "size_desc": "2.91 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=1859339684"
- },
- {
- "id": 2730270721,
- "rank": 65,
- "rank_name": "飙升榜",
- "title": "Distance",
- "artist": [
- {
- "id": 1132066,
- "name": "Fayzz",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1132066"
- }
- ],
- "album": {
- "id": 279675457,
- "name": "Patch",
- "cover": "http://p1.music.126.net/AmLRTNKjHJwOo11jlQX0lw==/109951171525802692.jpg",
- "published": "2025-08-04",
- "published_at": 1754323200000,
- "company": "HIFIVE"
- },
- "duration": 301250,
- "duration_desc": "5:01",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 31481807,
- "size_desc": "31.48 MB",
- "bitrate": 835885,
- "extension": "flac"
- },
- "hq": {
- "size": 12052845,
- "size_desc": "12.05 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 7231725,
- "size_desc": "7.23 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4821165,
- "size_desc": "4.82 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2730270721"
- },
- {
- "id": 1919524295,
- "rank": 66,
- "rank_name": "飙升榜",
- "title": "问情",
- "artist": [
- {
- "id": 29234568,
- "name": "陈亦洺",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=29234568"
- },
- {
- "id": 13699766,
- "name": "尚辰",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=13699766"
- }
- ],
- "album": {
- "id": 140260623,
- "name": "问情",
- "cover": "http://p1.music.126.net/6_Skolb_X075lr2gSwQNew==/109951167039546994.jpg",
- "published": "2022-02-15",
- "published_at": 1644940800000,
- "company": "雪球音乐"
- },
- "duration": 247134,
- "duration_desc": "4:07",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 31029712,
- "size_desc": "31.03 MB",
- "bitrate": 1004465,
- "extension": "flac"
- },
- "hq": {
- "size": 9887913,
- "size_desc": "9.89 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 5932765,
- "size_desc": "5.93 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 3955191,
- "size_desc": "3.96 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=1919524295"
- },
- {
- "id": 2600493765,
- "rank": 67,
- "rank_name": "飙升榜",
- "title": "恋人",
- "artist": [
- {
- "id": 4292,
- "name": "李荣浩",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=4292"
- }
- ],
- "album": {
- "id": 250748750,
- "name": "黑马",
- "cover": "http://p1.music.126.net/0bk3Iqe2OZGBH2Iuyx7RzA==/109951170045577565.jpg",
- "published": "2024-10-17",
- "published_at": 1729180800000,
- "company": "一样音乐"
- },
- "duration": 275912,
- "duration_desc": "4:35",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 30058936,
- "size_desc": "30.06 MB",
- "bitrate": 871549,
- "extension": "flac"
- },
- "hq": {
- "size": 11039085,
- "size_desc": "11.04 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6623469,
- "size_desc": "6.62 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4415661,
- "size_desc": "4.42 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2600493765"
- },
- {
- "id": 1893505014,
- "rank": 68,
- "rank_name": "飙升榜",
- "title": "年轮说",
- "artist": [
- {
- "id": 10199,
- "name": "杨丞琳",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=10199"
- }
- ],
- "album": {
- "id": 135874294,
- "name": "20首華語重溫經典",
- "cover": "http://p1.music.126.net/3Ao29M_Bk9wuMe6Zq6mU2w==/109951168278832954.jpg",
- "published": "2021-11-07",
- "published_at": 1636300800000,
- "company": "UME - Global Clearing House"
- },
- "duration": 266452,
- "duration_desc": "4:26",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 26845620,
- "size_desc": "26.85 MB",
- "bitrate": 806014,
- "extension": "flac"
- },
- "hq": {
- "size": 10661138,
- "size_desc": "10.66 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6396700,
- "size_desc": "6.4 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4264481,
- "size_desc": "4.26 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=1893505014"
- },
- {
- "id": 209923,
- "rank": 69,
- "rank_name": "飙升榜",
- "title": "Love Love Love",
- "artist": [
- {
- "id": 7219,
- "name": "蔡依林",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=7219"
- }
- ],
- "album": {
- "id": 21343,
- "name": "城堡",
- "cover": "http://p1.music.126.net/lKIkniPBdOWqZzl1yvgz9g==/109951170708258712.jpg",
- "published": "2004-02-26",
- "published_at": 1077811200000,
- "company": "索尼音乐"
- },
- "duration": 229520,
- "duration_desc": "3:49",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 29983141,
- "size_desc": "29.98 MB",
- "bitrate": 1045072,
- "extension": "flac"
- },
- "hq": {
- "size": 9183652,
- "size_desc": "9.18 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5510209,
- "size_desc": "5.51 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3673487,
- "size_desc": "3.67 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=209923"
- },
- {
- "id": 2724694389,
- "rank": 70,
- "rank_name": "飙升榜",
- "title": "背篓少年",
- "artist": [
- {
- "id": 54093175,
- "name": "TCG尹妹",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=54093175"
- }
- ],
- "album": {
- "id": 277990540,
- "name": "背篓少年",
- "cover": "http://p1.music.126.net/ceoHVs2dvrfX50Ka6z2E9A==/109951171443733631.jpg",
- "published": "2025-07-11",
- "published_at": 1752249600000,
- "company": "太合麦田"
- },
- "duration": 153845,
- "duration_desc": "2:33",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 21621158,
- "size_desc": "21.62 MB",
- "bitrate": 1124160,
- "extension": "flac"
- },
- "hq": {
- "size": 6156525,
- "size_desc": "6.16 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3693933,
- "size_desc": "3.69 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2462637,
- "size_desc": "2.46 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2724694389"
- },
- {
- "id": 1407658105,
- "rank": 71,
- "rank_name": "飙升榜",
- "title": "我要找到你",
- "artist": [
- {
- "id": 5998,
- "name": "易泽禹",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=5998"
- }
- ],
- "album": {
- "id": 83891446,
- "name": "我要找到你",
- "cover": "http://p1.music.126.net/mKjg3atpmn9M4J951CiVTA==/109951164528618554.jpg",
- "published": "2019-12-03",
- "published_at": 1575388800000,
- "company": ""
- },
- "duration": 202353,
- "duration_desc": "3:22",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 21975656,
- "size_desc": "21.98 MB",
- "bitrate": 1411000,
- "extension": "flac"
- },
- "hq": {
- "size": 8096958,
- "size_desc": "8.1 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4858192,
- "size_desc": "4.86 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3238809,
- "size_desc": "3.24 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=1407658105"
- },
- {
- "id": 2100282715,
- "rank": 72,
- "rank_name": "飙升榜",
- "title": "歪歪",
- "artist": [
- {
- "id": 37343207,
- "name": "拂言",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=37343207"
- }
- ],
- "album": {
- "id": 179091457,
- "name": "歪歪",
- "cover": "http://p1.music.126.net/G0pr2aux9dzK9hT4-n2n5A==/109951169058424179.jpg",
- "published": "2023-11-15",
- "published_at": 1700064000000,
- "company": ""
- },
- "duration": 167927,
- "duration_desc": "2:47",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 18617591,
- "size_desc": "18.62 MB",
- "bitrate": 886934,
- "extension": "flac"
- },
- "hq": {
- "size": 6719085,
- "size_desc": "6.72 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4031469,
- "size_desc": "4.03 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2687661,
- "size_desc": "2.69 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2100282715"
- },
- {
- "id": 2656356278,
- "rank": 73,
- "rank_name": "飙升榜",
- "title": "HARPY HARE",
- "artist": [
- {
- "id": 59651243,
- "name": "NoAki",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=59651243"
- },
- {
- "id": 12886162,
- "name": "Skyver",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12886162"
- }
- ],
- "album": {
- "id": 256868094,
- "name": "HARPY HARE",
- "cover": "http://p1.music.126.net/y2GIIiHLPFn44tBUGqSBlg==/109951170259120670.jpg",
- "published": "2025-01-09",
- "published_at": 1736438400000,
- "company": "HOUSE OF PHONK"
- },
- "duration": 77619,
- "duration_desc": "1:17",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 10860026,
- "size_desc": "10.86 MB",
- "bitrate": 1119303,
- "extension": "flac"
- },
- "hq": {
- "size": 3107570,
- "size_desc": "3.11 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 1864560,
- "size_desc": "1.86 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 1243054,
- "size_desc": "1.24 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2656356278"
- },
- {
- "id": 2738936457,
- "rank": 74,
- "rank_name": "飙升榜",
- "title": "Can't go back (Live)",
- "artist": [
- {
- "id": 49141872,
- "name": "Top Barry",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=49141872"
- }
- ],
- "album": {
- "id": 281143386,
- "name": "新说唱2025 第十二期",
- "cover": "http://p1.music.126.net/QQsOcKcT6kleCUhIFMn-mg==/109951171834703159.jpg",
- "published": "2025-08-22",
- "published_at": 1755878400000,
- "company": "韶愔音乐娱乐(北京)有限公司"
- },
- "duration": 203999,
- "duration_desc": "3:23",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 22384573,
- "size_desc": "22.38 MB",
- "bitrate": 877679,
- "extension": "flac"
- },
- "hq": {
- "size": 8161965,
- "size_desc": "8.16 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4897197,
- "size_desc": "4.9 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3264813,
- "size_desc": "3.26 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738936457"
- },
- {
- "id": 2739501337,
- "rank": 75,
- "rank_name": "飙升榜",
- "title": "余烬",
- "artist": [
- {
- "id": 48497149,
- "name": "柠安",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=48497149"
- }
- ],
- "album": {
- "id": 282723264,
- "name": "余烬",
- "cover": "http://p1.music.126.net/XXwdSc8kr1b9WNCKI7FKHw==/109951171923938239.jpg",
- "published": "2025-08-24",
- "published_at": 1756051200000,
- "company": ""
- },
- "duration": 161123,
- "duration_desc": "2:41",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": null,
- "hq": {
- "size": 6447064,
- "size_desc": "6.45 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 3868256,
- "size_desc": "3.87 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 2578852,
- "size_desc": "2.58 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2739501337"
- },
- {
- "id": 2715166863,
- "rank": 76,
- "rank_name": "飙升榜",
- "title": "雨会告诉你",
- "artist": [
- {
- "id": 12600046,
- "name": "陈文非",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12600046"
- }
- ],
- "album": {
- "id": 275076578,
- "name": "我在等世界回电",
- "cover": "http://p1.music.126.net/5UG9XVaPOdk7xVMjK6SS5w==/109951171301651895.jpg",
- "published": "2025-06-15",
- "published_at": 1750003200000,
- "company": "海神音乐"
- },
- "duration": 240208,
- "duration_desc": "4:00",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 25879917,
- "size_desc": "25.88 MB",
- "bitrate": 861768,
- "extension": "flac"
- },
- "hq": {
- "size": 9610605,
- "size_desc": "9.61 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5766381,
- "size_desc": "5.77 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3844269,
- "size_desc": "3.84 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2715166863"
- },
- {
- "id": 2114019727,
- "rank": 77,
- "rank_name": "飙升榜",
- "title": "Don't Say Goodbye (Interlude) (feat. Lodoni)",
- "artist": [
- {
- "id": 50848454,
- "name": "thirtykay",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=50848454"
- },
- {
- "id": 49090888,
- "name": "LODONI",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=49090888"
- }
- ],
- "album": {
- "id": 182366445,
- "name": "The Gift of Music",
- "cover": "http://p1.music.126.net/on9kaYplg1ozEBx7Ep3G6g==/109951169232504429.jpg",
- "published": "2023-12-27",
- "published_at": 1703692800000,
- "company": "3377803 Records DK"
- },
- "duration": 149347,
- "duration_desc": "2:29",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 15661502,
- "size_desc": "15.66 MB",
- "bitrate": 838931,
- "extension": "flac"
- },
- "hq": {
- "size": 5976860,
- "size_desc": "5.98 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3586133,
- "size_desc": "3.59 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2390770,
- "size_desc": "2.39 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2114019727"
- },
- {
- "id": 29567193,
- "rank": 78,
- "rank_name": "飙升榜",
- "title": "我们的时光",
- "artist": [
- {
- "id": 6731,
- "name": "赵雷",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=6731"
- }
- ],
- "album": {
- "id": 3048030,
- "name": "吉姆餐厅",
- "cover": "http://p1.music.126.net/pwcUlwh9MFZ_V3hGBOPaCQ==/109951169213425474.jpg",
- "published": "2014-10-18",
- "published_at": 1413648000000,
- "company": "华宇世博"
- },
- "duration": 270746,
- "duration_desc": "4:30",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 28479102,
- "size_desc": "28.48 MB",
- "bitrate": 841498,
- "extension": "flac"
- },
- "hq": {
- "size": 10832501,
- "size_desc": "10.83 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6499518,
- "size_desc": "6.5 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4333026,
- "size_desc": "4.33 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=29567193"
- },
- {
- "id": 2075593054,
- "rank": 79,
- "rank_name": "飙升榜",
- "title": "林宛瑜",
- "artist": [
- {
- "id": 12563131,
- "name": "Rapeter",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12563131"
- }
- ],
- "album": {
- "id": 174245605,
- "name": "DirtyGOOD 装乖",
- "cover": "http://p1.music.126.net/-RYv_KQ7OjQYENoqhoXDmg==/109951168899147692.jpg",
- "published": "2023-09-09",
- "published_at": 1694275200000,
- "company": ""
- },
- "duration": 186109,
- "duration_desc": "3:06",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 19086070,
- "size_desc": "19.09 MB",
- "bitrate": 820423,
- "extension": "flac"
- },
- "hq": {
- "size": 7446765,
- "size_desc": "7.45 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4468077,
- "size_desc": "4.47 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 2978733,
- "size_desc": "2.98 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2075593054"
- },
- {
- "id": 2677400220,
- "rank": 80,
- "rank_name": "飙升榜",
- "title": "NO HOOK FREESTYLE Pt.4",
- "artist": [
- {
- "id": 12563131,
- "name": "Rapeter",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12563131"
- }
- ],
- "album": {
- "id": 263242113,
- "name": "IMGOOD别担心我",
- "cover": "http://p1.music.126.net/QpNRZsfMP5J4tOlziA8Pnw==/109951170504642760.jpg",
- "published": "2025-02-21",
- "published_at": 1740153600000,
- "company": ""
- },
- "duration": 225000,
- "duration_desc": "3:45",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 28370966,
- "size_desc": "28.37 MB",
- "bitrate": 1008598,
- "extension": "flac"
- },
- "hq": {
- "size": 9001965,
- "size_desc": "9 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 5401197,
- "size_desc": "5.4 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3600813,
- "size_desc": "3.6 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2677400220"
- },
- {
- "id": 2736690863,
- "rank": 81,
- "rank_name": "飙升榜",
- "title": "MENTE MA",
- "artist": [
- {
- "id": 48853047,
- "name": "VZEUS",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=48853047"
- }
- ],
- "album": {
- "id": 281730160,
- "name": "MENTA MA",
- "cover": "http://p1.music.126.net/Jv1aVe2po_f2bE50czHSEQ==/109951171874809370.jpg",
- "published": "2025-08-15",
- "published_at": 1755246600000,
- "company": ""
- },
- "duration": 127399,
- "duration_desc": "2:07",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 15420410,
- "size_desc": "15.42 MB",
- "bitrate": 968172,
- "extension": "flac"
- },
- "hq": {
- "size": 5098101,
- "size_desc": "5.1 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3058878,
- "size_desc": "3.06 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2039266,
- "size_desc": "2.04 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2736690863"
- },
- {
- "id": 2735855320,
- "rank": 82,
- "rank_name": "飙升榜",
- "title": "下课钟声",
- "artist": [
- {
- "id": 34094059,
- "name": "关浩德Walter",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=34094059"
- }
- ],
- "album": {
- "id": 281405272,
- "name": "下课钟声",
- "cover": "http://p1.music.126.net/_7Wa7O6fCdlRrNt17RzdAw==/109951171853737963.jpg",
- "published": "2025-08-27",
- "published_at": 1756310400000,
- "company": "StreetVoice/触底而上DTT"
- },
- "duration": 273237,
- "duration_desc": "4:33",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 26949536,
- "size_desc": "26.95 MB",
- "bitrate": 788897,
- "extension": "flac"
- },
- "hq": {
- "size": 10931565,
- "size_desc": "10.93 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6558957,
- "size_desc": "6.56 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4372653,
- "size_desc": "4.37 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2735855320"
- },
- {
- "id": 2717035826,
- "rank": 83,
- "rank_name": "飙升榜",
- "title": "半情歌",
- "artist": [
- {
- "id": 12275767,
- "name": "step.jad依加",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12275767"
- }
- ],
- "album": {
- "id": 275651228,
- "name": "半情歌",
- "cover": "http://p1.music.126.net/ROw9CASwYMvQvuDOH6eVbw==/109951171330027735.jpg",
- "published": "2025-07-14",
- "published_at": 1752508800000,
- "company": "华纳音乐"
- },
- "duration": 214905,
- "duration_desc": "3:34",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 25754214,
- "size_desc": "25.75 MB",
- "bitrate": 958570,
- "extension": "flac"
- },
- "hq": {
- "size": 8598765,
- "size_desc": "8.6 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5159277,
- "size_desc": "5.16 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3439533,
- "size_desc": "3.44 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2717035826"
- },
- {
- "id": 2735409135,
- "rank": 84,
- "rank_name": "飙升榜",
- "title": "ハンドサイン",
- "artist": [
- {
- "id": 27889701,
- "name": "Kizuna AI",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=27889701"
- }
- ],
- "album": {
- "id": 281242596,
- "name": "ハンドサイン",
- "cover": "http://p1.music.126.net/1gnbsJg2rYHalSxBRSReYA==/109951171840112594.jpg",
- "published": "2025-08-19",
- "published_at": 1755619200000,
- "company": "KizunaAI"
- },
- "duration": 238693,
- "duration_desc": "3:58",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 29926707,
- "size_desc": "29.93 MB",
- "bitrate": 1002871,
- "extension": "flac"
- },
- "hq": {
- "size": 9550125,
- "size_desc": "9.55 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5730093,
- "size_desc": "5.73 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3820077,
- "size_desc": "3.82 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2735409135"
- },
- {
- "id": 2082176014,
- "rank": 85,
- "rank_name": "飙升榜",
- "title": "最后的道别",
- "artist": [
- {
- "id": 4464,
- "name": "梁雨",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=4464"
- }
- ],
- "album": {
- "id": 174775874,
- "name": "最后的道别",
- "cover": "http://p1.music.126.net/EeoTFA6yT1e9k89QblcvHQ==/109951168914975164.jpg",
- "published": "2023-09-14",
- "published_at": 1694707200000,
- "company": "淳music"
- },
- "duration": 264444,
- "duration_desc": "4:24",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 34255476,
- "size_desc": "34.26 MB",
- "bitrate": 1036300,
- "extension": "flac"
- },
- "hq": {
- "size": 10580205,
- "size_desc": "10.58 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 6348141,
- "size_desc": "6.35 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 4232109,
- "size_desc": "4.23 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2082176014"
- },
- {
- "id": 2739596293,
- "rank": 86,
- "rank_name": "飙升榜",
- "title": "五千两百遍",
- "artist": [
- {
- "id": 34634779,
- "name": "999PUNKSTA",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=34634779"
- }
- ],
- "album": {
- "id": 282723760,
- "name": "五千两百遍",
- "cover": "http://p1.music.126.net/d2BE2e7gxx0cKvZh3TiOew==/109951171925663378.jpg",
- "published": "2025-08-23",
- "published_at": 1755964800000,
- "company": ""
- },
- "duration": 158261,
- "duration_desc": "2:38",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 30834253,
- "size_desc": "30.83 MB",
- "bitrate": 1558497,
- "extension": "flac"
- },
- "hq": {
- "size": 6333170,
- "size_desc": "6.33 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3799920,
- "size_desc": "3.8 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2533294,
- "size_desc": "2.53 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2739596293"
- },
- {
- "id": 150422,
- "rank": 87,
- "rank_name": "飙升榜",
- "title": "今天你要嫁给我",
- "artist": [
- {
- "id": 7219,
- "name": "蔡依林",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=7219"
- },
- {
- "id": 5196,
- "name": "陶喆",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=5196"
- }
- ],
- "album": {
- "id": 15184,
- "name": "太美丽",
- "cover": "http://p1.music.126.net/Fq9QNt2SYKvPEL3ipfVc9g==/109951166916020363.jpg",
- "published": "2006-08-03",
- "published_at": 1154620800000,
- "company": "华纳音乐"
- },
- "duration": 272066,
- "duration_desc": "4:32",
- "popularity": 100,
- "score": 100,
- "fee": 1,
- "status": 0,
- "mb": {
- "sq": {
- "size": 31284971,
- "size_desc": "31.28 MB",
- "bitrate": 919920,
- "extension": "flac"
- },
- "hq": {
- "size": 10885791,
- "size_desc": "10.89 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 6531492,
- "size_desc": "6.53 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 4354342,
- "size_desc": "4.35 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=150422"
- },
- {
- "id": 1958677933,
- "rank": 88,
- "rank_name": "飙升榜",
- "title": "不温暖的歌",
- "artist": [
- {
- "id": 1204076,
- "name": "欧瑞SoulCore",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1204076"
- }
- ],
- "album": {
- "id": 147035916,
- "name": "不温暖的歌",
- "cover": "http://p1.music.126.net/HnGeUR5qsVmbvtk5LEMvng==/109951167584589643.jpg",
- "published": "2022-06-23",
- "published_at": 1656000000000,
- "company": ""
- },
- "duration": 190000,
- "duration_desc": "3:10",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 38897482,
- "size_desc": "38.9 MB",
- "bitrate": 1637788,
- "extension": "flac"
- },
- "hq": {
- "size": 7602721,
- "size_desc": "7.6 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 4561650,
- "size_desc": "4.56 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3041115,
- "size_desc": "3.04 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=1958677933"
- },
- {
- "id": 2738570393,
- "rank": 89,
- "rank_name": "飙升榜",
- "title": "爱情火车",
- "artist": [
- {
- "id": 48577041,
- "name": "Mikey-18",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=48577041"
- },
- {
- "id": 37343744,
- "name": "Katastic卡老师",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=37343744"
- }
- ],
- "album": {
- "id": 282399455,
- "name": "爱情火车",
- "cover": "http://p1.music.126.net/X7FCkAy-zM3KK3ulekJl-w==/109951171934200418.jpg",
- "published": "2025-08-27",
- "published_at": 1756310400000,
- "company": "网易电波"
- },
- "duration": 168874,
- "duration_desc": "2:48",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 19597500,
- "size_desc": "19.6 MB",
- "bitrate": 928231,
- "extension": "flac"
- },
- "hq": {
- "size": 6757399,
- "size_desc": "6.76 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4054457,
- "size_desc": "4.05 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2702986,
- "size_desc": "2.7 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738570393"
- },
- {
- "id": 2733116489,
- "rank": 90,
- "rank_name": "飙升榜",
- "title": "云朵的歌",
- "artist": [
- {
- "id": 29865317,
- "name": "斯丹曼簇",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=29865317"
- }
- ],
- "album": {
- "id": 280458270,
- "name": "云朵的歌",
- "cover": "http://p1.music.126.net/EDicVyZ4SZJAnI-RqYLPSw==/109951171914367691.jpg",
- "published": "2025-08-22",
- "published_at": 1755878400000,
- "company": ""
- },
- "duration": 254153,
- "duration_desc": "4:14",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 27926440,
- "size_desc": "27.93 MB",
- "bitrate": 878894,
- "extension": "flac"
- },
- "hq": {
- "size": 10168365,
- "size_desc": "10.17 MB",
- "bitrate": 320001,
- "extension": "mp3"
- },
- "mq": {
- "size": 6101037,
- "size_desc": "6.1 MB",
- "bitrate": 192001,
- "extension": "mp3"
- },
- "lq": {
- "size": 4067373,
- "size_desc": "4.07 MB",
- "bitrate": 128001,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2733116489"
- },
- {
- "id": 2666658963,
- "rank": 91,
- "rank_name": "飙升榜",
- "title": "Show Me Love",
- "artist": [
- {
- "id": 31988286,
- "name": "WizTheMC",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=31988286"
- },
- {
- "id": 94332017,
- "name": "bees & honey",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=94332017"
- }
- ],
- "album": {
- "id": 259913344,
- "name": "Show Me Love",
- "cover": "http://p1.music.126.net/sPZ1mJ3Rh10cjRenbQ3bAg==/109951170383524946.jpg",
- "published": "2025-02-06",
- "published_at": 1738857600000,
- "company": "Bamboo Artists"
- },
- "duration": 176965,
- "duration_desc": "2:56",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 34535501,
- "size_desc": "34.54 MB",
- "bitrate": 1561083,
- "extension": "flac"
- },
- "hq": {
- "size": 7081317,
- "size_desc": "7.08 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4248808,
- "size_desc": "4.25 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2832553,
- "size_desc": "2.83 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2666658963"
- },
- {
- "id": 2740196131,
- "rank": 92,
- "rank_name": "飙升榜",
- "title": "一步几回头",
- "artist": [
- {
- "id": 31364543,
- "name": "蒋孜怡",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=31364543"
- }
- ],
- "album": {
- "id": 282958925,
- "name": "一步几回头",
- "cover": "http://p1.music.126.net/rzb1yI0jHl7jgoUnzZa_qg==/109951171933563007.jpg",
- "published": "2025-08-27",
- "published_at": 1756310400000,
- "company": "Universal Music China"
- },
- "duration": 222659,
- "duration_desc": "3:42",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 26687271,
- "size_desc": "26.69 MB",
- "bitrate": 958706,
- "extension": "flac"
- },
- "hq": {
- "size": 8908844,
- "size_desc": "8.91 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5345324,
- "size_desc": "5.35 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3563564,
- "size_desc": "3.56 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2740196131"
- },
- {
- "id": 2736339025,
- "rank": 93,
- "rank_name": "飙升榜",
- "title": "桃花签",
- "artist": [
- {
- "id": 1215003,
- "name": "呦猫UNEKO",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1215003"
- },
- {
- "id": 816079,
- "name": "薄彩生",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=816079"
- }
- ],
- "album": {
- "id": 281577462,
- "name": "《百妖谱·洛阳篇》动画原声带",
- "cover": "http://p1.music.126.net/MSfQ702QFv0w2OmifzyJEA==/109951171867725169.jpg",
- "published": "2025-08-14",
- "published_at": 1755187200000,
- "company": "bilibili"
- },
- "duration": 239808,
- "duration_desc": "3:59",
- "popularity": 95,
- "score": 95,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 27381733,
- "size_desc": "27.38 MB",
- "bitrate": 913308,
- "extension": "flac"
- },
- "hq": {
- "size": 9594285,
- "size_desc": "9.59 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 5756589,
- "size_desc": "5.76 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3837741,
- "size_desc": "3.84 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2736339025"
- },
- {
- "id": 2652410538,
- "rank": 94,
- "rank_name": "飙升榜",
- "title": "红太狼狂想曲(《喜羊羊与灰太狼之兔年顶呱呱》动画电影插曲)",
- "artist": [
- {
- "id": 7481,
- "name": "崔子格",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=7481"
- }
- ],
- "album": {
- "id": 255582143,
- "name": "《喜羊羊与灰太狼》音乐原声带合辑",
- "cover": "http://p1.music.126.net/KeZoz-csqAe30ovzgDFehQ==/109951170213887287.jpg",
- "published": "2024-12-01",
- "published_at": 1733068800000,
- "company": "宇歌风行"
- },
- "duration": 160920,
- "duration_desc": "2:40",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 18494176,
- "size_desc": "18.49 MB",
- "bitrate": 919422,
- "extension": "flac"
- },
- "hq": {
- "size": 6438765,
- "size_desc": "6.44 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3863277,
- "size_desc": "3.86 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2575533,
- "size_desc": "2.58 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2652410538"
- },
- {
- "id": 2733113572,
- "rank": 95,
- "rank_name": "飙升榜",
- "title": "espero(等着你)",
- "artist": [
- {
- "id": 46957283,
- "name": "曼尼洛夫",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=46957283"
- },
- {
- "id": 12568026,
- "name": "小白羊HUSH",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12568026"
- }
- ],
- "album": {
- "id": 280457742,
- "name": "espero(等着你)",
- "cover": "http://p1.music.126.net/2CY0ZyIyAbCWErHS6VnX5g==/109951171715764900.jpg",
- "published": "2025-08-03",
- "published_at": 1754236800000,
- "company": "独立发行"
- },
- "duration": 230999,
- "duration_desc": "3:50",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 26319483,
- "size_desc": "26.32 MB",
- "bitrate": 911350,
- "extension": "flac"
- },
- "hq": {
- "size": 9242166,
- "size_desc": "9.24 MB",
- "bitrate": 320002,
- "extension": "mp3"
- },
- "mq": {
- "size": 5545317,
- "size_desc": "5.55 MB",
- "bitrate": 192002,
- "extension": "mp3"
- },
- "lq": {
- "size": 3696893,
- "size_desc": "3.7 MB",
- "bitrate": 128002,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2733113572"
- },
- {
- "id": 2738549556,
- "rank": 96,
- "rank_name": "飙升榜",
- "title": "Vai Toma(PHONK)",
- "artist": [
- {
- "id": 56856041,
- "name": "GTR7",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=56856041"
- }
- ],
- "album": {
- "id": 282297619,
- "name": "Vai Toma",
- "cover": "http://p1.music.126.net/crZu8zAKrCR3pN8lzdUUVA==/109951171907812124.jpg",
- "published": "2025-08-20",
- "published_at": 1755705600000,
- "company": ""
- },
- "duration": 131000,
- "duration_desc": "2:11",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 28401103,
- "size_desc": "28.4 MB",
- "bitrate": 1734269,
- "extension": "flac"
- },
- "hq": {
- "size": 5242297,
- "size_desc": "5.24 MB",
- "bitrate": 320003,
- "extension": "mp3"
- },
- "mq": {
- "size": 3145395,
- "size_desc": "3.15 MB",
- "bitrate": 192003,
- "extension": "mp3"
- },
- "lq": {
- "size": 2096945,
- "size_desc": "2.1 MB",
- "bitrate": 128003,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2738549556"
- },
- {
- "id": 2739231169,
- "rank": 97,
- "rank_name": "飙升榜",
- "title": "她走的那夜下起了大雨 (纯音乐)",
- "artist": [
- {
- "id": 59019507,
- "name": "韦大鱼",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=59019507"
- }
- ],
- "album": {
- "id": 282657964,
- "name": "纯音乐合集",
- "cover": "http://p1.music.126.net/cfBzsQXbFCV1E_m5y1ZA3w==/109951171919074070.jpg",
- "published": "2025-08-22",
- "published_at": 1755878400000,
- "company": "广西青衫网络传媒有限公司"
- },
- "duration": 188424,
- "duration_desc": "3:08",
- "popularity": 95,
- "score": 95,
- "fee": 0,
- "status": 0,
- "mb": {
- "sq": null,
- "hq": {
- "size": 7538925,
- "size_desc": "7.54 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4523373,
- "size_desc": "4.52 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": null
- },
- "link": "https://music.163.com/#/song?id=2739231169"
- },
- {
- "id": 2740703897,
- "rank": 98,
- "rank_name": "飙升榜",
- "title": "Start Today",
- "artist": [
- {
- "id": 56782,
- "name": "Fall Out Boy",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=56782"
- }
- ],
- "album": {
- "id": 283140201,
- "name": "Start Today",
- "cover": "http://p1.music.126.net/gnMq2u8Nhsdewz3nnsEIVA==/109951171940498828.jpg",
- "published": "2025-08-26",
- "published_at": 1756224000000,
- "company": "Island Records"
- },
- "duration": 122706,
- "duration_desc": "2:02",
- "popularity": 90,
- "score": 90,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 14898805,
- "size_desc": "14.9 MB",
- "bitrate": 971194,
- "extension": "flac"
- },
- "hq": {
- "size": 4911064,
- "size_desc": "4.91 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 2946656,
- "size_desc": "2.95 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 1964452,
- "size_desc": "1.96 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2740703897"
- },
- {
- "id": 2100963421,
- "rank": 99,
- "rank_name": "飙升榜",
- "title": "山海花开不是你",
- "artist": [
- {
- "id": 12444269,
- "name": "高源",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=12444269"
- }
- ],
- "album": {
- "id": 179350982,
- "name": "山海花开不是你",
- "cover": "http://p1.music.126.net/AksAWvy9M90X-quVpRm9aA==/109951169063447299.jpg",
- "published": "2023-11-19",
- "published_at": 1700409600000,
- "company": "音符跳动"
- },
- "duration": 194516,
- "duration_desc": "3:14",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 21032122,
- "size_desc": "21.03 MB",
- "bitrate": 864999,
- "extension": "flac"
- },
- "hq": {
- "size": 7782765,
- "size_desc": "7.78 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 4669677,
- "size_desc": "4.67 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 3113133,
- "size_desc": "3.11 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2100963421"
- },
- {
- "id": 2731613461,
- "rank": 100,
- "rank_name": "飙升榜",
- "title": "不会在乎时间走多快",
- "artist": [
- {
- "id": 1142011,
- "name": "王极",
- "cover": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
- "link": "https://music.163.com/#/artist?id=1142011"
- }
- ],
- "album": {
- "id": 280119457,
- "name": "不会在乎时间走多快",
- "cover": "http://p1.music.126.net/QwXt6wm-zpToUdKVa-sXHA==/109951171580254229.jpg",
- "published": "2025-08-01",
- "published_at": 1754064000000,
- "company": ""
- },
- "duration": 138929,
- "duration_desc": "2:18",
- "popularity": 100,
- "score": 100,
- "fee": 8,
- "status": 0,
- "mb": {
- "sq": {
- "size": 16673736,
- "size_desc": "16.67 MB",
- "bitrate": 959978,
- "extension": "flac"
- },
- "hq": {
- "size": 5559405,
- "size_desc": "5.56 MB",
- "bitrate": 320000,
- "extension": "mp3"
- },
- "mq": {
- "size": 3335661,
- "size_desc": "3.34 MB",
- "bitrate": 192000,
- "extension": "mp3"
- },
- "lq": {
- "size": 2223789,
- "size_desc": "2.22 MB",
- "bitrate": 128000,
- "extension": "mp3"
- }
- },
- "link": "https://music.163.com/#/song?id=2731613461"
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/react-app/public/index.html b/frontend/react-app/public/index.html
index a9715b67..bd22830c 100644
--- a/frontend/react-app/public/index.html
+++ b/frontend/react-app/public/index.html
@@ -10,12 +10,12 @@
-
+
-
+
@@ -31,7 +31,7 @@
-
✨ 神奇万事通 ✨
+
神奇万事通
+
+
+
+
别踩白方块
+
+
+
+
+ 得分: 0
+ 速度: 1.0x
+
+
+
+
+
+
+
+
+
+
+
+
电脑端:使用 A S D F 键
+
手机端:直接点击黑色方块
+
+
+
+
+
+
+
+
游戏结束
+
最终得分: 0
+
最高速度: 1.0x
+
+
+
+
+
+
+
+