是否有 Google 自定义搜索 REST API 的工作示例?

2023-12-25

我需要创建一个自动执行 Google 搜索的屏幕。 我了解 JavaScript 并且我正在努力让 GSE 工作。

我有一个搜索引擎和一个 API 密钥。 问题是谷歌的文档是循环的,即页面相互指向。 没有可以让我开始研究的工作样本。

如果您知道工作示例,请提供帮助。

我读过的文件有:

  1. cselement-开发指南 https://developers.google.com/custom-search/docs/js/cselement-devguide
  2. 介绍 https://developers.google.com/custom-search/docs/tutorial/introduction

我知道这是一个老问题,但这是我所做的,使 API 结果的格式类似于 Google Site Search 过去提供的格式,因为它们正在结束付费帐户并且现在将有广告。 API 方式可以选择为每天超过 100 次搜索付费,因此可以继续使用,但仍然必须格式化结果,并使用现有的方式构建 css 来执行类似的样式。

进入此页面的搜索表单很简单:

<form action="search-results.htm" id="cse-search-box">
        <div>
            <input class="" name="q" type="text"> 
            <input class="" type="submit">
        </div>
    </form>

然后是搜索结果页面:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>JSON/Atom Custom Search API Example</title>
    <!--<link href="default.css" rel="stylesheet" type="text/css">-->
    <link href="google.css" rel="stylesheet" type="text/css">
</head>
<body>
    <div class="gsc-result-info" id="resInfo-0"></div>
    <hr/>
    <div id="googleContent"></div>

<script>
    //Handler for response from google.
    function hndlr(response) {
        if (response.items == null) {
            //Sometimes there is a strange thing with the results where it says there are 34 results/4 pages, but when you click through to 3 then there is only 30, so page 4 is invalid now.
            //So if we get to the invalid one, send them back a page.
            window.location.replace("searchresults.htm?start=" + (start - 10) + "&q=" + query);
            return;
        }
        //Search results load time
        document.getElementById("resInfo-0").innerHTML = "About " + response.searchInformation.formattedTotalResults + " results (" + response.searchInformation.formattedSearchTime + " seconds)";
        //Clear the div first, CMS is inserting a space for some reason.
        document.getElementById("googleContent").innerHTML = "";
        //Loop through each item in search results
        for (var i = 0; i < response.items.length; i++) {
            var item = response.items[i];
            var content = "";

            content += "<div class='gs-webResult gs-result'>" +
                "<table class='gsc-table-result'><tbody><tr>";
            //Thumbnail image
            if (item.pagemap.cse_thumbnail != null)
                content += "<td class='gsc-table-cell-thumbnail gsc-thumbnail'><div class='gs-image-box gs-web-image-box gs-web-image-box-portrait'><a class='gs-image' href='" + item.link + "'>" +
                    "<img class='gs-image' class = 'gs-image-box gs-web-image-box gs-web-image-box-portrait' src='" + item.pagemap.cse_thumbnail[0].src + "'></a></td>";
            //Link
            content += "<td><a class='gs-title' href='" + item.link + "'>" + item.htmlTitle + "</a><br/>";
            //File format for PDF, etc.
            if (item.fileFormat != null)
                content += "<div class='gs-fileFormat'><span class='gs-fileFormat'>File Format: </span><span class='gs-fileFormatType'>" + item.fileFormat + "</span></div>";
            //description text and URL text.
            content += item.htmlSnippet.replace('<br>','') + "<br/><div class='gs-bidi-start-align gs-visibleUrl gs-visibleUrl-long' dir='ltr' style='word-break:break-all;'>" + item.htmlFormattedUrl +"</div>" +
                "<br/></td></tr></tbody></table></div>";
            document.getElementById("googleContent").innerHTML += content;
        }
        //Page Controls
        var totalPages = Math.ceil(response.searchInformation.totalResults / 10);
        console.log(totalPages);
        var currentPage = Math.floor(start / 10 + 1);
        console.log(currentPage);
        var pageControls = "<div class='gsc-results'><div class='gsc-cursor-box gs-bidi-start-align' dir='ltr'><div class='gsc-cursor'>";
        //Page change controls, 10 max.
        for (var x = 1; x <= totalPages && x<=10; x++) {
            pageControls += "<div class='gsc-cursor-page";
            if (x === currentPage)
                pageControls += " gsc-cursor-current-page";
            var pageLinkStart = x * 10 - 9;
            pageControls+="'><a href='search-results.htm?start="+pageLinkStart+"&q="+query+"'>"+x+"</a></div>";
        }
        pageControls += "</div></div></div>";
        document.getElementById("googleContent").innerHTML += pageControls;
    }

    //Get search text from query string.
    var query = document.URL.substr(document.URL.indexOf("q=") + 2);
    var start = document.URL.substr(document.URL.indexOf("start=") + 6, 2);
    if (start === "1&" || document.URL.indexOf("start=") === -1)
        start = 1;

    //Load the script src dynamically to load script with query to call.
    // DOM: Create the script element
    var jsElm = document.createElement("script");
    // set the type attribute
    jsElm.type = "application/javascript";
    // make the script element load file
    jsElm.src = "https://www.googleapis.com/customsearch/v1?key=yourApikeyhere&cx=yoursearchengineidhere&start="+start+"&q=" +query +"&callback=hndlr";
    // finally insert the element to the body element in order to load the script
    document.body.appendChild(jsElm);
</script>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有 Google 自定义搜索 REST API 的工作示例? 的相关文章

