# NewsAPI × Python でニュースを取得しよう！APIキーの取得から使い方・無料プランの注意点まで解説！

> NewsAPIは、世界中のニュース記事をキーワードで検索して取得できるAPIです。本記事では、APIキーの取得、Pythonのrequestsでニュースを取得するコード、返ってくるデータの中身、無料プランの制限や注意点を分かりやすく解説します！

- URL: https://toukei-lab.com/newsapi-python
- 公開: 2026.10.28
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、世界中のニュースを取得できる「NewsAPI」を、Pythonで使う方法を分かりやすく解説していきます！APIキーの取得から、実際のコード、無料プランの注意点まで見ていきましょう！
:::

こんにちは！ウマたんです！

毎朝、気になる分野のニュースを、いろんなサイトを回ってチェックする。

これ、地味に時間がかかりますよね。

「機械学習に関する、話題のニュースだけを自動で集められたらいいのに……」

そんなときに便利なのが、世界中のニュース記事をプログラムから取得できる「**NewsAPI**」です。

実は、とてもかんたんに使えるんです！

:::talk{who="man" side="left"}
APIって聞くと難しそう……。プログラミング初心者でも使えるの？
:::

:::talk{who="woman"}
取得したニュースを、要約したり分析したりにも使ってみたい！
:::

本記事では、次の5つを順番に解説していきます。

:::point
**・NewsAPIとは？**\
**・APIキーを取得する**\
**・Pythonでニュースを取得する**\
**・返ってくるデータの中身とエラーへの対処**\
**・NewsAPIを使うときの注意点（無料プランの制限）**
:::

以下のYouTube動画でも解説していますので、あわせてチェックしてみてください！

