关于 google-news
面向开发者和新闻订阅用户的 Google News 公共 RSS 源使用指南,介绍如何跨地区获取头条、主题和关键词搜索结果,无需身份验证。
主要功能
- 01头条、主题和搜索订阅源
- 02语言地区参数
- 03搜索运算符与日期筛选
- 04RSS 2.0 XML 响应字段
- 05重定向处理与请求建议
适用场景
- 01获取指定地区的新闻头条
- 02跟踪主题或关键词相关文章
- 03创建多地区新闻订阅
- 04将订阅链接解析到出版商文章
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ outsharp/ shipp-skills --skill google-news安装后在 Claude Code 中输入/google-news确认已加载。
附带文件README.md
详细介绍
Google News RSS API
Google News 是一项免费的新闻聚合服务,汇集了全球数千家出版商的新闻标题。Google 通过公开的 RSS 2.0 端点提供订阅源,无需身份验证或 API 密钥。
基础 URL
https://news.google.com/rss
所有订阅源 URL 都通过在此基础上附加路径和查询参数构成。
查询参数
每个订阅源 URL 都接受以下查询参数,用于设置地区和语言:
| 参数 | 必填 | 描述 | 示例 |
|---|---|---|---|
hl | 是 | 界面语言/区域设置代码 | en-US、fr、de、ja、pt-BR、es-419 |
gl | 是 | 国家/地理位置(ISO 3166-1 alpha-2) | US、GB、IN、DE、JP、BR |
ceid | 是 | 复合区域设置键,格式为 {gl}:{language} | US:en、GB:en、DE:de、JP:ja、BR:pt-419 |
**重要:**这三个参数应保持一致。值不匹配可能会导致结果异常或为空。
支持的地区(已验证)
以下地区均经过测试,确认可以返回有效的 RSS 订阅源(HTTP 200):
| 地区 | hl | gl | ceid | 示例 URL |
|---|---|---|---|---|
| 🇺🇸 美国 | en-US | US | US:en | https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en |
| 🇬🇧 英国 | en-GB | GB | GB:en | https://news.google.com/rss?hl=en-GB&gl=GB&ceid=GB:en |
| 🇮🇳 印度 | en-IN | IN | IN:en | https://news.google.com/rss?hl=en-IN&gl=IN&ceid=IN:en |
| 🇦🇺 澳大利亚 | en-AU | AU | AU:en | https://news.google.com/rss?hl=en-AU&gl=AU&ceid=AU:en |
| 🇨🇦 加拿大 | en-CA | CA | CA:en | https://news.google.com/rss?hl=en-CA&gl=CA&ceid=CA:en |
| 🇩🇪 德国 | de | DE | DE:de | https://news.google.com/rss?hl=de&gl=DE&ceid=DE:de |
| 🇫🇷 法国 | fr | FR | FR:fr | https://news.google.com/rss?hl=fr&gl=FR&ceid=FR:fr |
| 🇯🇵 日本 | ja | JP | JP:ja | https://news.google.com/rss?hl=ja&gl=JP&ceid=JP:ja |
| 🇧🇷 巴西 | pt-BR | BR | BR:pt-419 | https://news.google.com/rss?hl=pt-BR&gl=BR&ceid=BR:pt-419 |
| 🇲🇽 墨西哥 | es-419 | MX | MX:es-419 | https://news.google.com/rss?hl=es-419&gl=MX&ceid=MX:es-419 |
| 🇮🇱 以色列 | en-IL | IL | IL:en | https://news.google.com/rss?hl=en-IL&gl=IL&ceid=IL:en |
订阅源类型
1. 头条新闻
返回指定地区当前的头条新闻。
URL 模式:
https://news.google.com/rss?hl={hl}&gl={gl}&ceid={gl}:{lang}
示例 — 美国头条新闻:
https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en
2. 主题订阅源
返回特定新闻主题/版块的文章。
URL 模式:
https://news.google.com/rss/topics/{TOPIC_ID}?hl={hl}&gl={gl}&ceid={gl}:{lang}
已知主题 ID(英语,美国):
| 主题 | 主题 ID |
|---|---|
| 世界 | CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx1YlY4U0FtVnVHZ0pWVXlnQVAB |
| 国家/美国 | CAAqIggKIhxDQkFTRHdvSkwyMHZNRGxqTjNjU0FtVnVLQUFQAQ |
| 商业 | CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB |
| 科技 | CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB |
| 娱乐 | CAAqJggKIiBDQkFTRWdvSUwyMHZNREpxYW5RU0FtVnVHZ0pWVXlnQVAB |
| 体育 | CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp1ZEdvU0FtVnVHZ0pWVXlnQVAB |
| 科学 | CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp0Y1RjU0FtVnVHZ0pWVXlnQVAB |
| 健康 | CAAqIQgKIhtDQkFTRGdvSUwyMHZNR3QwTlRFU0FtVnVLQUFQAQ |
示例 — 美国科技新闻:
https://news.google.com/rss/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB?hl=en-US&gl=US&ceid=US:en
**注意:**主题 ID 是经过 base64 编码的 protocol buffer 字符串,可能因语言/地区而异。上述 ID 适用于
en-US。如需查找其他区域设置的主题 ID,请查看对应区域设置下 Google News 网站上的 RSS 链接。
3. 关键词 / 搜索 Feed
返回与搜索查询匹配的文章。
URL 模式:
https://news.google.com/rss/search?q={query}&hl={hl}&gl={gl}&ceid={gl}:{lang}
查询修饰符:
| 修饰符 | 说明 | 示例 |
|---|---|---|
+ 或空格 | AND(默认) | q=artificial+intelligence |
OR | OR 运算符 | q=Tesla+OR+SpaceX |
- | 排除词 | q=Apple+-fruit |
"..." | 精确短语(对引号进行 URL 编码) | q=%22climate+change%22 |
when:7d | 时间筛选——最近 N 天 / 小时 | q=Bitcoin+when:7d |
when:1h | 时间筛选——最近 1 小时 | q=breaking+news+when:1h |
after:YYYY-MM-DD | 指定日期之后的文章 | q=Olympics+after:2024-07-01 |
before:YYYY-MM-DD | 指定日期之前的文章 | q=Olympics+before:2024-08-15 |
site: | 限定为某个域名 | q=AI+site:reuters.com |
示例——搜索最近 7 天内与“artificial intelligence”相关的内容:
https://news.google.com/rss/search?q=artificial+intelligence+when:7d&hl=en-US&gl=US&ceid=US:en
RSS 响应格式
所有 Feed 均返回 RSS 2.0 XML。以下是通用结构:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<generator>NFE/5.0</generator>
<title>Top stories - Google News</title>
<link>https://news.google.com/?hl=en-US&gl=US&ceid=US:en</link>
<language>en-US</language>
<webMaster>[email protected]</webMaster>
<copyright>...</copyright>
<lastBuildDate>Wed, 18 Feb 2026 20:50:00 GMT</lastBuildDate>
<item>
<title>Article headline - Publisher Name</title>
<link>https://news.google.com/rss/articles/...</link>
<guid isPermaLink="true">https://news.google.com/rss/articles/...</guid>
<pubDate>Wed, 18 Feb 2026 19:05:07 GMT</pubDate>
<description>
<ol>
<li><a href="...">Article Title</a> <font color="#6f6f6f">Publisher</font></li>
...
</ol>
</description>
<source url="https://publisher-domain.com">Publisher Name</source>
</item>
</channel>
</rss>
每个 <item> 的关键字段
| 字段 | 说明 |
|---|---|
<title> | 标题文本,后接 - Publisher Name |
<link> | Google News 重定向 URL。在浏览器中访问会重定向到实际文章。 |
<guid> | 唯一标识符(与 <link> 相同) |
<pubDate> | RFC 2822 格式的发布日期 |
<description> | HTML 摘要,其中包含相关 / 聚类文章的有序列表(<ol>),附有链接和发布方名称 |
<source url="..."> | 发布方名称及其主页 URL |
常见模式
获取头条新闻(curl + grep)
curl -s "https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en" \
| grep -oP '<title>\K[^<]+'
获取头条新闻(Python)
import feedparser
feed = feedparser.parse(
"https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en"
)
for entry in feed.entries:
print(f"{entry.published} — {entry.title}")
print(f" Link: {entry.link}")
print()
获取主题 Feed(curl + xmllint)
TOPIC="CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB"
curl -s "https://news.google.com/rss/topics/${TOPIC}?hl=en-US&gl=US&ceid=US:en" \
| xmllint --xpath '//item/title/text()' -
搜索文章(Python)
import feedparser
import urllib.parse
query = urllib.parse.quote("artificial intelligence when:7d")
url = f"https://news.google.com/rss/search?q={query}&hl=en-US&gl=US&ceid=US:en"
feed = feedparser.parse(url)
for entry in feed.entries[:10]:
print(f"• {entry.title}")
获取特定地点的新闻(Node.js)
const https = require("https");
const { parseStringPromise } = require("xml2js");
const url =
"https://news.google.com/rss?hl=en-GB&gl=GB&ceid=GB:en";
https.get(url, (res) => {
let data = "";
res.on("data", (chunk) => (data += chunk));
res.on("end", async () => {
const result = await parseStringPromise(data);
const items = result.rss.channel[0].item || [];
items.slice(0, 10).forEach((item) => {
console.log(item.title[0]);
});
});
});
从描述中提取相关文章(Python)
import feedparser
from html.parser import HTMLParser
class RelatedParser(HTMLParser):
def __init__(self):
super().__init__()
self.articles = []
self._in_a = False
self._href = ""
self._text = ""
def handle_starttag(self, tag, attrs):
if tag == "a":
self._in_a = True
self._href = dict(attrs).get("href", "")
self._text = ""
def handle_endtag(self, tag):
if tag == "a" and self._in_a:
self.articles.append({"title": self._text, "link": self._href})
self._in_a = False
def handle_data(self, data):
if self._in_a:
self._text += data
feed = feedparser.parse(
"https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en"
)
for entry in feed.entries[:3]:
print(f"\n=== {entry.title} ===")
parser = RelatedParser()
parser.feed(entry.description)
for art in parser.articles:
print(f" • {art['title']}")
print(f" {art['link']}")
构建多地区新闻聚合器(Python)
import feedparser
REGIONS = {
"US": "hl=en-US&gl=US&ceid=US:en",
"UK": "hl=en-GB&gl=GB&ceid=GB:en",
"DE": "hl=de&gl=DE&ceid=DE:de",
"JP": "hl=ja&gl=JP&ceid=JP:ja",
"BR": "hl=pt-BR&gl=BR&ceid=BR:pt-419",
}
for region, params in REGIONS.items():
feed = feedparser.parse(f"https://news.google.com/rss?{params}")
print(f"\n--- {region} Top 3 ---")
for entry in feed.entries[:3]:
print(f" • {entry.title}")
通过轮询监控主题(bash)
#!/usr/bin/env bash
FEED="https://news.google.com/rss/search?q=breaking+news+when:1h&hl=en-US&gl=US&ceid=US:en"
SEEN_FILE="/tmp/gnews_seen.txt"
touch "$SEEN_FILE"
while true; do
curl -s "$FEED" | grep -oP '<guid[^>]*>\K[^<]+' | while read -r guid; do
if ! grep -qF "$guid" "$SEEN_FILE"; then
echo "$guid" >> "$SEEN_FILE"
TITLE=$(curl -s "$FEED" | grep -oP "<item>.*?<guid[^>]*>${guid}.*?</item>" \
| grep -oP '<title>\K[^<]+' | head -1)
echo "[NEW] $TITLE"
fi
done
sleep 120
done
解析 Google News 重定向 URL
RSS Feed 中的文章链接指向 https://news.google.com/rss/articles/...,该链接会重定向(HTTP 302/303)到发布方的实际 URL。解析最终 URL 的方法如下:
curl
curl -Ls -o /dev/null -w '%{url_effective}' \
"https://news.google.com/rss/articles/CBMiWkFV..."
Python
import requests
response = requests.head(
"https://news.google.com/rss/articles/CBMiWkFV...",
allow_redirects=True,
timeout=10,
)
print(response.url) # final publisher URL
速率限制
Google 未公布 RSS Feed 的官方速率限制。根据社区观察:
| 指南 | 建议 |
|---|---|
| 轮询间隔 | 对同一 Feed 的请求间隔至少为 60 秒 |
| 并发请求 | 并发连接数保持在约 10 个以下 |
| 突发请求行为 | 快速连续请求可能触发 HTTP 429 或 CAPTCHA 验证 |
| User-Agent | 使用描述性的 User-Agent;空值或类似机器人的字符串可能会被拦截 |
如果收到 HTTP 429 响应,请按指数退避(例如,1 分钟 → 2 分钟 → 4 分钟)。
错误处理
| HTTP 状态 | 含义 | 操作 |
|---|---|---|
| 200 | 成功 | 解析 RSS XML |
| 301/302 | 重定向 | 跟随重定向(大多数 HTTP 客户端会自动执行) |
| 404 | 未找到 Feed | 检查 URL、主题 ID 或区域设置参数 |
| 429 | 速率受限 | 退避,并在延迟后重试 |
| 5xx | 服务器错误 | 使用指数退避重试 |
提示
- 无需身份验证 — 所有 Feed 均完全公开,可立即开始抓取。
- 在 Python 中使用
feedparser— 它可以处理 RSS 解析、日期规范化和编码边缘情况。 - 组合搜索修饰符 — 使用
q=Tesla+site:reuters.com+when:30d获取精准结果。 - 主题 ID 因地区设置而异 — 英文主题 ID 可能无法用于
hl=de。请查看该地区设置下的 Google News 页面,以找到正确的 ID。 <description>字段是 HTML — 其中包含以<ol>列表呈现的聚类/相关报道。解析 HTML,即可从每条报道中提取多个来源。<title>包含发布方名称 — 格式为Headline text - Publisher Name。从右侧按-(空格、连字符、空格)拆分,即可分离标题和发布方名称。- Feed 结果数量有限 — Google 通常每个 Feed 返回约 100 条内容。使用带日期筛选条件的搜索来翻查更早的结果。
- 遵守版权声明 — Google 的 RSS Feed 旨在供个人在 Feed 阅读器中非商业使用。如需用于其他用途,请查阅 Google 的条款。
- 按需解析重定向 — 只有在确实需要最终链接时,才将 Google 重定向 URL 解析为发布方 URL。这样可以减少请求。
- 设置恰当的 User-Agent — 例如
User-Agent: MyNewsBot/1.0 ([email protected])。某些环境若未设置,可能会遭到拦截。
更新日志
- 0.1.0 — 首次发布,包含头条、主题 Feed、搜索 Feed、多地区支持和常见用法。