Add summary statistics and macroeconomic data files for 2025

- Created summary_statistics.csv with total news articles and key metrics from January 1 to October 13, 2025.
- Added 一号文件十四五十五五规划情况.csv detailing keyword occurrences related to planning documents.
- Introduced 主要宏观经济数据.csv capturing mentions of key economic indicators.
- Included 国外交流随行企业与企业家名单.csv listing leaders and their engagements with foreign enterprises.
- Added 国家领导人考察行程清单.csv documenting leaders' inspection itineraries.
- Created 国际合作与外交动态.csv summarizing international cooperation and diplomatic activities.
- Added 高频行业关键词统计.csv with statistics on frequently mentioned industry keywords.
This commit is contained in:
杨水淼
2025-10-23 14:58:21 +08:00
parent 4a56455151
commit cb98c1649c
51 changed files with 32999 additions and 69 deletions
+3 -3
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>新闻联播 - 实时资讯</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="/js/tailwindcss_3.4.17.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<link href="https://fonts.loli.net/css2?family=Noto+Serif+SC:wght@400;600;700&family=Noto+Sans+SC:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>
@@ -72,7 +72,7 @@
<div class="bg-white rounded-lg shadow-sm p-4 mb-6">
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between space-y-3 sm:space-y-0">
<div class="flex items-center space-x-4">
<label class="text-sm font-medium text-gray-700">日期范围:</label>
<label class="text-sm font-medium text-gray-700">日期</label>
<input type="date" id="startDate" class="border border-gray-300 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent">
<span class="text-gray-500"></span>
<input type="date" id="endDate" class="border border-gray-300 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent">
@@ -185,6 +185,6 @@ $mysqli->close();
</div>
</footer>
<script src="main.js"></script>
<script src="main.js?ver=0.4"></script>
</body>
</html>
+30 -64
View File
@@ -42,17 +42,40 @@ class NewsApp {
initializeDates() {
const today = new Date();
const weekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);
const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
// 设置默认日期范围(最近一周)
this.currentEndDate = this.formatDate(today);
this.currentStartDate = this.formatDate(weekAgo);
this.currentStartDate = this.formatDate(yesterday);
this.startDateInput.value = this.currentStartDate;
this.endDateInput.value = this.currentEndDate;
}
formatDate(date) {
return date.toISOString().split('T')[0];
// 获取北京时间(东八区)偏移
const beijingTime = new Intl.DateTimeFormat('zh-CN', {
timeZone: 'Asia/Shanghai',
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).format(date);
return beijingTime.replace(/\//g, '-');
}
// 2. 日期+时间
formatDateTime(date) {
const d = new Intl.DateTimeFormat('zh-CN', {
timeZone: 'Asia/Shanghai',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
}).format(date); // 返回 "2025-07-07 15:32:45"
return d.replace(/\//g, '-').replace(',', '');
}
updateDateRange() {
@@ -99,10 +122,10 @@ class NewsApp {
this.showLoading(true);
try {
// 构建API URL - 请替换为您的实际API地址
const apiUrl = `https://api.doorcome.cn/api/xwlbNews/?start_date=${startDate}&end_date=${endDate}`;
// 构建API URL
const apiUrl = `https://api.doorcome.cn/api/xwlbFine/?start_date=${startDate}&end_date=${endDate}`;
console.log('Fetching news from:', apiUrl); // 调试日志
//console.log('Fetching news from:', apiUrl); // 调试日志
const response = await fetch(apiUrl, {
method: 'GET',
@@ -116,13 +139,7 @@ class NewsApp {
}
const result = await response.json();
console.log('API Response:', result); // 调试日志
// 根据您的API返回格式调整
// 常见格式示例:
// 1. { "data": { "news": [...] } }
// 2. { "news": [...] }
// 3. [...] // 直接是数组
//console.log('API Response:', result); // 调试日志
if (result.data && result.data.news) {
result.data.news.forEach(item => {
@@ -253,7 +270,7 @@ class NewsApp {
<svg class="w-4 h-4 mr-1" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clip-rule="evenodd"/>
</svg>
${news.daily_sub_id + 1}
${news.daily_sub_id}
</span>
</div>
</div>
@@ -292,21 +309,6 @@ class NewsApp {
});
}
}
/*
setupInfiniteScroll() {
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting && !this.isLoading && this.hasMoreNews) {
this.loadMoreNews();
}
});
}, {
rootMargin: '100px'
});
// 观察加载指示器
observer.observe(this.loadingIndicator);
}*/
setupInfiniteScroll() {
const options = {
@@ -337,42 +339,6 @@ class NewsApp {
// 同时观察加载指示器
observer.observe(this.loadingIndicator);
}
/*
async loadMoreNews() {
if (this.isLoading || !this.hasMoreNews) return;
this.showLoading(true);
try {
// 找到当前最早的日期
const earliestDate = this.getEarliestDate();
if (!earliestDate) {
this.hasMoreNews = false;
return;
}
// 计算前一天的日期
const prevDate = new Date(earliestDate);
prevDate.setDate(prevDate.getDate() - 1);
const prevDateStr = this.formatDate(prevDate);
// 加载前一天的新闻
const moreNews = await this.fetchNews(prevDateStr, prevDateStr);
if (moreNews.length === 0) {
this.hasMoreNews = false;
this.endOfContent.classList.remove('hidden');
} else {
this.renderNews(moreNews);
}
} catch (error) {
console.error('加载更多新闻失败:', error);
this.showError('加载更多新闻失败,请稍后重试');
} finally {
this.showLoading(false);
}
}
*/
async loadMoreNews() {
if (this.isLoading || !this.hasMoreNews) {
+129
View File
@@ -0,0 +1,129 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>新闻联播 - 实时资讯</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<link href="https://fonts.loli.net/css2?family=Noto+Serif+SC:wght@400;600;700&family=Noto+Sans+SC:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>
.news-card {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.news-card:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.news-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
}
.news-content.expanded {
max-height: 1000px;
transition: max-height 0.5s ease-in;
}
.loading-spinner {
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.fade-in {
opacity: 0;
animation: fadeIn 0.6s ease-out forwards;
}
@keyframes fadeIn {
to { opacity: 1; }
}
.title-font {
font-family: 'Noto Serif SC', serif;
}
.body-font {
font-family: 'Noto Sans SC', sans-serif;
}
</style>
</head>
<body class="bg-gray-50 body-font">
<!-- Header -->
<header class="bg-white shadow-sm border-b border-gray-200 sticky top-0 z-50">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between items-center h-16">
<div class="flex items-center space-x-3">
<div class="w-8 h-8 bg-blue-500 rounded-lg flex items-center justify-center">
<svg class="w-5 h-5 text-white" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M2 5a2 2 0 012-2h8a2 2 0 012 2v10a2 2 0 002 2H4a2 2 0 01-2-2V5zm3 1h6v4H5V6zm6 6H5v2h6v-2z" clip-rule="evenodd"/>
</svg>
</div>
<h1 class="text-xl font-bold text-gray-900 title-font">新闻联播-新闻流</h1>
</div>
<div class="text-sm text-gray-500">
实时资讯更新
</div>
</div>
</div>
</header>
<!-- Main Content -->
<main class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Date Filter -->
<div class="bg-white rounded-lg shadow-sm p-4 mb-6">
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between space-y-3 sm:space-y-0">
<div class="flex items-center space-x-4">
<label class="text-sm font-medium text-gray-700">日期</label>
<input type="date" id="startDate" class="border border-gray-300 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent">
<span class="text-gray-500"></span>
<input type="date" id="endDate" class="border border-gray-300 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent">
</div>
<button id="refreshBtn" class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-md text-sm font-medium transition-colors duration-200">
刷新
</button>
</div>
</div>
<!-- News Container -->
<div id="newsContainer" class="space-y-4">
<!-- News items will be dynamically inserted here -->
</div>
<!-- Loading Indicator -->
<div id="loadingIndicator" class="flex justify-center items-center py-8 hidden">
<div class="flex items-center space-x-3">
<div class="loading-spinner w-6 h-6 border-2 border-blue-500 border-t-transparent rounded-full"></div>
<span class="text-gray-600 text-sm">正在加载更多新闻...</span>
</div>
</div>
<!-- End of Content -->
<div id="endOfContent" class="text-center py-8 text-gray-500 hidden">
<div class="flex flex-col items-center space-y-2">
<svg class="w-12 h-12 text-gray-300" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M3 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/>
</svg>
<p class="text-sm">已加载所有新闻</p>
</div>
</div>
</main>
<!-- Footer -->
<footer class="bg-white border-t border-gray-200 mt-16">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<div class="text-center text-sm text-gray-500">
<p>&copy; 2025 新闻流应用. 实时获取最新资讯</p>
</div>
<div class="text-center text-sm text-gray-500">
<span style="color: grey; font-size: x-small; ">
<a href="https://beian.miit.gov.cn" target="_blank">浙ICP备18056264号-1</a>
</span>
<span style='color:grey;font-size:small;'>
</span>
</div>
</div>
</footer>
<script src="main.js"></script>
</body>
</html>