我遇到了来自Microsoft Azure(认知服务)的新Bing搜索API的一些问题。下面是我的代码,我想要做的是从我的表单中调用API并简单显示结果,但是这样做有些麻烦,有人可以查看我的代码,看看是否有任何问题?我不断得到的错误是我还没有定义$ q变量,但我已经在代码中看到了。感谢您的帮助,感谢它!
PHP:
<?php
$accountKey = 'account_key';
$url = 'https://api.cognitive.microsoft.com/bing/v5.0/search?q='.$q.'&count=10&offset=0&mkt=en-us&safesearch=Moderate';
$q = urlencode($_POST['q']);
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Ocp-Apim-Subscription-Key: $accountKey"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($url, false, $context);
$jsonobj = json_decode($file);
echo $file;
?>
HTML:
<form method="post" action="">
<input name="q" type="text" autocomplete="off" autofocus>
<input type="submit" name="Search" hidden>
</form>
</body>
</html>
答案 0 :(得分:1)
将$q = urlencode($_POST['q']);
放在$accountKey
例如:
<?php
$accountKey = 'account_key';
$q = urlencode($_POST['q']);
$url = 'https://api.cognitive.microsoft.com/bing/v5.0/search?q='.$q.'&count=10&offset=0&mkt=en-us&safesearch=Moderate';
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Ocp-Apim-Subscription-Key: $accountKey"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($url, false, $context);
$jsonobj = json_decode($file);
echo $file;
?>
您在声明之前调用了变量。
答案 1 :(得分:0)
我为您生成了一个代码段,供您提出进一步的问题:
当我刷新页面时,我怎样才能这样做,它会让我回到搜索中,而不会再次调用API?
因为它现在只是普通的JSON,我们是否可以设计结果并使它们更像是像Google这样的传统搜索引擎?
请考虑以下代码:
<html>
<body>
<form method="get" action="">
<input name="q" type="text" autocomplete="off" value="<?=$_GET['q']?>" autofocus>
<input type="submit" hidden>
</form>
</body>
</html>
<?php
$accountKey = '<accountKey>';
$q = @urlencode($_GET['q']);
if($q){
$url = 'https://api.cognitive.microsoft.com/bing/v5.0/search?q='.$q.'&count=10&offset=0&mkt=en-us&safesearch=Moderate';
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Ocp-Apim-Subscription-Key: $accountKey"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($url, false, $context);
$jsonobj = json_decode($file);
echo ('<ul ID="resultList">');
foreach ($jsonobj->webPages->value as $value) {
echo ('<li class="resultlistitem"><a href="' . $value->url . '">'.$value->name.'</a>');
if(property_exists($value,'image')){
echo ('<img src="' . $value->image->contentUrl . '"></li>');
}
}
echo ("</ul>");
}
?>
答案 2 :(得分:0)
新的认知API需要帐户密钥和订阅密钥。在两者都包括在内之前,您将继续遇到错误。