News Search APIを使用すると、Bingを利用したニュース記事の検索をとても簡単に行える。ニュース検索機能を提供したい場合には便利に使える。
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は検索クエリを送信すると、関連するニュース記事を返送してくれるサービスだ。より一般的なWeb検索APIとしてはBing Web Search APIが用意されているが、ニュースに特化した検索機能を自サイトに組み込むといったときには、News Search APIを利用するのがよいだろう。
News Search APIは以下のAPIを提供している。
実際には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で行っているトークンの作成は必要ない)
また、価格についてはStandard S1〜S6までの6つの価格レベルが用意されている。ただし、無料で使えるレベルはない。最低価格のS1では月額306円で、最大で1000トランザクションを利用できる。
先ほども述べたように、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では、クエリパラメーターに次のものを指定できる。
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));
});
上のプログラムを実行すると、次のような結果が表示される(抜粋。また、改行を適宜追加している。以下、同様)。
> 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: "ニュースのカテゴリー"
},
{
…… 同様な構造のデータが続く ……
}
]
}
そこで上のコードを少し修正して、ニュースのタイトル/配信元/概要を表示するようにしたものが以下だ。
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日、局地的に非常に激しい雨が降る見通し。
…… 省略 ……
ここではSearch APIを例としたが、上掲のコードを改変しながら、Category News APIやTrending Topics APIについても試してみてほしい。
News Search APIを使用すると、Bingを利用したニュース記事の検索をとても簡単に行える。本稿ではコンソールベースのプログラムを例としたが、自サイトでニュース検索機能を提供したいといった場合には便利に使えるだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.