【Python】ロイターニュースを無料APIで取得する方法

この記事で解決するお悩み
  • ロイターのニュースを無料で取得したい
  • ロイターのニュースをプログラムを組んで自動で取得したい

はじめに

世界最速とも言われるロイターニュースをAPI使って自動で取得したい方、過去ニュースも含め一気にたくさん取得したい方、必見です!今回はPythonを用いて、「無料」かつ「自動」でロイターのニュースを拾ってくる方法をご紹介します。サンプルコードも載せておくので、ぜひ参考にしてみてください。

ロイターニュースをプログラムで取得する方法一覧

公式のAPIを使う

トムソン・ロイターからRefinitivという投資家向けのAPIが公開されています。こちらが王道かと思われるかもしれませんが、個人で利用したい方、趣味程度に利用したい方にはかなりハードルが高いです。きちんとした「問い合わせ」から見積りを経て契約となります。今回は、趣味程度、個人で楽しみたい方を対象としていますので、こちらの解説はスキップさせていただきます。

ロイター以外のニュース系APIを使う

こちらは、いくつか候補があります。ただし、「ロイターニュースを扱っている」、「無料で利用できる」となると、ほぼほぼ「News API」一択となります。(筆者調べ。2021年6月時点)

News APIを使う

News API」とは、数多くのニュースサイトからヘッドラインニュースや条件を指定して合致したニュースをJSON形式で返してくれるAPIです。ロイターニュースやBBCニュースをはじめ75,000以上のソースに対応しています。今回はこちらの「News API」を利用して、ロイターニュースを取得していく手順について紹介していきます。

News APIには無料・有料プランとありますが、今回はあくまで無料プランでの解説となります。無料プランだと、APIリクエスト回数上限や期間指定限度など、いくつか制限がありますが、十分使えるので、まずは無料プランで使用することをおすすめします。

STEP.1:News APIに登録

News APIのページから「Get API Key」(下記画面の赤枠どちらでもOK)を選択してメールアドレスなどの情報を入れれば簡単に登録・API Keyの発行ができます。API Keyの発行が済んだら、自分のKeyを控えておきましょう。

https://newsapi.org/

STEP2. APIリクエスト

News APIはRubyやNode.jsをはじめ多くのプログラミング言語に対応していますが、今回はPythonでの例をつかって説明していきます。Python以外の言語も知りたいという方は公式のページにサンプルコードあるので参考にしてみてください。

出力可能なパラメータ一覧

  • ニュースソース(source)
  • 著者(author)
  • ニュースタイトル(title)
  • ニュース概要(description)
  • URL(url)
  • イメージURL(urlToImage)
  • ニュース発行時刻(publishedAt)
  • 内容一部(一部)(content)

この中でもニュースソースをロイターに絞ってニュースを拾っていきましょう。参考までに、今回は「テスラ(Tesla)」を検索ワードとして入れておきます。

早速、コードを載せておきます。11行目のAPI KeyをSTEP.1で発行される「自分のAPI Key」に置き換えてください。

import pandas as pd
from newsapi import NewsApiClient
from pandas import json_normalize

#検索キーワード指定
key_word = 'Tesla'
#ニュースソースを指定
news_source = 'reuters'

# newsapiクライアントを初期化
newsapi = NewsApiClient(api_key='自分のAPI Key') #自分のAPI Key

# 条件指定したニュースを取得
#query: 検索キーワード
#sources:news_sources(ex. 'reuters')
def news_json(query, news_sources):
    
    news_res = newsapi.get_everything(
                                        q = query,
                                        sources = news_sources)
    return news_res

#jsonから必要な情報のみピックアップ
def json2def(json):
    df = json_normalize(json['articles'])
    return df

def main():
    news_res = news_json(key_word, news_source)
    df = json2def(news_res)
    df.to_csv(key_word + '.csv')
    return df

if __name__ == "__main__":
    main()

ポイントは、検索条件としてニュースソースを「reuters」に指定して、APIリクエストを送ることです。

また、今回は、ちゃんとロイターニュースが抽出できているか確認するために最終的にCSVとして出力しています。出力されたCSVの中身を見ていきましょう。

著者、タイトルや概要、発行日時まですべて抽出できています。これで完了です。

応用編:ニュースをたくさん・条件指定して取得する

STEP.2の例(キーワード:Tesla)だとそこまでニュースの量も多くなく、問題なく1ヶ月分のニュースの抽出できました。しかし、ホットなニュースを検索したり、検索条件を指定しなかったりすると、検索ヒット数が膨大になり、無料プランの制限に引っかかって一部しか抽出できなくなります。

そんな検索ヒット数が膨大な時に、無料プランでも最大効率で抽出する方法も紹介していますので、ぜひ参考にしてみてください。

コメントを残す

メールアドレスが公開されることはありません。