简体   繁体   中英

Bing search API and Azure for keyword searching

I am using this code but it gives error. exception 'Exception' with message 'Bad Response:

https://api.datamarket.azure.com/Bing/SearchWeb/Web ?$format=json& Query=%27LNCT+Group+of+Colleges+ %3A%3A+Largest+Education+Group+in+Central+India%27' in C:\\xampp\\htdocs\\bing\\BingSearch.php:114

Stack trace: #0 C:\\xampp\\htdocs\\bing\\BingSearch.php(88): BingSearch->getJSON(' https://api.dat ...', Array)

#1 C:\\xampp\\htdocs\\bing\\BingSearch.php(40): BingSearch->query('Web', 'LNCT Group of C...')

#2 C:\\xampp\\htdocs\\bing\\example.php(19): BingSearch->queryWeb('LNCT Group of C...')

#3 {main}

one file is Example.php

/*
 * sample example code for BingSearch.php class
 * @author Daniel Boorn info@rapiddigitalllc.com
 * @license apache 2.0
 * @bingapiurl https://datamarket.azure.com/dataset/bing/search#schema
 */


ini_set('display_errors','1');
require('BingSearch.php');

//register for key on windows azure

$apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$bing = new BingSearch($apiKey);

$r = $bing->queryWeb('LNCT Group of Colleges :: Largest Education Group in Central India');
var_dump($r);
?>
Another file is BingSearch.php

<?php 

    class BingSearch{

    protected $apiKey = '';
    protected $apiRoot = 'https://api.datamarket.azure.com/Bing/SearchWeb/';

    public function BingSearch($apiKey=false){
        if($apiKey) $this->apiKey = $apiKey;
        if($this->apiKey=="") throw new Exception("API Key Required");
    }

    public function queryImage($query){
        return $this->query('Image',$query);
    }


    public function queryWeb($query){
        return $this->query('Web',$query);
    }


    public function queryVideo($query){
        return $this->query('Video',$query);
    }


    public function queryNews($query){
        return $this->query('News',$query);
    }

    public function queryRelatedSearch($query){
        return $this->query('RelatedSearch',$query);
    }


    public function querySpellingSuggestions($query){
        return $this->query('SpellingSuggestions',$query);
    }


    public function query($type,$query){
        if(!is_array($query)) $query = array('Query'=>"'{$query}'");
        try{
            return self::getJSON("{$this->apiRoot}{$type}",$query);
        }catch(Exception $e){
            die("<pre>{$e}</pre>");
        }

    }


    protected function getJSON($url,$data){
        if(!is_array($data)) throw new Exception("Query Data Not Valid. Type Array Required");
        //$data['$format'] = 'json';
        $url .= '?$format=json&' . http_build_query($data) ;
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD,  "$this->apiKey:$this->apiKey");
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $r = curl_exec($ch);
        $json = json_decode($r);

        if($json==null) throw new Exception("Bad Response: {$r}\n\n{$url}");
        return $json;
    }


}

As curl need certificate verification requesting against to https endpoints. And to request to Bing Search API, we can just pass by the verification and which will still work fine.

Modify your function getJSON() as:

    if(!is_array($data)) throw new Exception("Query Data Not Valid. Type Array Required");
    //$data['$format'] = 'json';
    $url .= '?$format=json&' . http_build_query($data) ;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD,  "$this->apiKey:$this->apiKey");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $r = curl_exec($ch);
    $json = json_decode($r);

    if($json==null) throw new Exception("Bad Response: {$r}\n\n{$url}");
    return $json;

It works fine on my side.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM