Skip to content

Repository files navigation

📰 中国实时新闻MCP工具

Node.js Version npm Version License Chinese

一个基于聚合数据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-news

安装依赖

npm install

配置API密钥

重要: 为了保护您的API密钥安全,请使用环境变量配置:

  1. 在项目根目录创建 .env.local 文件:
# 创建环境变量文件(Windows)
type nul > .env.local

# 创建环境变量文件(macOS/Linux)
touch .env.local
  1. .env.local 文件中添加您的API密钥:
# 聚合数据 API 配置
JUHE_API_KEY=你的API密钥

# 其他可选配置
# API_TIMEOUT=5000
# MAX_RESULTS=30
  1. 注意事项:
    • .env.local 文件已经被添加到 .gitignore 中,不会被上传到代码仓库
    • 请妥善保管您的API密钥,不要将其公开分享
    • 如需获取API密钥,请访问 聚合数据官网 注册账号

🚀 快速开始

基础使用

# 直接运行工具
node realtime-news-mcp.js

# 运行基础示例
node example.js

# 交互式演示
node interactive-demo.js

npm脚本

npm 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();

📋 API文档

核心函数

mcpNewsTool(operation, parameter, limit)

主要的工具函数,支持三种操作:

参数说明:

  • operation (string): 操作类型
    • 'latest' - 获取最新新闻
    • 'search' - 搜索新闻
    • 'categories' - 获取分类列表
  • parameter (string): 操作参数
    • 对于 'latest': 新闻分类代码
    • 对于 'search': 搜索关键词
    • 对于 'categories': 忽略此参数
  • limit (number): 返回新闻数量限制 (默认: 10)

返回值:

  • 格式化的新闻字符串或错误信息

支持的新闻分类

分类代码 分类名称 说明
top 头条 热点新闻、重要事件
shehui 社会 社会新闻、民生事件
guonei 国内 国内政策、地方新闻
guoji 国际 国际新闻、外交事件
yule 娱乐 娱乐八卦、明星动态
tiyu 体育 体育赛事、运动新闻
junshi 军事 军事新闻、国防信息
keji 科技 科技动态、IT新闻
caijing 财经 财经新闻、股市信息
shishang 时尚 时尚资讯、生活方式

💡 使用示例

1. 获取最新新闻

// 获取5条头条新闻
const headlines = await mcpNewsTool('latest', 'top', 5);

// 获取3条科技新闻
const techNews = await mcpNewsTool('latest', 'keji', 3);

// 获取2条财经新闻
const financeNews = await mcpNewsTool('latest', 'caijing', 2);

2. 搜索新闻

// 搜索AI相关新闻
const aiNews = await mcpNewsTool('search', 'AI', 3);

// 搜索教育相关新闻
const eduNews = await mcpNewsTool('search', '教育', 2);

// 搜索北京相关新闻
const beijingNews = await mcpNewsTool('search', '北京', 5);

3. 批量获取新闻

// 并行获取多个分类的新闻
const [headlines, techNews, financeNews] = await Promise.all([
    mcpNewsTool('latest', 'top', 3),
    mcpNewsTool('latest', 'keji', 2),
    mcpNewsTool('latest', 'caijing', 2)
]);

4. 命令行快捷使用

# 查看分类列表
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;
    }
}

⚙️ 配置选项

API配置

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限制

  • 免费版API每日调用次数有限(通常1000次/天)
  • 建议合理控制调用频率,避免超出配额
  • 调用间隔建议1-2秒以上

错误处理

  • 工具内置了完善的错误处理机制
  • 网络异常时会自动重试
  • 无效参数会返回友好的错误提示

性能优化

  • 使用 Promise.all() 进行并行请求
  • 可以实现本地缓存减少API调用
  • 避免在短时间内频繁调用同一接口

🆘 常见问题

Q: API密钥无效怎么办?

A: 请检查API密钥是否正确,确保在聚合数据平台已激活新闻API服务。

Q: 获取不到某个分类的新闻?

A: 可能是该分类暂时没有更新,或者API服务异常,建议稍后重试。

Q: 如何获取API密钥?

A: 请访问 聚合数据官网 注册账号并申请新闻API服务。

Q: 支持其他新闻源吗?

A: 目前支持聚合数据API,未来可能会增加更多新闻源。

Q: 如何增加新的新闻分类?

A:NEWS_CATEGORIES 对象中添加新的分类映射即可。

🤝 贡献指南

欢迎贡献代码!请按照以下步骤:

  1. Fork 本仓库
  2. 创建你的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开一个 Pull Request

开发规范

  • 使用JSDoc注释
  • 遵循现有的代码风格
  • 添加必要的测试
  • 更新相关文档

📝 更新日志

v1.0.0 (2024-01-01)

  • 🎉 初始版本发布
  • ✅ 支持10种新闻分类
  • ✅ 关键词搜索功能
  • ✅ 完善的错误处理
  • ✅ 多种调用方式

📄 许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。

🙏 致谢

  • 聚合数据 - 提供新闻API服务
  • Axios - HTTP客户端库
  • 所有贡献者和用户的支持

📞 联系方式


⭐ 如果这个项目对你有帮助,请给个星星支持一下!

About

No description, website, or topics provided.

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages