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>
我正在与一位朋友合作,他在他的网站上使用免费的 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>