Microsoft Cognitive Services Bing WebSearch API v5.0

时间:2017-01-28 11:43:00

标签: php html azure

我遇到了来自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>

3 个答案:

答案 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需要帐户密钥和订阅密钥。在两者都包括在内之前,您将继续遇到错误。