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フィードのリンクを媒体の記事 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)が返されることを確認しています。

地域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 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
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 レスポンス形式

すべてのフィードは 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 ニュースのリダイレクト 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 — トップ記事、トピックフィード、検索フィード、複数地域への対応、一般的な使用パターンを含む初回リリース。

コメント