Php Microsoft认知服务Bing WebSearch API v5.0

Php Microsoft认知服务Bing WebSearch API v5.0,php,html,azure,Php,Html,Azure,我对Microsoft Azure认知服务的新Bing搜索API有一些问题。下面是我的代码,我试图做的是从我制作的表单中调用API并简单地显示结果,但我在这样做时遇到了一些问题,有人能看看我的代码,看看是否有任何问题吗?我经常遇到的错误是,我没有定义$q变量,但正如您在代码中看到的那样。谢谢你的帮助,谢谢 PHP: HTML: 放置$q=urlencode$_POST['q'];低于$accountKey 例如: <?php $accountKey = 'account_key'; $

我对Microsoft Azure认知服务的新Bing搜索API有一些问题。下面是我的代码,我试图做的是从我制作的表单中调用API并简单地显示结果,但我在这样做时遇到了一些问题,有人能看看我的代码,看看是否有任何问题吗?我经常遇到的错误是,我没有定义$q变量,但正如您在代码中看到的那样。谢谢你的帮助,谢谢

PHP:

HTML:

放置$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;
?>

您在声明之前已经调用了变量。

我已经为您生成了一段代码片段,供您进一步提问:

还有,当我刷新页面时,它会将我带回搜索,并且不再调用API,我该如何使它如此呢


既然它现在只是简单的JSON,我们有没有办法设计结果的样式,让它们更像谷歌这样的传统搜索引擎

请考虑以下代码:

<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>");
    }

?>

新的认知API需要帐户密钥和订阅密钥。您将继续遇到错误,直到两者都包含在内。

结果仅为JSON格式。您是否建议我遵循任何指南来帮助设置结果的样式?还有,当我刷新页面时,它会将我带回搜索,并且不再调用API。请您解释一下,您的搜索结果需要修改什么样的样式?。既然它现在只是简单的JSON,那么我们有没有办法对结果进行样式化,让它们更像谷歌这样的传统搜索引擎呢?在这里你可以找到PHP中Bing API的Repo。若你们得到一个结果,那个么把它放入for循环,并显示你们所需要的结果。如果结果计数为零,则显示为未找到任何记录。我仍然不知道如何设置结果样式谢谢您的回答:但是,URL是bing URL。如何将链接设置为实际的URL?例如,如果你搜索google或其他什么,url不是google.com,而是一个bing链接,可以重定向到google.com。我如何改变这一点?因为我们正在使用Bing搜索API,结果应该是重定向URL。这是故意的。
<?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;
?>
<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>");
    }

?>