随机推荐

  • 具有 REST API 的开源作业调度程序

    是否有任何具有 REST API 的开源作业调度程序可供商业使用 它将支持以下功能 树状作业依赖关系 保持和释放 重新运行失败的步骤 并行性 如有帮助 将不胜感激 注意 我们正在寻找开源替代方案TWS http en wikipedia o
  • 不带扩展名的文件名[重复]

    这个问题在这里已经有答案了 在PHP中是否有任何方法可以获取上传到服务器的不带扩展名的文件名 我用的是 FILES file name 但它也返回扩展名 filename pathinfo FILES file name PATHINFO
  • 惯用的 Golang goroutine

    在 Go 中 如果我们有一个类型 它的方法启动某种循环机制 轮询 A 并永远执行 B 最好将其表达为 Run does stuff you probably want to run this as a goroutine func t Ty
  • 在Python中转换多个属性中的dict属性

    我有一个带有 dict 属性的类 如下所示 class MyClass def init self self mydict var1 value1 var2 value2 当我想获取值时 我必须这样做 cls MyClass print c
  • 反映在 DOM 中的同名表单元素

    如果您有多个具有相同内容的表单元素name在表格中 条目elements表单上的集合最终成为这些字段的集合 这很方便 DOM2 HTML 规范涵盖了elements收藏 http www w3 org TR DOM Level 2 HTML
  • 如何在 Oracle SQL 中检索父行的所有递归子行?

    我有一个递归查询 它确实扩展了这个 Java 猴子的 SQL 知识的极限 现在终于到了凌晨 1 30 可能是时候开始寻求帮助了 这是谷歌为数不多的几次让我失望的事情之一 表格如下 Parent ID CHILD ID QTY 25 26 1
  • 对栅格列表列表执行循环

    需要解决方案 我们将不胜感激 在下面的代码中 我创建了三个栅格 然后我创建一个随机的number该栅格上的点位置 我收到三个矩阵的列表 其中包含这些随机位置的坐标samples 然后 我获取这些位置和样本栅格值以接收samplevalues
  • C# - 在单元测试中断言两个对象相等

    使用 Nunit 或 Microsoft VisualStudio TestTools UnitTesting 现在我的主张失败了 TestMethod public void GivenEmptyBoardExpectEmptyBoard
  • geom_text 未标记躲避的 geom_bar

    我似乎无法让 geom label 来标记躲避条形图CLASS 情节被 躲避 的因素 相反 我得到的是总数count per PROC the Y axis ggplot data df mapping aes x PROC geom ba
  • 我可以使用什么算法来查找图中指定节点类型之间的最短路径?

    这就是问题 我有 n 个点 p1 p2 p3 pn 每个点都可以以确定的成本 x 连接到任何其他点 每个点都属于一组点类型中的一个 例如 A B C D 该方法的输入是我想要遵循的路径 例如 A B C A D B 输出是连接我在输入中给出
  • 为什么在 viewDidAppear 中调用我的 CABasicAnimation 不起作用?

    In viewDidAppear我调用以下代码 MyView myView MyView alloc initWithFrame CGRectMake 100 100 100 100 myView backgroundColor UICol
  • 使用 JavaScript 分割 url

    我正在尝试拆分以下网址 http www store com products aspx Books The happy donkey 为了只得到http www store com products aspx 我正在使用 JavaScri
  • 如何校准 Android 加速度计并降低噪音、消除重力

    所以 我已经在这个问题上挣扎了一段时间 并且没有运气利用互联网的智慧和有关该主题的相关 SO 帖子 我正在编写一个 Android 应用程序 它使用无处不在的加速度计 但即使在休息时 我似乎也会收到令人难以置信的大量 噪音 而且似乎不知道如
  • 如何正确配置 ASP.NET Core 5 Swagger 以与 Azure A/D 授权代码身份验证配合使用?

    我正在将 ASP NET Core 5 Web API 安全性从隐式升级为授权代码 身份验证是使用 Azure A D 完成的 我还需要允许使用 Swagger 文档 我已经设法使它工作 但 client secret 在我的情况下毫无用处
  • 未找到请求 ajax spring mvc

    我和人们有一张桌子 当我单击删除图标时 我想从数据库中删除该人 并在成功后从表中删除该行 我不断地得到deleteEmployee id 37 not found 404 我有一个控制器 RequestMapping value delet
  • 如何检查 no 是否阶乘?

    我有一个问题 然后给定一些输入数字 n 我们必须检查该 no 是否是其他某个 no 的阶乘 输入 24 输出真输入 25 输出假我为其编写了以下程序 int factorial int num1 if num1 gt 1 return nu
  • ODBC 管理员找不到 Oracle TNS 名称文件

    当我去安装新的 Oracle 时Configuration Management Tools gt Microsoft ODBC Administrator gt System DSN gt Add gt new installation
  • 支持使用 ajax 的浏览器后退按钮而不依赖于哈希更改?

    我目前正在使用 jQuery BBQ 插件来启用 Bowser 导航按钮 但我有一个问题 如果用户为其中一个页面保存书签 比如说 www mysite com page1 当用户通过书签返回时 必须首先加载整个页面 www mysite c
  • 释放指针变量指向的内容后重用它们是否安全?

    释放指针指向的数据后重用指针是否安全且可预测 例如 char fileNames words txt moreWords txt char words NULL int wordsCount NULL for i 0 i lt 2 i da
  • 是否有 Google 自定义搜索 REST API 的工作示例?

    我需要创建一个自动执行 Google 搜索的屏幕 我了解 JavaScript 并且我正在努力让 GSE 工作 我有一个搜索引擎和一个 API 密钥 问题是谷歌的文档是循环的 即页面相互指向 没有可以让我开始研究的工作样本 如果您知道工作示