使用说明
新闻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 <repository-url>
cd newsapi_news
- 安装依赖项:
npm install
- 启动开发服务器:
npm run dev
Docker部署
- 构建并启动容器:
docker-compose up --build
- 停止容器:
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:成为头条新闻的类别。可用选项:businessentertainmentgeneralhealthsciencesportstechnology
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:按类别筛选源。可用选项:businessentertainmentgeneralhealthsciencesportstechnology
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
许可证
麻省理工学院
