検索
連載

Bing News Search APIDev Basics/Keyword

News Search APIを使用すると、Bingを利用したニュース記事の検索をとても簡単に行える。ニュース検索機能を提供したい場合には便利に使える。

Share
Tweet
LINE
Hatena
「Dev Basics/Keyword」のインデックス

連載目次

 Bing News Search API(以下、News Search API)は、Microsoftが提供するCognitive Servicesの1つで、Bingでのニュース検索と同様な機能を提供する。もちろん日本のニュース(日本語)も取得可能だ。

 なお本稿はNews Search API V5を対象としている。本稿執筆時点(2017年9月15日)では、V7がプレビュー段階にある。V5とV7ではエンドポイントのURL、エラー発生時のレスポンスやエラーコードなどに変更がある。詳細については「News Search API upgrade guide」ページを参照されたい。

News Search APIの概要

 News Search APIは検索クエリを送信すると、関連するニュース記事を返送してくれるサービスだ。より一般的なWeb検索APIとしてはBing Web Search APIが用意されているが、ニュースに特化した検索機能を自サイトに組み込むといったときには、News Search APIを利用するのがよいだろう。

 News Search APIは以下のAPIを提供している。

  • Search: 一般的なニュース、トップニュース、ヘッドラインなどを取得
  • Category News: 「スポーツ」「芸能」などのカテゴリーを指定することで、指定したカテゴリーのニュースを取得
  • Trending Topics: 話題となっているニュースを取得

 実際にはSearchとCategory Newsのエンドポイントは同一で、クエリパラメーターの構成が異なる。Searchではクエリパラメーターに「q=〜」を、Category Searchでは「Category=〜」を含めるようにするのが基本形だ。Trending Topicsは独自のエンドポイントを持っている。

 なお、News Search APIを利用するには、事前にAzureポータルでそのサブスクリプションを追加し(Bing Search API)、APIへのアクセスキーを取得しておく必要がある。サブスクリプションの追加については「Dev Basics/Keyword: Microsoft Translator Text API」などを参照されたい(ただし、Autosuggest APIではアクセスキーがあれば十分であり、Translator Text APIで行っているトークンの作成は必要ない)

APIへのアクセスキーを取得しているところ(赤枠内)
APIへのアクセスキーを取得しているところ(赤枠内)

 また、価格についてはStandard S1〜S6までの6つの価格レベルが用意されている。ただし、無料で使えるレベルはない。最低価格のS1では月額306円で、最大で1000トランザクションを利用できる。

News Search APIの構文と使用例

 先ほども述べたように、News Search APIにはSearch、Category News、Trending Topicsの3つのAPIが用意されている。これらの構文を以下に簡単にまとめておく。なお、エンドポイント欄は「https://api.cognitive.microsoft.com/bing/v5.0」を省略している。実際のエンドポイントは「https://api.cognitive.microsoft.com/bing/v5.0/news/……」となる点には注意されたい。

API エンドポイントとクエリパラメーター
Search /news/search[?q][&count][&offset][&mkt][&safeSearch]
Category Search /news/[?Category]
Trending Topics /news/trendingtopics
News Search APIが提供する3つのAPI

 Search APIでは、クエリパラメーターに次のものを指定できる。

  • q: 検索文字列
  • count: 取得するニュースの数
  • offset: 検索結果からスキップするニュースの数。同じ検索語で連続してニュースを取得するような場合に使用する
  • mkt: 検索結果を取得する地域。日本発のニュースを取得するのであれば「ja-jp」とする
  • safeSearch: ニュースの取得で使用するフィルター。Off、Moderate、Strictのいずれかを指定する

 Category News APIでは「Category」クエリパラメーターでニュースのカテゴリーを指定する。指定できるのはBusiness、Entertainment、Health、Politics、ScienceAndTechnology、Sports、US/UK、Worldのいずれか。「スポーツ」のように日本語でカテゴリーを指定することはできない。また、Search APIにあるmkt、countなどのクエリパラメーターも指定できる。

 Trending Topicsにはクエリパラメーターはない。リクエストを送信すれば、話題のニュースが得られる(ただし、Search APIにあるmktクエリパラメーターがないので、実際には英語圏のニュースしか取得できないようだ)。

 ここでは最も一般的と思われるSearch APIの例に、News Search API呼び出しの基本形を見てみよう(JavaScriptとnpmのrequestパッケージを使用)。

const request = require("request");
const key = "アクセスキー";
const url = "https://api.cognitive.microsoft.com/bing/v5.0/news/search";
const q = "Windows 10 Fall Creators Update";
const count = 10;
const offset = 0;
const mkt = "ja-jp";
const ss = "Off";
const query =
  `?q=${q}&count=${count}&offset=${offset}&mkt=${mkt}&safeSearch=${ss}`;

var opt = {
  url: encodeURI(url+query),
  headers: {
    "Ocp-Apim-Subscription-Key": key
  }
};

