# 每日热点新闻 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 ``` --- ### 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 提供的信息仅供参考,使用者应从其他平台验证信息的准确性和时效性。