「ニュースを取得できるAPIを探している」
「プログラムを用いて情報収集を効率化したい」
このような場合には、News APIがオススメです。
この記事では、News APIについて解説しています。
本記事の内容
- News APIとは?
- News APIのAPI Key取得
- News APIの動作確認
それでは、上記に沿って解説していきます。
News APIとは?
News APIとは、ニュースソースからの記事を集めるためのプログラマブルなAPIです。
世界中のさまざまなニュースソースから最新の記事を簡単に検索し、取得することができます。
このAPIを使用することで、ニュース記事を次のようなパラメータに基づいて検索することが可能です。
- キーワード
- ニュースソース
- 言語
- 国
News APIは、基本的に企業による利用が想定されています。
それは、価格表を見ればわかります。
価格は、年間ではなく月間ですからね。

「Developer」が、News APIの無償版になります。
ただし、この無償版にはいろいろと制限があります。
まず、個人・商用の開発・テストでしか用いてはいけません。
つまり、製品やサービスとして公開することはNGと言えます。
あとは、以下の条件となります。
- 24時間遅れの記事が対象
- 1ヶ月まで過去の記事を検索可能
- localhostのCORSが有効
- 1日100リクエストまで
- 追加のリクエストは利用不可
- アップタイムのSLAなし
「localhostのCORSが有効」は、あまり気にする必要はありません。
クライアント側のJavaScriptからAPIを呼び出すことなんて、考えていませんよね?
「アップタイムのSLAなし」は、無償版のため保障なんてないということです。
そりゃ、当然と言えます。
News APIのAPI Key取得
上記ページにある次のボタンをクリックします。

アカウントの登録画面が表示されます。
必要な情報を入力します。

注意すべきは、以下の項目です。
今回は、「Developer」プランを利用します。
そのため、「I am an individual」を選択することが条件になります。

入力が完了したら、いきなり次の画面が表示されます。
メール認証も何もありません。

メールでもAPI Keyは送信されています。
ここまでの作業により、API Keyを取得できました。
News APIの動作確認
News APIの動作確認を行います。
公式において、以下の言語に対応しているようです。

今回は、Pythonを利用します。
ライブラリが用意されています。
pip install newsapi-python
最終リリースは、2023年ですね。
その前は、かなり前になります。

サポートしているPythonのバージョンは、以下。

このサポート状況を見て、一瞬狼狽えるかもしれません。
おそらく、0.2.7の更新時にsetup.pyの更新で漏れているだけでしょう。
あと、「Pure Python」であるため、正直バージョンは関係ありません。

実際、以下のPythonでも問題なくインストールできています。
> python -V Python 3.10.4
サンプルコードも次のページで確認できます。
ログインしていれば、取得したAPI Keyがセットされているはずです。
https://newsapi.org/docs/client-libraries/python
何個か関数がありますが、今回は次の関数を検証してみましょう。

「get_everything」関数の定義は、以下。
辞書型のデータとして値を返すようです。

各パラメータについては、次のページで説明されています。
https://newsapi.org/docs/endpoints/everything
今回は、次のように引数を設定します。
from newsapi import NewsApiClient import pprint newsapi = NewsApiClient(api_key='取得したAPI Key') all_articles = newsapi.get_everything(q='大谷翔平', from_param='2024-01-01', to='2024-01-07', sort_by='relevancy', page=1) pprint.pprint(all_articles)
上記を実行した結果、100件の記事を取得できています。
ただ、検索にヒットした全件は以下となっています。
'totalResults': 156
残りの56件を取得する場合は、
同じ条件で「page」を「2」とします。
all_articles = newsapi.get_everything(q='大谷翔平', from_param='2024-01-01', to='2024-01-07', sort_by='relevancy', page=2)
ちなみに2ページ目の1件目は、次の記事となっています。

ソースは、結構幅広くのサイトを対象にしているようです。
なお、ソースの指定はあまり有効ではありません。
指定できるのは、基本的には海外の大手メディアです。
それらは、以下で確認できます。
sources = newsapi.get_sources()
次のように「id」が「None」のソースは、指定することができません。
