LoginSignup
25
27

More than 5 years have passed since last update.

PHPからBing Search APIを使って画像を収集する

Last updated at Posted at 2015-08-27

(2016/11/18追記)
Bing Search APIの無料利用は2016年12月をもって終了するようです。そのため本記事の方法は利用できなくなる見込みです。

無料の検索API

検索と言えば「ぐぐる」のGoogleが有名ですが、検索結果を使って何かしたいときに使えるGoogle Custom Search APIは無料では100リクエスト/日で若干使いづらいところがあります。

そんなときには、5,000リクエスト/月のMicrosoftのBing Search APIの方がちょこっと多めに使えます。

Bing Search APIを使う準備

  1. Microsoftアカウントを作る

  2. Azure Marketplaceで無料の「5000トランザクション/月」のプランにサインアップする

  3. 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にアクセスします。

25
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
27