mcpField
G
google-news

google-news

github.com/outsharp生产力4356 次安装32 周前更新
代码仓库

关于 google-news

面向开发者和新闻订阅用户的 Google News 公共 RSS 源使用指南,介绍如何跨地区获取头条、主题和关键词搜索结果,无需身份验证。

主要功能

  1. 01头条、主题和搜索订阅源
  2. 02语言地区参数
  3. 03搜索运算符与日期筛选
  4. 04RSS 2.0 XML 响应字段
  5. 05重定向处理与请求建议

适用场景

  1. 01获取指定地区的新闻头条
  2. 02跟踪主题或关键词相关文章
  3. 03创建多地区新闻订阅
  4. 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):

地区hlglceid示例 URL
🇺🇸 美国en-USUSUS:enhttps://news.google.com/rss?hl=en-US&gl=US&ceid=US:en
🇬🇧 英国en-GBGBGB:enhttps://news.google.com/rss?hl=en-GB&gl=GB&ceid=GB:en
🇮🇳 印度en-INININ:enhttps://news.google.com/rss?hl=en-IN&gl=IN&ceid=IN:en
🇦🇺 澳大利亚en-AUAUAU:enhttps://news.google.com/rss?hl=en-AU&gl=AU&ceid=AU:en
🇨🇦 加拿大en-CACACA:enhttps://news.google.com/rss?hl=en-CA&gl=CA&ceid=CA:en
🇩🇪 德国deDEDE:dehttps://news.google.com/rss?hl=de&gl=DE&ceid=DE:de
🇫🇷 法国frFRFR:frhttps://news.google.com/rss?hl=fr&gl=FR&ceid=FR:fr
🇯🇵 日本jaJPJP:jahttps://news.google.com/rss?hl=ja&gl=JP&ceid=JP:ja
🇧🇷 巴西pt-BRBRBR:pt-419https://news.google.com/rss?hl=pt-BR&gl=BR&ceid=BR:pt-419
🇲🇽 墨西哥es-419MXMX:es-419https://news.google.com/rss?hl=es-419&gl=MX&ceid=MX:es-419
🇮🇱 以色列en-ILILIL:enhttps://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
OROR 运算符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&amp;gl=US&amp;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>&nbsp;&nbsp;<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、多地区支持和常见用法。

评论

支持 Markdown