google-news について
Google News の公開 RSS フィードを利用するためのガイドです。開発者やニュースフィードの利用者向けに、認証なしで地域別のトップ記事、トピック、キーワード検索を取得する方法を説明します。
主な機能
- 01トップ記事、トピック、検索フィード
- 02言語と地域のパラメーター
- 03検索演算子と日付フィルター
- 04RSS 2.0 XML の応答フィールド
- 05リダイレクト処理とリクエストの指針
活用シーン
- 01指定地域のヘッドラインを取得
- 02トピックやキーワードの記事を追跡
- 03複数地域のニュースフィードを作成
- 04フィードのリンクを媒体の記事 URL に解決
インストール
コマンドをコピーしてターミナルで実行します。
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 は、認証や API キーが不要な公開 RSS 2.0 エンドポイントを通じてフィードを提供しています。
ベース 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 |
重要: 3 つのパラメーターはすべて一貫している必要があります。値が一致しない場合、予期しない結果や空の結果が返されることがあります。
サポート対象の地域(検証済み)
次の地域は、テスト済みで、有効な 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 Buffers 文字列です。言語や地域によって異なる場合があります。上記の ID は
en-US用です。他のロケールのトピック ID を確認するには、そのロケールの Google News ウェブサイトで RSS リンクを調べてください。
3. キーワード/検索フィード
検索クエリに一致する記事を返します。
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 レスポンス形式
すべてのフィードは 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 ニュースのリダイレクト URL です。ブラウザーで開くと実際の記事にリダイレクトされます。 |
<guid> | 一意の識別子(<link> と同じ) |
<pubDate> | RFC 2822 形式の公開日 |
<description> | 関連記事/クラスタ化された記事を、リンクと配信元名とともに並べた順序付きリスト(<ol>)を含む HTML スニペット |
<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()
トピックフィードを取得(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 ニュースのリダイレクト URL の解決
RSS フィード内の記事リンクは https://news.google.com/rss/articles/... を指しており、実際の配信元 URL にリダイレクト(HTTP 302/303)されます。最終 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 フィードの公式なレート制限を公開していません。コミュニティでの観察に基づく目安は次のとおりです。
| ガイドライン | 推奨事項 |
|---|---|
| ポーリング間隔 | 同じフィードへのリクエスト間隔を 60 秒以上にする |
| 同時リクエスト | 同時接続数を約 10 未満に抑える |
| バースト時の挙動 | 短時間にリクエストが集中すると、HTTP 429 や CAPTCHA チャレンジが発生することがあります |
| User-Agent | 内容が分かる User-Agent を使用してください。空の文字列やボットのような文字列はブロックされることがあります |
HTTP 429 の応答を受け取った場合は、指数バックオフを行います(例:1 分 → 2 分 → 4 分)。
エラー処理
| HTTP ステータス | 意味 | 対応 |
|---|---|---|
| 200 | 成功 | RSS XML を解析します |
| 301/302 | リダイレクト | リダイレクトに従います(多くの HTTP クライアントでは自動的に処理されます) |
| 404 | フィードが見つかりません | URL、トピック ID、またはロケールのパラメーターを確認します |
| 429 | レート制限 | バックオフし、時間を置いて再試行します |
| 5xx | サーバーエラー | 指数バックオフで再試行します |
ヒント
- 認証は不要です — すべてのフィードは完全に公開されています。すぐに取得を開始できます。
- Python では
feedparserを使用してください — RSS の解析、日付の正規化、エンコードのエッジケースに対応します。 - 検索修飾子を組み合わせてください —
q=Tesla+site:reuters.com+when:30dのように指定すると、検索結果を絞り込めます。 - トピック ID はロケール固有です — 英語のトピック ID は
hl=deでは機能しない場合があります。該当するロケールの Google News ページを確認して、正しい ID を見つけてください。 <description>フィールドは HTML です —<ol>リスト形式で、関連する記事がまとめられています。HTML を解析して、各ニュース記事から複数の情報源を抽出してください。<title>には発行元が含まれます — 形式は見出しのテキスト - 発行元名です。右側から-(スペース、ハイフン、スペース)で分割して、見出しと発行元を分けてください。- フィードの結果には上限があります — Google が各フィードで返す項目は通常約 100 件です。古い結果を取得するには、日付フィルターを指定して検索してください。
- 著作権に関する注意事項を守ってください — Google の RSS フィードは、フィードリーダーで個人的かつ非商用に利用することを想定しています。それ以外の用途については、Google の利用規約を確認してください。
- リダイレクトの解決は必要な場合に限ってください — 最終リンクが必要になったときだけ、Google のリダイレクト URL を発行元の URL に解決してください。リクエスト数を節約できます。
- 適切な User-Agent を設定してください — 例:
User-Agent: MyNewsBot/1.0 ([email protected])。設定しないと、一部の環境ではブロックされる場合があります。
変更履歴
- 0.1.0 — トップ記事、トピックフィード、検索フィード、複数地域への対応、一般的な使用パターンを含む初回リリース。