::youtube{#3Q_VAB1_d00}

## NewsAPIとは？

**NewsAPIとは、世界中のニュースサイトやブログの記事を、キーワードなどで検索して取得できるAPI**です。

公式のドキュメントによると、15万を超えるニュースサイトやブログの記事を検索できます（2026年10月時点）。

### そもそもAPIとは？

**API（Application Programming Interface）とは、あるサービスの機能やデータを、外のプログラムから使うための窓口**のことです。

レストランにたとえると、APIは「注文の窓口」のようなもの。

お客さん（あなたのプログラム）が「機械学習のニュースを5件ください」と注文すると、厨房（NewsAPIのサーバー）がニュースのデータを用意して、返してくれるイメージです。

実は、ふだん使っているサービスの多くが、APIを用意しています。

Google のいろんなサービスや Notion、SNS など、<mark>APIを組み合わせると、とても面白いプログラムが作れる</mark>んです！

Pythonでいろいろなサービスの API を使う方法は、以下の記事でも解説しています。

<https://toukei-lab.com/api>

### NewsAPIの2つの主なエンドポイント

NewsAPI には、データを取りに行く先（エンドポイント）がいくつかあります。

よく使うのは、次の2つです。

| エンドポイント | できること | 主なパラメータ |
|---|---|---|
| `/v2/everything` | キーワードで、記事全体から検索する | `q`（キーワード）、`language`、`sortBy`、`from`・`to`（期間） |
| `/v2/top-headlines` | 今のトップニュース（見出し）を取得する | `country`（国）、`category`（分野）、`sources`（ニュースサイト） |

今回は、キーワードで記事を探せる `/v2/everything` を中心に使っていきます。

## APIキーを取得する

NewsAPI を使うには、まず「**APIキー**」が必要です。

APIキーとは、「この注文は誰からのものか」をNewsAPIに伝えるための、あなた専用の合言葉のようなものです。

:::point
**1.** 「NewsAPI」で検索して、公式サイト（newsapi.org）を開く\
**2.** 「Get API Key」を押す\
**3.** 名前やメールアドレスなどを入れて、会員登録をする\
**4.** 登録が終わると、あなた専用のAPIキーが表示される
:::

### APIキーはコードに直接書かない

ここでとても大事なのが、<mark>APIキーをコードに直接書かない</mark>ことです。

コードにキーを書いたまま GitHub などに公開してしまうと、他人にキーを使われてしまうおそれがあります。

そこで、キーは「**環境変数**」や、ツールの「**シークレット**」機能に入れておき、コードからはそこを読みに行くようにしましょう。

:::box{title="APIキーの置き場所の例"}
**・自分のパソコンで動かす場合**：環境変数 `NEWS_API_KEY` にキーを入れておく\
**・Google Colab で動かす場合**：左のメニューの「シークレット」（鍵のマーク）に `NEWS_API_KEY` という名前でキーを登録しておく
:::

自分のパソコン（Mac やLinux）なら、ターミナルで次のように設定できます。

```bash
export NEWS_API_KEY="ここにあなたのAPIキー"
```

この行はターミナルで打つだけにして、コードのファイルには書かないのがポイントです。

Google Colab の場合は、シークレットに登録したキーを、次のように読み込めます。

```python
from google.colab import userdata

NEWS_API_KEY = userdata.get("NEWS_API_KEY")
```

こうしておくと、ノートブックを他の人に共有しても、キーそのものは見えないので安心です。

Google Colab の使い方は、以下の記事で解説しています。

<https://toukei-lab.com/google-colaboratory>

## Pythonでニュースを取得する

それでは、実際にコードを書いて、ニュースを取得していきましょう！

### 使うのは requests ライブラリ

Python からAPIにリクエストを送るには、「**requests**」というライブラリを使うのが定番です。

Google Colab には最初から入っています。自分のパソコンで使う場合は、次のコマンドでインストールしておきましょう。

```bash
pip install requests
```

### ニュースを5件取得するコード

今回は、「machine learning（機械学習）」に関する英語のニュースを、人気順で5件取得してみます。

```python
import os
import requests

# APIキーは環境変数から読む（Colabなら userdata.get("NEWS_API_KEY")）
NEWS_API_KEY = os.environ["NEWS_API_KEY"]

# リクエストを送る先（キーワードで記事を探すエンドポイント）
NEWS_API_URL = "https://newsapi.org/v2/everything"

params = {
    "q": "machine learning",  # 検索するキーワード
    "sortBy": "popularity",   # 人気順に並べる
    "language": "en",         # 英語の記事
    "pageSize": 5,            # 5件だけ取得する
}

# APIキーは「X-Api-Key」というヘッダーで渡す
headers = {"X-Api-Key": NEWS_API_KEY}

response = requests.get(NEWS_API_URL, params=params, headers=headers, timeout=10)
data = response.json()
```

やっていることは、とてもシンプルです。

:::point
**1.** 環境変数からAPIキーを読む\
**2.** リクエストを送る先のURLを決める\
**3.** パラメータ（何を、どう並べて、何件ほしいか）を決める\
**4.** `requests.get()` でリクエストを送り、返ってきたデータを `.json()` で Python の辞書にする
:::

ちなみに動画では、APIキーを `apiKey` というパラメータに入れて渡していました。

公式のドキュメントでは、パラメータの `apiKey` と、ヘッダーの `X-Api-Key` のどちらで渡してもよいことになっています。

ヘッダーで渡すと、<mark>キーがURLの中に入らないので、ログなどにキーが残りにくい</mark>というメリットがあります。

### よく使うパラメータ

`/v2/everything` で使える、主なパラメータを表にまとめておきます（2026年10月時点の公式ドキュメントより）。

| パラメータ | 意味 | 値の例 |
|---|---|---|
| `q` | 検索するキーワード（タイトルと本文から探す） | `"machine learning"`、`"AI AND robot"` |
| `searchIn` | キーワードを探す場所 | `title`、`description`、`content` |
| `language` | 記事の言語 | `en`（英語）、`fr`（フランス語）など |
| `sortBy` | 並べ方 | `relevancy`（関連度）、`popularity`（人気）、`publishedAt`（新しい順。何も指定しないとこれ） |
| `from`・`to` | 記事の期間 | `"2026-10-01"` のような日付 |
| `domains` | 特定のサイトだけにしぼる | `"techcrunch.com"` |
| `pageSize` | 1回で取得する件数 | 最大100（何も指定しないと100） |
| `page` | 何ページ目を取得するか | `2` |

キーワードの `q` では、`AND`・`OR`・`NOT` を使った検索や、`"..."` で囲んだ完全一致の検索もできます。

:::warn
2026年10月時点の公式ドキュメントでは、`language` で選べる言語の一覧に日本語は入っていません。英語のニュースを中心に使うのがおすすめです。
:::

### 結果を見やすく表示する

取得したデータを、見やすく表示してみましょう。

```python
if data["status"] == "ok":
    print("見つかった記事の数:", data["totalResults"])
    for article in data["articles"]:
        print(article["publishedAt"], article["source"]["name"])
        print(article["title"])
        print(article["url"])
        print("-" * 40)
else:
    print("エラー:", data["code"], data["message"])
```

実行すると、記事ごとに「公開日時・ニュースサイトの名前・タイトル・URL」が表示されます。

URL をクリックすれば、そのニュースの元の記事に飛べますよ！

### pandas で表にする

データ分析に使うなら、pandas の表（データフレーム）にしておくと便利です。

```python
import pandas as pd

# 入れ子になった source（id と name）も、列に展開してくれる
df = pd.json_normalize(data["articles"])
df[["publishedAt", "source.name", "title", "url"]]
```

`pd.json_normalize()` を使うと、`source` の中の `name` が `source.name` という列になって、すっきりした表にできます。

### トップニュースを取得する

キーワードではなく、今のトップニュースを取得したいときは、`/v2/top-headlines` を使います。

```python
params = {
    "country": "us",           # アメリカのトップニュース
    "category": "technology",  # テクノロジーの分野
    "pageSize": 5,
}
response = requests.get(
    "https://newsapi.org/v2/top-headlines",
    params=params,
    headers=headers,
    timeout=10,
)
data = response.json()
```

`category` には、`business`・`entertainment`・`general`・`health`・`science`・`sports`・`technology` を指定できます。

ただし、ニュースサイトを指定する `sources` は、`country` や `category` と一緒には使えないので注意してくださいね。

## 返ってくるデータの中身とエラーへの対処

続いて、NewsAPI から返ってくるデータの中身を見ていきましょう！

### 返ってくるデータの形

NewsAPI からは、次のような形（JSON）でデータが返ってきます。

```json
{
  "status": "ok",
  "totalResults": 1234,
  "articles": [
    {
      "source": {"id": null, "name": "ニュースサイトの名前"},
      "author": "著者",
      "title": "記事のタイトル",
      "description": "記事の説明",
      "url": "記事のURL",
      "urlToImage": "画像のURL",
      "publishedAt": "公開日時（世界標準時）",
      "content": "本文の冒頭（200文字までで切れる）"
    }
  ]
}
```

（中身の値は説明のための例です）

| 項目 | 中身 |
|---|---|
| `status` | 成功なら `ok`、失敗なら `error` |
| `totalResults` | 条件に合う記事の全体の数 |
| `source` | ニュースサイトの情報（`id` と `name`） |
| `author`・`title`・`description` | 著者、タイトル、説明 |
| `url`・`urlToImage` | 記事のURL、画像のURL |
| `publishedAt` | 公開日時（世界標準時なので、日本時間は9時間足す） |
| `content` | 本文の冒頭。200文字までで切られている |

ポイントは、`content` が<mark>本文の冒頭の200文字までしか入っていない</mark>ことです。

記事の全文を読みたいときは、`url` から元の記事を見に行きましょう。

### エラーが返ってきたら

うまくいかないときは、`status` が `error` になって、`code` と `message` に理由が入って返ってきます。

よくあるエラーは、次のとおりです。

| HTTPのステータス | `code` の例 | 原因 |
|---|---|---|
| 401 | `apiKeyMissing`・`apiKeyInvalid` | APIキーが入っていない、またはまちがっている |
| 400 | `parameterInvalid`・`parametersMissing` | パラメータの名前や値がまちがっている、足りない |
| 429 | `rateLimited` | 短い時間にリクエストを送りすぎた |

`message` には英語で詳しい理由が書かれているので、まずはそれを読んでみましょう！

## NewsAPIを使うときの注意点（無料プランの制限）

NewsAPI は無料で始められますが、無料プランにはいくつか大事な制限があります。

### 無料プラン（Developer）でできること・できないこと

2026年10月時点の公式サイトでは、無料の「Developer」プランは次のようになっています。

| 項目 | 無料プラン（Developer） |
|---|---|
| 料金 | 0ドル |
| リクエストの回数 | 1日100回まで |
| 記事の新しさ | 24時間遅れ |
| さかのぼれる期間 | 1か月前の記事まで |
| 使ってよい場面 | 開発とテストだけ |

1日100回というのは、リクエストを送った回数のことです。`page` を変えて何ページも取得すると、その分だけ回数を使ってしまいます。

練習のうちは、<mark>`pageSize` で必要な件数をまとめて取得して、むだなリクエストを減らす</mark>のがコツです。取得したデータは、CSV などに保存しておくと、何度もリクエストを送らずにすみますよ。

特に気をつけたいのが、最後の「使ってよい場面」です。

公式のよくある質問では、無料プランは<mark>開発とテストのためだけのもので、本番の環境や、社内での利用にも使えない</mark>とされています。

サービスとして公開したり、仕事で使ったりする場合は、有料プランが必要です。

ちなみに、2026年10月時点の有料プランは「Business」が月449ドルからと、個人で気軽に払うには少し高めの値段になっています。

:::warn
料金やプランの内容は変わることがあります。使う前に、必ず NewsAPI の公式サイトで最新の情報を確かめましょう！
:::

### 記事の著作権にも気をつける

NewsAPI で取得できるのは、それぞれのニュースサイトの記事の情報です。

記事の文章や画像には著作権があるので、<mark>取得した記事を勝手に丸ごと転載したり、公開したりしない</mark>ようにしましょう。

自分で読む、分析に使う、元の記事へのリンクを紹介する、といった使い方を基本にするのが安心です。

## APIを組み合わせると、もっと面白くなる

NewsAPI は、ほかのAPIと組み合わせると、さらに面白いことができます。

たとえば、こんな流れのプログラムが作れます。

:::box{title="APIを組み合わせたプログラムの例"}
**1.** NewsAPI で、機械学習のニュースを集める\
**2.** ChatGPT などの生成AIのAPIで、ニュースを日本語で要約する\
**3.** X（旧Twitter）のAPIで、要約を投稿する
:::

ニュースを集めて、要約して、発信するところまで、全部自動でできてしまうんです！

なお、仕事や公開するサービスとして動かす場合は、先ほどの無料プランの制限に気をつけてくださいね。

Python で X（旧Twitter）に自動で投稿する方法は、以下の記事で解説しています。

<https://toukei-lab.com/python_twitter>

集めたニュース記事を、トピックモデルで分析してみるのも面白いですよ。

<https://toukei-lab.com/topic-model>

## NewsAPI × Python のまとめ

最後に、今回のポイントをおさらいしましょう！

:::point
**・NewsAPIは、世界中のニュース記事をキーワードなどで検索して取得できるAPI**\
**・公式サイトで会員登録すると、APIキーがもらえる。キーはコードに書かず、環境変数やシークレットに入れる**\
**・Pythonの requests で、URLとパラメータを指定してリクエストを送るだけで、ニュースを取得できる**\
**・無料プランは1日100回まで・24時間遅れ・開発とテスト用だけ（2026年10月時点）**\
**・ほかのAPIと組み合わせると、要約や自動投稿などの面白いプログラムが作れる**
:::

:::talk{who="umatan"}
要は、NewsAPI を使えば、たった数行の Python で世界中のニュースを集められるんです！ぜひ自分の興味のあるキーワードで試してみてください！
:::

APIやPythonを使いこなしながら、生成AIやデータサイエンスを体系的に学びたいのであれば、当メディアが運営するスクール「**[スタアカ](https://toukei-lab.com/achademy/)**」がオススメです！

:::box
**[業界最安級のAIデータサイエンス特化スクール「スタアカ」](https://toukei-lab.com/achademy/)**
:::