Return 随机 post 来自 Google 自定义搜索

Return random post from Google Custom Search

我正在与一位朋友合作,他在他的网站上使用免费的 Google 自定义搜索。他有一个小部件,可以搜索网络成员博客列表(在各种平台上),然后 returns 结果。我想知道是否有一种方法可以添加一个按钮 - 使用 jQuery 或 JavaScript - 这将使用随机术语执行搜索。

This SO article 通过创建第二个操作按钮似乎是合理的,该按钮从一组流行标签或主题中添加一个随机术语,但似乎应该有更直接的东西。

重点是人们可以去搜索引擎,点击 "Random Post" 返回一些文章以获得灵感等。据我所知,Google 搜索 API(现已弃用)可以很容易地做到这一点。我似乎找不到任何人尝试使用自定义搜索来做类似的事情,我会很感激一些指导。谢谢

这不是很优雅,但我最终解决了这个问题,方法是设置一组搜索词,然后使用自定义搜索按钮填写 Google 自定义搜索字段。

使用 this SO post 作为模型,除了自定义搜索 HTML 之外,我还使用新按钮设置了 HTML。

<form id="cse-search-box" action="http://google.com/cse">
  <input type="hidden" name="cx" value="partner-pub-2789521296837340:9402765321" />
  <input type="hidden" name="ie" value="UTF-8" />
  <input type="text" name="q" size="31" />
  <input type="submit" name="sa" value="Search" />
  <!-- This is the new button - the "random" ID allows it to be targeted separately. -->
  <input id="random" type="submit" name="random" value="Random" />
</form>

现在表格已经设置好了,我们需要添加一个可能的搜索词数组以及一个函数来从数组中随机 select 一个主题。

// With input selected, do this on click
$( "input#random" ).on('click', function() {

  // The array of possible search terms.
  var myArray = ['animals','dogs','cats', 'emu','fish','snakes', 'panda bears','meerkats','spiders','birds'];

  // Choose a term randomly
  var rand = myArray[Math.floor(Math.random() * myArray.length)];

  // Write them term in the search box and then submit the search
  var input = $("input[name='q']");
  input.val(input.val() + ' ' + rand);

  $( "form#cse-search-box" ).submit();
});

显然,数组越大,随机性就越好。我想改进的一件事是通过阅读正在搜索的博客和网站的 RSS 提要,以编程方式创建数组。不过,这暂时有效。

解决方案包含在Custom Search API中:
使用google.search.cse.element.getElement()

返回的元素对象的execute()方法

var queries = ['custom search', 'random', 'google', 'Brian Bennett'];
document.querySelector('button').addEventListener('click', function() {
      var cseElement = google.search.cse.element.getElement('standard0');
      var rand = Math.floor( Math.random() * queries.length);
      cseElement.execute( queries[rand] );
      }, false );
<script>
  (function() {
    var cx = '011833858776650720395:4l5dii3zv2w';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
      '//www.google.com/cse/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>
<gcse:search></gcse:search>
<button>Random search</button>