增加新闻流量监测板块

This commit is contained in:
oficcejo
2026-01-25 16:53:55 +08:00
parent be76e444c7
commit 73491aa22d
18 changed files with 8365 additions and 13 deletions
+666
View File
@@ -0,0 +1,666 @@
# 每日热点新闻 API - 调用说明文档
## 📋 目录
- [基础信息](#基础信息)
- [快速开始](#快速开始)
- [接口说明](#接口说明)
- [支持的平台](#支持的平台)
- [调用示例](#调用示例)
- [错误处理](#错误处理)
- [注意事项](#注意事项)
- [常见问题](#常见问题)
---
## 基础信息
### API 地址
```
生产环境:https://newsapi.ws4.cn/api/v1/dailynews/
```
### 接口说明
获取各大平台的热点新闻数据,包括微博热搜、百度热搜、知乎热榜等20+个平台。
### 特性
- ✅ 支持多种主流平台
- ✅ 实时更新数据
- ✅ 无需认证即可使用
- ✅ JSON 格式返回
- ✅ 支持跨平台聚合查询
---
## 快速开始
### 最简单的调用
```bash
curl "https://newsapi.ws4.cn/api/v1/dailynews/?platform=baidu"
```
### Python 快速示例
```python
import requests
response = requests.get("https://newsapi.ws4.cn/api/v1/dailynews/?platform=baidu")
data = response.json()
print(f"获取到 {len(data['data'])} 条新闻")
```
---
## 接口说明
### 请求信息
- **方法**: GET
- **Content-Type**: application/json
- **编码**: UTF-8
### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| platform | String | 是 | 平台代码,支持多个平台用逗号分隔 | `baidu``baidu,weibo,zhihu` |
### 返回格式
#### 成功响应
```json
{
"status": "200",
"data": [
{
"title": "新闻标题",
"url": "新闻链接",
"content": "新闻内容或描述",
"source": "平台名称",
"publish_time": "2026-01-24 11:52:52"
}
],
"msg": "success"
}
```
#### 字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| status | String | 状态码,200 表示成功 |
| data | Array | 新闻数据列表 |
| data[].title | String | 新闻标题 |
| data[].url | String | 新闻链接 |
| data[].content | String | 新闻内容或描述 |
| data[].source | String | 平台来源 |
| data[].publish_time | String | 发布时间 |
| msg | String | 响应消息 |
---
## 支持的平台
| 序号 | 平台名称 | 平台代码 | 说明 |
|------|----------|----------|------|
| 1 | 百度热搜 | `baidu` | 社会热点、娱乐、事件 |
| 2 | 少数派 | `sspai` | 科技、数码、生活方式 |
| 3 | 微博热搜 | `weibo` | 社交媒体热点 |
| 4 | 知乎热榜 | `zhihu` | 问答、深度内容 |
| 5 | 36氪 | `tskr` | 科技创业、商业资讯 |
| 6 | 吾爱破解 | `ftpojie` | 技术、软件、安全 |
| 7 | 哔哩哔哩 | `bilibili` | 视频、动漫、游戏 |
| 8 | 豆瓣 | `douban` | 书影音、文化 |
| 9 | 虎扑 | `hupu` | 体育、游戏 |
| 10 | 百度贴吧 | `tieba` | 兴趣社区 |
| 11 | 掘金 | `juejin` | 编程、技术 |
| 12 | 抖音 | `douyin` | 短视频热点 |
| 13 | V2EX | `v2ex` | 技术、编程 |
| 14 | 今日头条 | `jinritoutiao` | 新闻热点 |
| 15 | Stack Overflow | `stackoverflow` | 编程问答 |
| 16 | GitHub Trending | `github` | 开源项目 |
| 17 | Hacker News | `hackernews` | 科技新闻 |
| 18 | 新浪财经 | `sina_finance` | 财经新闻 |
| 19 | 东方财富 | `eastmoney` | 财经资讯 |
| 20 | 雪球 | `xueqiu` | 股票投资 |
| 21 | 财联社 | `cls` | 财经快讯 |
| 22 | 腾讯网 | `tenxunwang` | 综合新闻 |
---
## 调用示例
### 1. cURL
#### 获取单个平台
```bash
curl "https://newsapi.ws4.cn/api/v1/dailynews/?platform=baidu"
```
#### 获取多个平台
```bash
curl "https://newsapi.ws4.cn/api/v1/dailynews/?platform=baidu,weibo,zhihu"
```
#### 完整示例
```bash
curl -X GET "https://newsapi.ws4.cn/api/v1/dailynews/?platform=baidu" \
-H "Content-Type: application/json"
```
---
### 2. Python
#### 使用 requests 库
```python
import requests
def get_news(platform="baidu"):
url = "https://newsapi.ws4.cn/api/v1/dailynews/"
params = {"platform": platform}
try:
response = requests.get(url, params=params)
data = response.json()
if data['status'] == '200':
print(f"获取到 {len(data['data'])} 条新闻")
return data['data']
else:
print(f"请求失败: {data['msg']}")
return []
except Exception as e:
print(f"发生错误: {e}")
return []
# 使用示例
news_list = get_news("baidu")
for news in news_list[:5]:
print(f"标题: {news['title']}")
print(f"链接: {news['url']}")
print(f"时间: {news['publish_time']}\n")
```
#### 获取多个平台
```python
def get_multiple_news(platforms):
platforms_str = ",".join(platforms)
url = f"https://newsapi.ws4.cn/api/v1/dailynews/?platform={platforms_str}"
response = requests.get(url)
return response.json()
# 使用示例
data = get_multiple_news(["baidu", "weibo", "zhihu"])
print(f"总共获取到 {len(data['data'])} 条新闻")
```
#### 异步请求(多个平台)
```python
import asyncio
import aiohttp
async def fetch_news(session, platform):
url = "https://newsapi.ws4.cn/api/v1/dailynews/"
async with session.get(url, params={"platform": platform}) as response:
return await response.json()
async def get_news_async(platforms):
async with aiohttp.ClientSession() as session:
tasks = [fetch_news(session, p) for p in platforms]
results = await asyncio.gather(*tasks)
return results
# 使用示例
import asyncio
platforms = ["baidu", "weibo", "zhihu"]
results = asyncio.run(get_news_async(platforms))
for i, result in enumerate(results):
print(f"{platforms[i]}: {len(result['data'])} 条新闻")
```
---
### 3. JavaScript / Node.js
#### 使用 fetch(浏览器或现代 Node.js
```javascript
async function getNews(platform = 'baidu') {
const url = `https://newsapi.ws4.cn/api/v1/dailynews/?platform=${platform}`;
try {
const response = await fetch(url);
const data = await response.json();
if (data.status === '200') {
console.log(`获取到 ${data.data.length} 条新闻`);
return data.data;
} else {
console.log('请求失败:', data.msg);
return [];
}
} catch (error) {
console.log('发生错误:', error);
return [];
}
}
// 使用示例
getNews('baidu').then(newsList => {
newsList.slice(0, 5).forEach(news => {
console.log(`标题: ${news.title}`);
console.log(`链接: ${news.url}\n`);
});
});
```
#### 使用 axios
```javascript
const axios = require('axios');
async function getNews(platform) {
try {
const response = await axios.get('https://newsapi.ws4.cn/api/v1/dailynews/', {
params: { platform }
});
console.log(`获取到 ${response.data.data.length} 条新闻`);
return response.data.data;
} catch (error) {
console.error('发生错误:', error);
return [];
}
}
// 使用示例
getNews('baidu').then(newsList => {
newsList.forEach((news, index) => {
console.log(`${index + 1}. ${news.title}`);
});
});
```
#### Node.js 使用 https 模块
```javascript
const https = require('https');
function getNews(platform, callback) {
const url = `https://newsapi.ws4.cn/api/v1/dailynews/?platform=${platform}`;
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
const result = JSON.parse(data);
callback(null, result);
} catch (error) {
callback(error, null);
}
});
}).on('error', (error) => {
callback(error, null);
});
}
// 使用示例
getNews('baidu', (error, result) => {
if (error) {
console.error('请求失败:', error);
return;
}
console.log(`获取到 ${result.data.length} 条新闻`);
});
```
---
### 4. Java
#### 使用 HttpURLConnection
```java
import java.io.*;
import java.net.*;
import java.util.*;
public class NewsApiClient {
public static String getNews(String platform) {
try {
String url = "https://newsapi.ws4.cn/api/v1/dailynews/?platform=" + platform;
URL urlObj = new URL(url);
HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/json");
int responseCode = conn.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String jsonResponse = getNews("baidu");
System.out.println(jsonResponse);
}
}
```
#### 使用 OkHttp
```java
import okhttp3.*;
import java.io.IOException;
public class NewsApi {
private static final OkHttpClient client = new OkHttpClient();
public static void getNews(String platform) throws IOException {
HttpUrl url = HttpUrl.parse("https://newsapi.ws4.cn/api/v1/dailynews/")
.newBuilder()
.addQueryParameter("platform", platform)
.build();
Request request = new Request.Builder()
.url(url)
.get()
.build();
try (Response response = client.newCall(request).execute()) {
String jsonData = response.body().string();
System.out.println(jsonData);
}
}
public static void main(String[] args) throws IOException {
getNews("baidu");
}
}
```
---
### 5. Go
```go
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
type News struct {
Title string `json:"title"`
URL string `json:"url"`
Content string `json:"content"`
Source string `json:"source"`
PublishTime string `json:"publish_time"`
}
type Response struct {
Status string `json:"status"`
Data []News `json:"data"`
Msg string `json:"msg"`
}
func getNews(platform string) (*Response, error) {
url := fmt.Sprintf("https://newsapi.ws4.cn/api/v1/dailynews/?platform=%s", platform)
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var result Response
if err := json.Unmarshal(body, &result); err != nil {
return nil, err
}
return &result, nil
}
func main() {
data, err := getNews("baidu")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("获取到 %d 条新闻\n", len(data.Data))
for i, news := range data.Data {
if i >= 5 {
break
}
fmt.Printf("%d. %s\n", i+1, news.Title)
}
}
```
---
### 6. PHP
```php
<?php
function getNews($platform = 'baidu') {
$url = 'https://newsapi.ws4.cn/api/v1/dailynews/?platform=' . $platform;
$response = file_get_contents($url);
if ($response === false) {
return null;
}
return json_decode($response, true);
}
// 使用示例
$newsData = getNews('baidu');
if ($newsData && $newsData['status'] === '200') {
echo "获取到 " . count($newsData['data']) . " 条新闻\n";
foreach (array_slice($newsData['data'], 0, 5) as $news) {
echo "标题: " . $news['title'] . "\n";
echo "链接: " . $news['url'] . "\n\n";
}
}
?>
```
---
### 7. Ruby
```ruby
require 'net/http'
require 'json'
require 'uri'
def get_news(platform = 'baidu')
uri = URI.parse("https://newsapi.ws4.cn/api/v1/dailynews/?platform=#{platform}")
response = Net::HTTP.get_response(uri)
if response.is_a?(Net::HTTPSuccess)
data = JSON.parse(response.body)
return data
else
puts "请求失败: #{response.code}"
return nil
end
end
# 使用示例
result = get_news('baidu')
if result && result['status'] == '200'
puts "获取到 #{result['data'].size} 条新闻"
result['data'].first(5).each_with_index do |news, index|
puts "#{index + 1}. #{news['title']}"
end
end
```
---
## 错误处理
### 常见错误码
| 状态码 | 说明 | 解决方案 |
|--------|------|----------|
| 200 | 成功 | 正常处理数据 |
| 404 | 平台代码错误 | 检查平台代码是否正确 |
| 500 | 服务器内部错误 | 稍后重试 |
### 错误处理示例(Python
```python
import requests
import time
def get_news_with_retry(platform, max_retries=3):
url = "https://newsapi.ws4.cn/api/v1/dailynews/"
for attempt in range(max_retries):
try:
response = requests.get(url, params={"platform": platform}, timeout=10)
if response.status_code == 200:
data = response.json()
if data.get('status') == '200':
return data.get('data', [])
else:
print(f"API返回错误: {data.get('msg')}")
return []
elif response.status_code == 404:
print(f"平台代码错误: {platform}")
return []
elif response.status_code == 500:
print(f"服务器错误,第 {attempt + 1} 次重试...")
time.sleep(2)
else:
print(f"未知错误: {response.status_code}")
return []
except requests.exceptions.Timeout:
print(f"请求超时,第 {attempt + 1} 次重试...")
time.sleep(2)
except requests.exceptions.ConnectionError:
print(f"连接错误,第 {attempt + 1} 次重试...")
time.sleep(2)
except Exception as e:
print(f"发生未知错误: {e}")
return []
print("达到最大重试次数,请求失败")
return []
```
---
## 注意事项
### 1. 数据时效性
- 数据实时更新,建议不要频繁请求
- 推荐缓存时间:5-10 分钟
- 不同平台更新频率不同
### 2. 请求频率限制
- 目前没有明确的速率限制
- 建议合理使用,避免过度请求
- 生产环境建议加入请求队列
### 3. 数据准确性
- 数据仅供参考,不应作为新闻的主要来源
- 建议与官方平台数据交叉验证
### 4. 合法使用
- API 仅供合法使用
- 任何非法使用均不受支持
- 用户需自行承担使用责任
### 5. HTTPS 要求
- 必须使用 HTTPS 协议
- HTTP 请求可能会被拒绝
---
## 常见问题
### Q1: 如何获取多个平台的数据?
**A**: 使用逗号分隔多个平台代码
```bash
curl "https://newsapi.ws4.cn/api/v1/dailynews/?platform=baidu,weibo,zhihu"
```
### Q2: 数据多久更新一次?
**A**: 不同平台更新频率不同,一般为 30 分钟到 2 小时不等。建议缓存数据,避免频繁请求。
### Q3: 是否需要 API 密钥?
**A**: 目前不需要,接口可以直接调用。
### Q4: 支持哪些编程语言?
**A**: 支持所有支持 HTTP 请求的编程语言,本文档提供了 Python、JavaScript、Java、Go、PHP、Ruby 等示例。
### Q5: 接口限流吗?
**A**: 目前没有明确的限流策略,但建议合理使用。
### Q6: 如何处理中文编码?
**A**: 接口返回的是 UTF-8 编码的 JSON,大多数现代语言都能自动处理。如果遇到乱码,请确保使用 UTF-8 解码。
### Q7: 如何获取新闻的详细内容?
**A**: API 只返回标题和链接,详细内容需要访问链接页面获取。
### Q8: 数据可以商用吗?
**A**: 数据来源于各公开平台,使用时请遵守各平台的使用协议和相关法律法规。
---
## 技术支持
- **API 文档**: https://newsapi.ws4.cn/docs
- **健康检查**: https://newsapi.ws4.cn/health
---
## 更新日志
| 日期 | 版本 | 说明 |
|------|------|------|
| 2026-01-24 | 1.0.0 | 初始版本,支持 20+ 个平台 |
---
**免责声明**: 本 API 提供的信息仅供参考,使用者应从其他平台验证信息的准确性和时效性。