Nicero
Nicero

Reputation: 4377

Bing Image search API v5.0 example for PHP

I'm trying, without success, to get some results using Bing's Image search API without HTTP/Request2.php component (as used in the official examples).

I understand that the only two required parameters to make a very primitive call are q which is the query string and the subscription key. The key must be sent using headers. After looking around I found this very simple example to send headers with PHP:

$sURL = "https://api.cognitive.microsoft.com/bing/v5.0/images/search?q=cats";
$aHTTP = array(
    'Ocp-Apim-Subscription-Key' => 'xxxxxxx',
);
$context = stream_context_create($aHTTP);
$contents = file_get_contents($sURL, false, $context);

echo $contents;

But it does not output anything. Would you kindly help me with a very basic example of use of Bing's API?

Upvotes: 1

Views: 2833

Answers (3)

Muthu17
Muthu17

Reputation: 1541

Here is my working code.. Replace ******** with your bing subscription key.

        $sURL = "https://api.cognitive.microsoft.com/bing/v5.0/images/search?q=microsoft-surface&count=6&mkt=en-US";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $sURL); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: multipart/form-data',
            'Ocp-Apim-Subscription-Key: *******************'
        ));
        $contents = curl_exec($ch);
        $myContents = json_decode($contents);
        if(count($myContents->value) > 0) {
            foreach ($myContents->value as $imageContent) {
                echo '<pre/>';
                print_r($imageContent);
            }
        }

Upvotes: 0

Nicero
Nicero

Reputation: 4377

SOLVED

Thanks to Vadim's hint I changed the way headers are sent and now output is a Json encoded result. (Remember to add your API subscription key.)

$sURL = "https://api.cognitive.microsoft.com/bing/v5.0/images/search?q=cats";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $sURL); 
curl_setopt($ch, CURLOPT_TIMEOUT, '1'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: multipart/form-data',
    'Ocp-Apim-Subscription-Key: xxxxx'
));
$content = curl_exec($ch);

echo $content;

Just another tip. The syntax of query filters and other parameters change form version to version. For example the following work correctly in version 5.0:

To search only for JPEG images of cats and get 30 results use:

q=cats&encodingFormat='jpeg'&count=30

To search only for 'portrait' aspect images with size between 200x200 and 500x500 use:

q=cats&aspect=Tall&size=Medium

Upvotes: 3

Vadim Mytarev
Vadim Mytarev

Reputation: 44

Try using cURL

$sURL = "https://api.cognitive.microsoft.com/bing/v5.0/images/search?q=cats";
$key = "xxxxxxx";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $sURL); 
curl_setopt($ch, CURLOPT_TIMEOUT, '1'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 'ocp-apim-subscription-key:$key');
$content = curl_exec($ch);

echo $content;

Upvotes: 1

Related Questions