(2016/11/18追記)
Bing Search APIの無料利用は2016年12月をもって終了するようです。そのため本記事の方法は利用できなくなる見込みです。
無料の検索API
検索と言えば「ぐぐる」のGoogleが有名ですが、検索結果を使って何かしたいときに使えるGoogle Custom Search APIは無料では100リクエスト/日で若干使いづらいところがあります。
そんなときには、5,000リクエスト/月のMicrosoftのBing Search APIの方がちょこっと多めに使えます。
Bing Search APIを使う準備
-
Microsoftアカウントを作る
-
Azure Marketplaceで無料の「5000トランザクション/月」のプランにサインアップする
- Azure Marketplaceのマイアカウントのアカウントキーでキーの値を取得する
Bing Search APIをPHPから使ってみる
まずは下のサービスエクスプローラで検索条件を検討します。
ここでは「修造」というキーワードの画像を収集してみます。「Image」タブを開いてパラメータをこうしてみます。
- Query: 修造
- Options: (空のまま)
- Market: ja-JP
- Adult: Strict
- Latitude: (空のまま)
- Longitude: (空のまま)
- ImageFilters: Size:Medium
そして「適用」ボタンを押すと、「現在表示されているクエリの URL:」のURLが更新されるのでコピーしときます。
Bing Search APIではこのURLに対してBasic認証でGETでアクセスすると結果を取得できます。デフォルトだとXMLなので↑のURLに「&$format=json」を追加します。
<?php
$url = 'https://api.datamarket.azure.com/Bing/Search/v1/Image?Query=%27%E4%BF%AE%E9%80%A0%27&Market=%27ja-JP%27&Adult=%27Strict%27&ImageFilters=%27Size%3AMedium%27&$format=json';
$username = '';
$password = 'アカウントキー';
$option = array(
'http' => array(
'method' => 'GET',
'header' => 'Authorization: Basic ' . base64_encode($username . ':' . $password),
),
);
$context = stream_context_create($option);
$result = file_get_contents($url, false, $context);
var_dump(json_decode($result, true));
これの実行結果がこんな感じになります。
array(1) {
["d"]=>
array(2) {
["results"]=>
array(50) {
[0]=>
array(11) {
["__metadata"]=>
array(2) {
["uri"]=>
string(150) "https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/Image?Query='修造'&Market='ja-JP'&Adult='Strict'&ImageFilters='Size:Medium'&$skip=0&$top=1"
["type"]=>
string(11) "ImageResult"
}
["ID"]=>
string(36) "bab2ccce-3a35-41fb-8af0-58510888c74c"
["Title"]=>
string(12) "松岡修造"
["MediaUrl"]=>
string(79) "http://www.officiallyjd.com/wp-content/uploads/2013/01/20130112_ichihara_15.jpg"
["SourceUrl"]=>
string(65) "http://www.officiallyjd.com/archives/209179/20130112_ichihara_15/"
["DisplayUrl"]=>
string(57) "www.officiallyjd.com/archives/209179/20130112_ichihara_15"
["Width"]=>
string(3) "480"
["Height"]=>
string(3) "345"
["FileSize"]=>
string(5) "23667"
["ContentType"]=>
string(10) "image/jpeg"
["Thumbnail"]=>
array(6) {
["__metadata"]=>
array(1) {
["type"]=>
string(14) "Bing.Thumbnail"
}
["MediaUrl"]=>
string(77) "http://ts1.mm.bing.net/th?id=OIP.M38c05c8bf108c9a9978bf09f6d2f4010o0&pid=15.1"
["ContentType"]=>
string(9) "image/jpg"
["Width"]=>
string(3) "300"
["Height"]=>
string(3) "215"
["FileSize"]=>
string(4) "9142"
}
}
[1]=>
(中略)
}
["__next"]=>
string(156) "https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/Image?Query='%E4%BF%AE%E9%80%A0'&Market='ja-JP'&Adult='Strict'&ImageFilters='Size:Medium'&$skip=50"
}
}
一度に得られる結果は最大50件になります。次の結果を得たい場合は__nextのURLにアクセスします。