从Google自定义搜索中返回随机帖子

时间:2015-03-30 17:42:03

标签: javascript jquery google-custom-search

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

This SO article似乎可以通过创建第二个动作按钮来添加一个流行标签或主题的随机术语,但似乎应该有更直接的东西。

关键是人们可以去搜索引擎,点击“随机发布”已经有一些文章返回灵感,等等。据我所知,谷歌搜索API(现已弃用)可以公平地做到这一点容易。我似乎无法找到任何人尝试使用自定义搜索做类似的事情,我会欣赏一点方向。感谢。

2 个答案:

答案 0 :(得分:0)

它不是很优雅,但我最终通过设置一系列搜索字词,然后使用自定义搜索按钮填写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>

现在已经设置了表单,我们需要添加一个可能的搜索项数组以及一个从数组中随机选择主题的函数。

// 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源以编程方式创建阵列。不过,这将适用于现在。

答案 1 :(得分:0)

解决方案包含在Custom Search API中: 使用execute()

返回的元素对象的google.search.cse.element.getElement()方法

&#13;
&#13;
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 );
&#13;
<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>
&#13;
&#13;
&#13;