我正在使用这段代码,但它给出了错误。异常"异常",消息为"错误响应:"
https://api.datamarket.azure.com/Bing/SearchWeb/Web?$format=json&在C:''examplep''htdocs''bing''BingSearch.php中,查询=%27LNCT+第+组+第+所+学院+%3A%3A+最大+教育+第+集团+在+中部+印度%27'
堆栈跟踪:#0 C:''examplep''htdocs''bing''BingSearch.php(88):BingSearch->getJSON('https://api.dat...',阵列)
#1 C:''examplep''htdocs''bing''BingSearch.php(40):BingSearch->query('Web','LNCT Group of C.…')
#2 C:''examplep''htdocs''bing''example.php(19):BingSearch->queryWeb('NCT Group of C.…')
#3{main}
其中一个文件是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需要针对https
端点请求证书验证。并且请求必应搜索API,我们可以通过验证,仍然可以正常工作。
将函数getJSON()
修改为:
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;
对我来说效果很好。