如何从BING Search Engine API返回JSON结果

时间:2014-11-04 10:11:13

标签: bing bing-api

目前我只能根据登录数据市场azure进行搜索。

返回的结果以表格格式化,我不会以任何方式将它们以JSON格式返回。

在返回结果后会显示一个链接,但是当该链接粘贴在浏览器的URL部分时,它需要用户名和密码。

返回的网址示例 https://api.datamarket.azure.com/Bing/Search/v1/Web?Query=%27car%27

曾经有一个api使用REST但它现在只返回错误而不再工作。

有没有办法使用这个BING API并检索它的返回查询?

无法尝试登录azure后返回错误 您提供的授权类型不受支持。仅支持Basic和OAuth

2 个答案:

答案 0 :(得分:7)

您需要从网址中删除v1,并在查询结尾添加$format=json,详见schema guide

https://api.datamarket.azure.com/Bing/Search/Web?Query=%27Xbox%27&$format=json

要使链接生效,您需要提供散列凭据,为此,请按以下步骤操作:

  1. 登录Azure Marketplace。
  2. 浏览至search api listing
  3. 点击“浏览此数据集”链接(仅在您登录时才可见)。
  4. 打开后,点击“主帐户密钥”旁边的“显示” enter image description here
  5. 保存此哈希值并将其用作代码中的身份验证摘要。

答案 1 :(得分:3)

新Bing API的工作方式不同,但您可以在不登录的情况下使用它,通过base64编码您的AppId,然后将其设置为标题中的“基本”授权。我从this answer on stackoverflow得到了这个想法。诀窍是你需要在base64编码之前在AppId的开头添加一个冒号。

这是我做的一个工作示例,它搜索Bing并从结果中返回一个随机图像。如果你想让它工作,只需添加你自己的AppId:

'use strict';

$(document).ready(function() {
  //Declare variables
  var $searchButton = $('#searchButton');
  //add a colon to the beginning of your AppId string
  var appId = ':TZYNotARealAppId';

  //Function to get images
  function getImage() {
    //base64 encode the AppId
    var azureKey = btoa(appId);
    //get the value from the search box
    var $searchQuery = $('#searchBox').val();
    //Create the search string
    var myUrl = 'https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27image%27&$top=50&$format=json&Query=%27' + $searchQuery + '%27';
    //Make post request to bing
    $.ajax({
      method: 'post',
      url: myUrl,
      //Set headers to authorize search with Bing
      headers: {
        'Authorization': 'Basic ' + azureKey
      },
      success: function(data) {
        //Insert random image in dom
        var randomIndex = Math.floor(Math.random() * 50);
        var imgLink = '<img width="500px" src="' + data.d.results[0].Image[randomIndex].MediaUrl + '" />';
        $('#output').html(imgLink);
      },
      failure: function(err) {
        console.error(err);
      }
    });
  };
  //Trigger function when button is clicked
  $searchButton.click(function(e) {
    e.preventDefault();
    getImage();
  });
});
<html>

<head>
  <title>Image search widget</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta name="description" content="test search widget" />
</head>

<body>
  <main>
    <form>
      <input id="searchBox" type="text" type="submit" name="searchBox" required/>
      <button id="searchButton" type="submit">Get Image</button>
    </form>
    <div id="output"></div>
  </main>
  <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script src="./js/search.js"></script>
</body>

</html>