🌐

NewsAPIを使って最新ニュースを取得する

2024/12/17に公開

はじめに

NewsAPIは、世界中のニュース記事を検索・取得できるWeb APIです。特定のトピックやキーワード、ニュースソースを指定して、リアルタイムまたは過去の記事を取得することができます。

https://newsapi.org/

主な特徴
 ・ 過去5年間に150,000以上のニュースソースやブログで発表された記事を検索可能
 ・ 記事タイトル、本文、公開日時、URLなどを取得可能
 ・ キーワード、言語、日付範囲などのフィルタリングが可能

料金プラン

2024年12月現在、下記の料金プランがあります。
最新の料金プランは 公式サイトの料金ページ を確認してください。

プラン名 料金 主な機能
Developer 無料 - 開発およびテスト目的のみ
- 記事の取得に24時間の遅延
- 最大1ヶ月前までの記事検索
- 1日あたり100リクエストまで
Business 月額 $449 - 商用プロジェクト向け
- リアルタイムで新しい記事を取得
- 最大5年前までの記事検索
- 月間250,000リクエストまで
- 追加リクエストは1リクエストあたり$0.0018
Advanced 月額 $1,749 - 大規模プロジェクト向け
- 上記Businessプランの全機能
- 月間2,000,000リクエストまで
- 追加リクエストは1リクエストあたり$0.0009
Enterprise 要問い合わせ - プレミアムデータやカスタムソリューションが必要な企業向け
- 無制限のリクエスト
- カスタムSLAと専用サポート

APIキーの取得

公式サイトGet API Key をクリックしてアカウントを登録し、APIキーを取得します。

エンドポイントの種類

NewsAPIには、2つの主要なエンドポイントがあります。

  1. /v2/everything
    全てのニュースからキーワードや日時などの任意の条件で検索する

    パラメータ 説明
    q キーワードを指定して検索(AND / OR / NOTのキーワード使用可)
    sources ニュースソースを指定して検索、カンマ区切りで複数指定可
    domains ドメインを指定して検索、カンマ区切りで複数指定可
    excludeDomains 除外するドメインを指定して検索
    from 指定された日時以降の記事を検索(ISO 8601形式)
    to 指定された日時以前の記事を検索(ISO 8601形式)
    language 記事の言語を指定して検索(使用可能なオプション:ardeenes
    frheitnlnoptrusvudzh
    sortBy 記事のソート順
    relevancy(関連性順)、popularity(人気順)、publishedAt(発行日時順)
    pageSize 1リクエストで取得する記事数(最大100)
    page ページ番号(pageSize件数以上の記事はページ指定して取得)
  2. /v2/top-headlines
    ニュースソースやカテゴリなどを指定して最新のトップニュースを検索する

    パラメータ        説明
    country トップニュースを取得する国を指定(使用可能なオプション:us
    category ニュースカテゴリを指定(businessentertainmentgeneralhealth
    sciencesportstechnology
    sources ニュースソースを指定して検索、カンマ区切りで複数指定可
    q キーワードを指定して検索
    pageSize 1リクエストで取得する記事数(最大100)
    page ページ番号(pageSize件数以上の記事はページ指定して取得)

Pythonの実行例

PythonでのNewsAPIの実行例です。

import requests
import json

API_KEY = "YOUR_API_KEY"  # 取得したAPIキーを設定
BASE_URL = "https://newsapi.org/v2/everything"  # NewsAPIのエンドポイント

# パラメータ設定
params = {
    "q": "(Google OR Amazon) AND Cloud", # キーワード
    "from": "2024-12-01T00:00:00",       # 開始日時
    "to": "2024-12-10T23:59:59",         # 終了日時
    "sortBy": "relevancy",               # ソート順
    "pageSize": 5,                       # 取得件数
    "apiKey": API_KEY
}

# APIリクエスト
response = requests.get(BASE_URL, params=params)

# レスポンスを出力
if response.status_code == 200:
    articles = response.json().get("articles", [])
    for i, article in enumerate(articles):
        print(f"{i + 1}. {article['title']} - {article['source']['name']}")
else:
    print(f"Error: {response.status_code} - {response.text}")
実行結果
1. Amazon Is Building a Mega AI Supercomputer With Anthropic - Wired
2. This Website Shows How Much Google’s AI Can Glean From Your Photos - Wired
3. Google Cloud launches Veo AI video generator model on Vertex - VentureBeat
4. Don’t Let the Cyber Monday Deals End Before You Check Out This 40% Off Blink Indoor Security Cameras - Gizmodo.com
5. AWS cuts database prices almost 50% and adds distributed scaling capabilities - VentureBeat

レスポンス内容

リクエストが成功すると下記の様なレスポンスが返ります。

{
  "status": "ok",
  "totalResults": 2338,
  "articles": [
    {
      "source": {
        "id": "wired",
        "name": "Wired"
      },
      "author": "Will Knight",
      "title": "Amazon Is Building a Mega AI Supercomputer With Anthropic",
      "description": "At its Re:Invent conference, Amazon also announced new tools to help customers build generative AI programs, including one that checks whether a chatbot’s outputs are accurate or not.",
      "url": "https://www.wired.com/story/amazon-reinvent-anthropic-supercomputer/",
      "urlToImage": "https://media.wired.com/photos/674e1ed2ac875ab00d5a6387/191:100/w_1280,c_limit/Matt-Garman-Amazon-RE-Invent-Business-2179195367.jpg",
      "publishedAt": "2024-12-03T18:13:31Z",
      "content": "Garman told WIRED ahead of the event that Amazon will also introduce a range of tools to help customers wrangle generative AI models that he says are often too expensive, unreliable, and unpredictabl… [+2405 chars]"
    },
  <中略>
  ]
}

キー 説明
status APIリクエストの結果 okerror
totalResults 検索クエリに一致する記事の総数
articles 記事の配列
source 記事のソース(発行元)
- id ソースの識別子ID。ない場合は null
- name ソースの名称
author 記事の著者
title 記事のタイトル
description 記事の概要
url 記事のURL
urlToImage 記事の関連画像のURL
publishedAt 記事の公開日時(ISO 8601形式)
content 記事の本文(200文字以上は切り捨て)
レスキューナウテックブログ

Discussion