我必须实施一个包含多个谷歌搜索表单的页面。我们获得了Google for CSE的许可,情况就是这样:
我的搜索表单位于每个页面顶部,执行简单搜索并在单独的页面中显示结果。这有效。
我有一个特定页面,此外,还显示另外两个搜索表单:一个应按类别过滤文章,另一个应按类别过滤文章并将结果限制为某个月。为此我已经为每篇文章添加了一个带有发布日期的元键。
我在文档中有点丢失,但是:如果我添加
<gcse:searchbox-only resultsUrl="/[site]/stat/search/google_search_results.html"></gcse:searchbox-only></div>
到页面,我无法过滤结果。如果我开始插入CustomSearchObject,我看不到在不同页面上显示结果的选项。
对于基于类别的过滤,我尝试追加
more:pagemap:metatags-taxonomies:news
到结果页面URL中的查询参数,它确实有效,但我不明白如何将其注入表单。 对于基于日期的限制,我尝试添加
&sort=more:pagemap:metatags-pubdate:r:YYYYMMDD:YYYYMMDD
但未能使其发挥作用。获取XML确实有效:
http://www.google.com/search?q=intitle:[mysite]%20more:pagemap:metatags-taxonomies:News&sort=metatags-pubdate:r:20120401:20120830&cx=[mykey]client=google-csbe&output=xml
返回正确的结果。
有没有这么多假设的文档?我找到的只是没有上下文的代码片段。我已经检查了Filtering and sorting,Custom Search Element Control API,当然还有这个网站,但我不能将所有部分放在一起。
答案 0 :(得分:0)
我设法实现了我想要的东西。在搜索页面中,我构建了指向结果页面的简单表单(如果您必须实施Google品牌推广,这可能不可行),并在结果页面中添加以下内容:
(在<head>
)
<script src="http://www.google.com/jsapi"></script>
<script>
// This function extracts the query from the URL (if GET) or builds a search query.
// Code removed to simplify the example.
function buildQuery () {
return '<?php echo $_POST['q'];?> more:pagemap:metatags-taxonomias:News'); // injecting the taxonomy metatag filter
}
google.load('search', '1', {language : 'es'});
google.setOnLoadCallback(function() {
var customSearchOptions = {};
customSearchOptions[google.search.Search.RESTRICT_EXTENDED_ARGS] = {'sort':'metatags-pubdate:d,metatags-pubdate:r:<?php echo $_POST['startdate'];?>:<?php echo $_POST['enddate'];?>'}; // these come from the POST request, are processed earlier in the script.
var customSearchControl = new google.search.CustomSearchControl('XXXXXXXXXXX', customSearchOptions); // Put your own App key here.
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
var drawOptions = new google.search.DrawOptions();
drawOptions.enableSearchResultsOnly(); // I don't want the search box here
customSearchControl.draw('cse-results-press', drawOptions);
var query = parseQuery();
if (query) {
customSearchControl.execute(query);
}
}, true);
</script>
在<body>
:
<div id="cse-results-press">Loading...</div>