request.get(opt, (err, res, body) => {
  console.log(JSON.parse(body));
});

News Search API呼び出しの基本形

 上のプログラムを実行すると、次のような結果が表示される(抜粋。また、改行を適宜追加している。以下、同様)。

> node newssearch.js
{ _type: 'News',
  readLink: 'https://api.cognitive.microsoft.com/api/v5/news/search?q=Windows+10+Fall+Creators+Update',
  totalEstimatedMatches: 42,
  …… 省略 ……
  value:
   [ { name: 'Windows 10 Fall Creators Update、プライバシー設定を一部改良',
       url: 'http://www.bing.com/cr…… 省略 ……',
       image: [Object],
       description: 'Windows 10は、登場以来ずっと、…… 省略 ……',
       provider: [Array],
       datePublished: '2017-09-15T01:36:00',
       category: 'ScienceAndTechnology' },
  …… 省略 ……


実行結果

 これを見ると分かる通り、News APIの戻り値はJSON形式のデータであり、おおよそ次のようなデータを含んでいる。

{
  _type: "News",
  readLink: "https://api.cognitive.microsoft.com/api/v5/news/search?q=クエリパラメーター",
  totalEstimatedMatches: クエリパラメーターとマッチすると思われる検索結果の数,
  …… 省略 ……
  value: [
    {
       name: "ニュースのタイトル",
       url: "ニュースへのリンク",
       image: [ニュースに含まれる画像に関する情報を要素とする配列],
       description: "ニュースの概要",
       provider: [ニュース発行者に関する情報を要素とする配列],
       datePublished: "ニュース発行日",
       category: "ニュースのカテゴリー"
    },
    {
      …… 同様な構造のデータが続く ……
    }
  ]
}


Search APIの戻り値

 そこで上のコードを少し修正して、ニュースのタイトル/配信元/概要を表示するようにしたものが以下だ。

const request = require("request");

…… 省略 ……

request.get(opt, (err, res, body) => {
  var tmp = JSON.parse(body);
  console.log(`${q}に関するニュース一覧`);
  for (var item of tmp.value) {
    console.log(`${item.name}:\n${item.provider[0].name}配信`);
    console.log(item.description);
    console.log("")
  }
});

ニュースのタイトル/配信元/概要を表示するようにしたもの

 これを実行すると、次のような結果になる。

> node newssearch.js
Windows 10 Fall Creators Updateに関するニュース一覧
Windows 10 Fall Creators Update、プライバシー設定を一部改良:
日経BPネット配信
Windows 10は、登場以来ずっと、プライバシーに関する懸念が付きまとっていた。米
Microsoftの各種サービスにユーザーを取り込もうとする作りになっている上に、デバ
イスの 基本的な利用統計情報(テレメトリデータ)がMicrosoftに送信されるのを止
める方法も ...

MS、次期「Windows 10 Fall Creators Update」でプライバシー設定を改善:
ZDNet Japan配信
Microsoftは、「Windows 10 Fall Creators Update」に新たな追加オプションを組み込む
ことで、引き続き「Windows 10」のプライバシー設定に微調整を試みている。 Microsoft
が2017年春に提供を開始した「Windows 10 Creators Update」では、かなりの数のプライ
バシー設定が新たに ...

…… 省略 ……


実行結果

 なお、Search APIではクエリパラメーターの「q」を未設定にすると、その日のトップニュースを取得できる。この場合、ニュースを取得するリクエストのURLは「https://api.cognitive.microsoft.com/bing/v5.0/news/search?q=&」などのようにする。例えば、上のコードで変数qの値を空文字列にして実行すると、実行結果は次のようにさまざまなトピックを含んだものになる。

> node newssearch.js
に関するニュース一覧
北朝鮮がミサイル発射、北海道の東2000キロに落下 安倍首相 ...:
AFPBB News配信
【9月15日 AFP】(更新、写真追加)北朝鮮は15日、同国から東方向にミサイル1発を
発射した。ミサイルは日本上空を通過し、太平洋(Pacific Ocean)に落下した。日韓両
政府 が発表した。安倍晋三(Shinzo Abe)首相は「断じて容認できない」と非難した。
聯合 ...

台風18号、16日に九州接近:
佐賀新聞配信
非常に強い台風18号は15日、沖縄県の西の海上を北寄りに進んだ。勢力を保ったまま
今後、東寄りに進路を変え、16日に九州に接近、17日に上陸する恐れがある。 気象庁に
よる と、九州南部と奄美では16日、局地的に非常に激しい雨が降る見通し。

…… 省略 ……


クエリパラメーター「q」にクエリ文字列を設定しなかった場合

 ここではSearch APIを例としたが、上掲のコードを改変しながら、Category News APIやTrending Topics APIについても試してみてほしい。


 News Search APIを使用すると、Bingを利用したニュース記事の検索をとても簡単に行える。本稿ではコンソールベースのプログラムを例としたが、自サイトでニュース検索機能を提供したいといった場合には便利に使えるだろう。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る