一个基于聚合数据API的JavaScript版MCP实时新闻获取工具,支持多种新闻分类和关键词搜索功能。
- 🔥 实时新闻获取 - 获取最新的新闻头条和分类新闻
- 🔍 智能搜索 - 支持关键词搜索相关新闻
- 📋 多分类支持 - 支持10种新闻分类(头条、科技、财经、体育等)
- ⚡ 快速响应 - 高效的API调用和数据处理
- 🛡️ 错误处理 - 完善的错误处理和超时控制
- 📊 美观展示 - 格式化的新闻展示和统计信息
- 🔑 API验证 - 自动验证API密钥有效性
- 📱 多种调用方式 - 支持命令行、编程调用等多种使用方式
- Node.js >= 14.0.0
- npm >= 6.0.0
git clone https://github.com/ShuaiFu29/realtime-news.git
cd realtime-newsnpm install重要: 为了保护您的API密钥安全,请使用环境变量配置:
- 在项目根目录创建
.env.local文件:
# 创建环境变量文件(Windows)
type nul > .env.local
# 创建环境变量文件(macOS/Linux)
touch .env.local- 在
.env.local文件中添加您的API密钥:
# 聚合数据 API 配置
JUHE_API_KEY=你的API密钥
# 其他可选配置
# API_TIMEOUT=5000
# MAX_RESULTS=30- 注意事项:
.env.local文件已经被添加到.gitignore中,不会被上传到代码仓库- 请妥善保管您的API密钥,不要将其公开分享
- 如需获取API密钥,请访问 聚合数据官网 注册账号
# 直接运行工具
node realtime-news-mcp.js
# 运行基础示例
node example.js
# 交互式演示
node interactive-demo.jsnpm start # 启动工具
npm run demo # 运行演示
npm run test # 测试功能const { mcpNewsTool } = require('./realtime-news-mcp.js');
async function getNews() {
// 获取头条新闻
const headlines = await mcpNewsTool('latest', 'top', 5);
console.log(headlines);
// 搜索AI相关新闻
const aiNews = await mcpNewsTool('search', 'AI', 3);
console.log(aiNews);
// 查看分类列表
const categories = await mcpNewsTool('categories');
console.log(categories);
}
getNews();主要的工具函数,支持三种操作:
参数说明:
operation(string): 操作类型'latest'- 获取最新新闻'search'- 搜索新闻'categories'- 获取分类列表
parameter(string): 操作参数- 对于
'latest': 新闻分类代码 - 对于
'search': 搜索关键词 - 对于
'categories': 忽略此参数
- 对于
limit(number): 返回新闻数量限制 (默认: 10)
返回值:
- 格式化的新闻字符串或错误信息
| 分类代码 | 分类名称 | 说明 |
|---|---|---|
top |
头条 | 热点新闻、重要事件 |
shehui |
社会 | 社会新闻、民生事件 |
guonei |
国内 | 国内政策、地方新闻 |
guoji |
国际 | 国际新闻、外交事件 |
yule |
娱乐 | 娱乐八卦、明星动态 |
tiyu |
体育 | 体育赛事、运动新闻 |
junshi |
军事 | 军事新闻、国防信息 |
keji |
科技 | 科技动态、IT新闻 |
caijing |
财经 | 财经新闻、股市信息 |
shishang |
时尚 | 时尚资讯、生活方式 |
// 获取5条头条新闻
const headlines = await mcpNewsTool('latest', 'top', 5);
// 获取3条科技新闻
const techNews = await mcpNewsTool('latest', 'keji', 3);
// 获取2条财经新闻
const financeNews = await mcpNewsTool('latest', 'caijing', 2);// 搜索AI相关新闻
const aiNews = await mcpNewsTool('search', 'AI', 3);
// 搜索教育相关新闻
const eduNews = await mcpNewsTool('search', '教育', 2);
// 搜索北京相关新闻
const beijingNews = await mcpNewsTool('search', '北京', 5);// 并行获取多个分类的新闻
const [headlines, techNews, financeNews] = await Promise.all([
mcpNewsTool('latest', 'top', 3),
mcpNewsTool('latest', 'keji', 2),
mcpNewsTool('latest', 'caijing', 2)
]);# 查看分类列表
node -e "const {mcpNewsTool} = require('./realtime-news-mcp.js'); mcpNewsTool('categories').then(console.log);"
# 获取头条新闻
node -e "const {mcpNewsTool} = require('./realtime-news-mcp.js'); mcpNewsTool('latest', 'top', 3).then(console.log);"
# 搜索特定话题
node -e "const {mcpNewsTool} = require('./realtime-news-mcp.js'); mcpNewsTool('search', '科技', 2).then(console.log);"realtime-news-mcp/
├── realtime-news-mcp.js # 主工具文件
├── package.json # 项目配置
├── example.js # 基础使用示例
├── interactive-demo.js # 交互式演示
├── README.md # 项目说明
└── package-lock.json # 依赖锁定文件
// 创建个性化新闻摘要
async function getMyDailyNews() {
const results = {};
// 获取各类新闻
results.headlines = await mcpNewsTool('latest', 'top', 3);
results.tech = await mcpNewsTool('latest', 'keji', 2);
results.finance = await mcpNewsTool('latest', 'caijing', 2);
// 搜索感兴趣的话题
results.ai = await mcpNewsTool('search', '人工智能', 1);
results.education = await mcpNewsTool('search', '教育', 1);
return results;
}
// 使用自定义函数
const myNews = await getMyDailyNews();
console.log(myNews);async function safeGetNews(category, limit) {
try {
const news = await mcpNewsTool('latest', category, limit);
return news;
} catch (error) {
console.error(`获取${category}新闻失败:`, error.message);
return null;
}
}在 realtime-news-mcp.js 中可以修改以下配置:
const API_KEY = "your-api-key"; // API密钥
const BASE_URL = "http://v.juhe.cn/toutiao/index"; // API基础URL
const REQUEST_TIMEOUT = 10000; // 请求超时时间(毫秒)
const MAX_RETRIES = 3; // 最大重试次数const NEWS_CATEGORIES = {
'top': '头条',
'keji': '科技',
'caijing': '财经',
// 添加更多分类...
};- 免费版API每日调用次数有限(通常1000次/天)
- 建议合理控制调用频率,避免超出配额
- 调用间隔建议1-2秒以上
- 工具内置了完善的错误处理机制
- 网络异常时会自动重试
- 无效参数会返回友好的错误提示
- 使用
Promise.all()进行并行请求 - 可以实现本地缓存减少API调用
- 避免在短时间内频繁调用同一接口
A: 请检查API密钥是否正确,确保在聚合数据平台已激活新闻API服务。
A: 可能是该分类暂时没有更新,或者API服务异常,建议稍后重试。
A: 请访问 聚合数据官网 注册账号并申请新闻API服务。
A: 目前支持聚合数据API,未来可能会增加更多新闻源。
A: 在 NEWS_CATEGORIES 对象中添加新的分类映射即可。
欢迎贡献代码!请按照以下步骤:
- Fork 本仓库
- 创建你的特性分支 (
git checkout -b feature/AmazingFeature) - 提交你的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开一个 Pull Request
- 使用JSDoc注释
- 遵循现有的代码风格
- 添加必要的测试
- 更新相关文档
- 🎉 初始版本发布
- ✅ 支持10种新闻分类
- ✅ 关键词搜索功能
- ✅ 完善的错误处理
- ✅ 多种调用方式
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
⭐ 如果这个项目对你有帮助,请给个星星支持一下!