新闻API服务

一个基于Node.js和TypeScript的RESTful API服务,提供新闻文章、头条新闻和新闻来源的搜索与过滤功能。

  • by sequent
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 sequent/newsapi-mcp-server

使用说明

新闻API服务

一个RESTful API服务,包装NewsAPI.org端点,提供新闻文章、头条新闻和新闻来源。使用Node.js、TypeScript和Docker构建。

特性

  • 通过搜索和筛选获取新闻文章
  • 按类别和国家获取头条新闻
  • 通过过滤获取新闻来源
  • 分页支持
  • Docker容器化
  • 健康检查端点
  • TypeScript用于类型安全

先决条件

环境变量

创建一个 .env 根目录中的文件:

NEWS_API_KEY=your_api_key_here
NODE_ENV=development # or production
PORT=3000 # optional, defaults to 3000

安装

地方发展

  1. 克隆存储库:
git clone <repository-url>
cd newsapi_news
  1. 安装依赖项:
npm install
  1. 启动开发服务器:
npm run dev

Docker部署

  1. 构建并启动容器:
docker-compose up --build
  1. 停止容器:
docker-compose down

API终点

GET/api/news/一切

根据搜索条件获取文章。

参数:

  • q (必填):在文章标题和正文中搜索的关键字或短语
  • qInTitle:仅在文章标题中搜索的关键字或短语
  • sources:逗号分隔的新闻源ID字符串(例如,“bbc news,techcrunch”)
  • domains:逗号分隔的域名字符串,将搜索限制为(例如,“bbc.co.uk,techcrunch.com”)
  • excludeDomains:要从搜索中排除的逗号分隔的域字符串
  • from:ISO 8601格式的日期(例如,“2025-03-14”或“2025-03-14T09:15:00Z”)
  • to:ISO 8601格式化日期
  • language:2个字母的ISO-639-1语言代码。可用选项:
    • ar 阿拉伯语
    • de 德语
    • en 英语
    • es 西班牙语
    • fr 法语
    • he 希伯来语
    • it 意大利语
    • nl 荷兰的
    • no 挪威的
    • pt 葡萄牙语
    • ru 俄语
    • sv 瑞典语
    • zh 中文
  • sortBy:按顺序对文章进行排序。可用选项:
    • relevancy:与搜索查询更密切相关的文章
    • popularity:来自流行来源和出版商的文章
    • publishedAt:最新文章优先
  • page:分页结果的页码(默认值:1)
  • pageSize:每页结果数(默认值:20,最大值:100)

例子:

curl "http://localhost:3000/api/news/everything?q=bitcoin&language=en&sortBy=publishedAt&page=1&pageSize=5&domains=techcrunch.com,theverge.com"

GET/api/news/头条新闻

按类别和国家获取头条新闻。

参数:

  • category:成为头条新闻的类别。可用选项:
    • business
    • entertainment
    • general
    • health
    • science
    • sports
    • technology
  • country:两个字母的ISO 3166-1国家代码。可用选项:
    • ae 阿拉伯联合酋长国
    • ar 阿根廷
    • at 奥地利
    • au 澳大利亚
    • be 比利时
    • bg 保加利亚
    • br 巴西
    • ca 加拿大
    • ch 瑞士
    • cn 中国
    • co 哥伦比亚
    • cu 古巴
    • cz 捷克共和国
    • de 德国
    • eg 埃及
    • fr 法国
    • gb 英国
    • gr 希腊
    • hk 香港
    • hu 匈牙利
    • id 印度尼西亚
    • ie 爱尔兰
    • il 以色列
    • in 印度
    • it 意大利
    • jp 日本
    • kr 韩国
    • lt 立陶宛
    • lv 拉脱维亚
    • ma 摩洛哥
    • mx 墨西哥
    • my 马来西亚
    • ng 尼日利亚
    • nl 荷兰
    • no 挪威
    • nz 新西兰
    • ph 菲律宾
    • pl 波兰
    • pt 葡萄牙
    • ro 罗马尼亚
    • rs 塞尔维亚
    • ru 俄罗斯
    • sa 沙特阿拉伯
    • se 瑞典
    • sg 新加坡
    • si 斯洛文尼亚
    • sk 斯洛伐克
    • th 泰国
    • tr 火鸡
    • tw 台湾
    • ua 乌克兰
    • us 美国
    • ve 委内瑞拉
    • za 南非
  • sources:逗号分隔的新闻源ID字符串(例如,“bbc news,techcrunch”) 注意:不能与 country 或 category 参数
  • q:要在标题中搜索的关键字或短语
  • page:分页结果的页码(默认值:1)
  • pageSize:每页结果数(默认值:20,最大值:100)

例子:

curl "http://localhost:3000/api/news/top-headlines?category=technology&country=us&page=1&pageSize=5&q=AI"

GET/api/新闻/来源

通过过滤获取新闻来源。

参数:

  • category:按类别筛选源。可用选项:
    • business
    • entertainment
    • general
    • health
    • science
    • sports
    • technology
  • language:按语言筛选源。使用2个字母的ISO-639-1代码:
    • ar 阿拉伯语
    • de 德语
    • en 英语
    • es 西班牙语
    • fr 法语
    • he 希伯来语
    • it 意大利语
    • nl 荷兰的
    • no 挪威的
    • pt 葡萄牙语
    • ru 俄语
    • sv 瑞典语
    • zh 中文
  • country:按国家筛选来源。使用2个字母的ISO 3166-1代码(与顶部标题相同)

例子:

curl "http://localhost:3000/api/news/sources?category=business&language=en&country=us"

响应格式

文章回应

{
  "articles": [
    {
      "title": "Article Title",
      "url": "https://article.url",
      "description": "Article description",
      "imageUrl": "https://image.url",
      "publishedAt": "2025-03-14T10:00:00Z",
      "category": "technology"
    }
  ],
  "timestamp": 1741944027694
}

来源回应

{
  "sources": [
    {
      "id": "source-id",
      "name": "Source Name",
      "description": "Source description",
      "url": "https://source.url",
      "category": "business",
      "language": "en",
      "country": "us"
    }
  ],
  "timestamp": 1741944027694
}

错误处理

API返回适当的HTTP状态代码:

  • 200:成功
  • 400:错误请求(无效参数)
  • 401:未授权(API密钥无效)
  • 429:请求太多
  • 500:内部服务器错误

发展

# Run tests
npm test

# Build TypeScript
npm run build

# Start production server
npm start

许可证

麻省理工学院