【前端】搜索引擎下拉词 API 使用

目录

各大搜索引擎下拉词 API 接口地址

分析

代码

结果


各大搜索引擎下拉词 API 接口地址

百度

https://suggestion.baidu.com/su?wd=关键词

必应

https://api.bing.com/qsonhs.aspx?type=cb&cb=callback&q=关键词

360搜索

https://sug.so.360.cn/suggest?encodein=utf-8&encodeout=utf-8&format=json&word=关键词

谷歌

http://suggestqueries.google.com/complete/search?output=toolbar&hl=zh&q=关键词

分析

获取下拉词时使用 fetch 方法可能发生 CORS 错误,故采用 JSONP 的方式进行跨域请求。

代码

以必应为例:

搜索 “ 关键词 ” 可以得到如下数据:

{
    "Query": "关键词",
    "FullResults": 1,
    "Results": [
        {
            "Type": "VS",
            "Suggests": [
                {
                    "Txt": "关键词提取",
                    "Type": "MT",
                    "Sk": "LT2",
                    "HCS": 0
                },
                {
                    "Txt": "关键词吉他谱",
                    "Type": "MT",
                    "Sk": "LT3MT1",
                    "HCS": 0
                }
            ]
        },
        {
            "Type": "AS",
            "Suggests": [
                {
                    "Txt": "关键词",
                    "Type": "LT",
                    "Sk": "",
                    "HCS": 0
                },
                {
                    "Txt": "关键词歌词",
                    "Type": "LT",
                    "Sk": "LT1",
                    "HCS": 0
                },
                {
                    "Txt": "关键词英文",
                    "Type": "LT",
                    "Sk": "LT2MT1",
                    "HCS": 0
                },
                {
                    "Txt": "关键词搜索",
                    "Type": "LT",
                    "Sk": "LT3MT2",
                    "HCS": 0
                },
                {
                    "Txt": "关键词云图",
                    "Type": "LT",
                    "Sk": "LT4MT2",
                    "HCS": 0
                },
                {
                    "Txt": "关键词格式",
                    "Type": "LT",
                    "Sk": "LT5MT2",
                    "HCS": 0
                }
            ]
        }
    ]
}

 对数据进行处理:

const searchText = document.querySelector(".search-text");
const searchButton = document.querySelector(".search-button");
const content = document.querySelector(".content");

searchButton.addEventListener("click", getSearchSuggestions);
// 获取下拉词
function getSearchSuggestions(event) {
  // 使用 Bing 搜索引擎下拉词 API
  const searchUrl = `https://api.bing.com/qsonhs.aspx?type=cb&cb=updateSearchSuggestions&q=${searchText.value}`;
  const script = document.createElement("script");
  script.src = searchUrl;
  document.body.append(script);
  script.remove();
}
// JSONP 回调函数 
window.updateSearchSuggestions = function (data) {
  // 搜索无结果
  if (data.AS.FullResults === 0) {
    content.innerHTML = "";
    return;
  }
  const suggestions = data.AS.Results.reduce((res, item) => {
    const arr = item.Suggests.map(val => val.Txt);
    return res.concat(arr);
  }, []);
  const suggestionItems = suggestions.map((item) => {
    const list = document.createElement("li");
    list.textContent = item;
    return list;
  });
  content.innerHTML = "";
  content.append(...suggestionItems);
}

 结果

 

 完整代码

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>API 测试</title>
  <style>
    .container {
      height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
    }
  </style>
</head>

<body>
  <div class="container">
    <div>
      <div>
        <input class="search-text" placeholder="输入数据" />
        <button class="search-button">下拉词显示</button>
      </div>
      <div>
        <ul class="content"></ul>
      </div>
    </div>
  </div>
  <script>
    const searchText = document.querySelector(".search-text");
    const searchButton = document.querySelector(".search-button");
    const content = document.querySelector(".content");

    searchButton.addEventListener("click", getSearchSuggestions);
    // 获取下拉词
    function getSearchSuggestions(event) {
      // 使用 Bing 搜索引擎下拉词 API
      const searchUrl = `https://api.bing.com/qsonhs.aspx?type=cb&cb=updateSearchSuggestions&q=${searchText.value}`;
      const script = document.createElement("script");
      script.src = searchUrl;
      document.body.append(script);
      script.remove();
    }
    // JSONP 回调函数 
    window.updateSearchSuggestions = function (data) {
      console.log(data);
      // 搜索无结果
      if (data.AS.FullResults === 0) {
        content.innerHTML = "";
        return;
      }
      const suggestions = data.AS.Results.reduce((res, item) => {
        const arr = item.Suggests.map(val => val.Txt);
        return res.concat(arr);
      }, []);
      const suggestionItems = suggestions.map((item) => {
        const list = document.createElement("li");
        list.textContent = item;
        return list;
      });
      content.innerHTML = "";
      content.append(...suggestionItems);
    }
  </script>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值