新闻API服务
一个RESTful API服务,包装NewsAPI.org端点,提供新闻文章、头条新闻和新闻来源。使用Node.js、TypeScript和Docker构建。
特性
- 通过搜索和筛选获取新闻文章
- 按类别和国家获取头条新闻
- 通过过滤获取新闻来源
- 分页支持
- Docker容器化
- 健康检查端点
- TypeScript用于类型安全
先决条件
- Node.js 20.x或Docker
- NewsAPI.org API密钥(从 https://newsapi.org/register)
环境变量
创建一个 .env 根目录中的文件:
NEWS_API_KEY=your_api_key_here
NODE_ENV=development # or production
PORT=3000 # optional, defaults to 3000安装
地方发展
- 克隆存储库:
git clone
cd newsapi_news- 安装依赖项:
npm install- 启动开发服务器:
npm run devDocker部署
- 构建并启动容器:
docker-compose up --build- 停止容器:
docker-compose downAPI终点
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许可证
麻省理工学院
