Примеры запуска обратного вызова поиска
Обратный вызов начала поиска может изменить запрос до его использования для поиска. Программируемую поисковую систему можно настроить на включение в запрос заранее определенных терминов, но этот обратный вызов может изменить запрос на основе любой информации, доступной функции обратного вызова.
Следующий обратный вызов , запускающий поиск , украшает каждый запрос текущим днем недели.
<script async
src="https://cse.google.com/cse.js?cx=000888210889775888983:g9ckaktfipe"></script>
const mySearchStartingCallback = (gname, query) => {
const dayOfWeek = new Date().getDay();
console.log(dayOfWeek);
var days = {
"0": "Sunday",
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday"
};
return query + ' ' + days[dayOfWeek];
};
// Install the callback.
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
image: {
starting: mySearchStartingCallback,
},
web: {
starting: mySearchStartingCallback,
},
};
Включите эти элементы в HTML:
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
Результаты. Примеры обратного вызова
Обратный вызов, отображаемый в результате, удобен для изменения страницы после ее заполнения результатами. Он разработан, чтобы упростить изменение отображения результатов, не требуя от обратного вызова брать на себя полную ответственность за отображение результатов.
Следующие примеры иллюстрируют два применения обратного вызова обработки результатов, которые не работают с результатами.
В результате этого отображаются уведомления обратного вызова о том, что мы показываем последнюю страницу результатов, и появляется всплывающее предупреждение, напоминающее пользователю, что он достиг конца.
<script async
src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
var searchresults= document.getElementsByClassName("gsc-cursor-page");
var index= document.getElementsByClassName("gsc-cursor-current-page");
if(index.item(0).innerHTML == searchresults.length){
alert("This is the last results page");
}
};
Установить обратный вызов
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
web: {
// Since the callback is in the global namespace, we can refer to it by name,
// 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
rendered: myWebResultsRenderedCallback,
},
};
Включите эти элементы в HTML:
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
Демо-версия обратного вызова , отображаемая в результате, увеличивает размер шрифта цифр «курсора», которые выбирают страницы результатов.
Размер шрифта по умолчанию — 12 пикселей. Здесь мы увеличиваем его до 20 пикселей.
<script async
src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
document.getElementsByClassName("gsc-cursor")[0].style.fontSize = '20px';
};
Установить обратный вызов
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
web: {
// Since the callback is in the global namespace, we can refer to it by name,
// 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
rendered: myWebResultsRenderedCallback,
},
};
Включите эти элементы в HTML:
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
В результате полученный обратный вызов меняет ссылки на страницы в «курсоре» с цифр на буквы.
<script async
src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
var arr = document.getElementsByClassName('gsc-cursor-page');
var alp = ['A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','p','Q','R','S','T','U','V','W','X','Y','Z'];
for (var i = 0; i < arr.length; i++) {
arr[i].innerHTML = alp[i];
}
};
Установить обратный вызов
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
web: {
// Since the callback is in the global namespace, we can refer to it by name,
// 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
rendered: myWebResultsRenderedCallback,
},
};
Включите эти элементы в HTML:
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
Примеры обратного вызова готовых результатов
Этот обратный вызов форматирует результаты с чередованием светлого и темного фона.
<script async
src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
Примечание. Этот код написан на JavaScript/ES6. Он будет работать в большинстве браузеров, но для Internet Explorer и некоторых других старых браузеров его необходимо будет преобразовать в JavaScript/ES5.
barredResultsRenderedCallback = function(gname, query, promoElts, resultElts){
const colors = ['Gainsboro', 'FloralWhite'];
let colorSelector = 0;
for (const result of resultElts) {
result.style.backgroundColor = colors[colorSelector];
colorSelector = (colorSelector + 1) % colors.length;
}
};
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
web: {
rendered: barredResultsRenderedCallback,
},
};
Включите эти элементы в HTML:
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
Облако слов
Очевидным применением обратного вызова готовности результатов является отображение результатов поиска в формате, который было бы трудно достичь с помощью обратного вызова , отображаемого для результатов , для настройки HTML. Обратный вызов готовности результатов начинается с пустого div
. В одном из примеров в документе Search Element API показано, как использовать обратный вызов для отображения очень простой версии результатов. В другом примере показано, как хранить данные результатов из обратного вызова готовности результатов и передавать их в обратный вызов обработки результатов , где их можно использовать для украшения стандартного отображения результатов.
Следующий обратный вызов готовности результатов показывает, что результаты поиска не обязательно должны быть списком результатов. Он заменяет обычное отображение результатов поиска облаком слов, найденных в заголовках и содержании результатов. Если список результатов является для вашего пользователя лишь промежуточным шагом, такой обратный вызов может обойти этот этап и использовать результаты для представления отчета, который хочет пользователь.
<script async
src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
<style>
#container {
width: 100%;
height: 4.5in;
margin: 0;
padding: 0;
}
</style>
<script src="https://cdn.anychart.com/releases/v8/js/anychart-base.min.js"></script>
<script src="https://cdn.anychart.com/releases/v8/js/anychart-tag-cloud.min.js"></script>
Примечание. Этот код написан на JavaScript/ES6. Он будет работать в большинстве браузеров, но его необходимо будет преобразовать в JavaScript/ES5 для Internet Explorer и некоторых других старых браузеров.
const resultsReadyWordCloudCallback = function(
name, q, promos, results, resultsDiv) {
const stopWords = new Set()
.add('a')
.add('A')
.add('an')
.add('An')
.add('and')
.add('And')
.add('the')
.add('The');
const words = {};
const splitter = /["“”,\?\s\.\[\]\{\};:\-\(\)\/!@#\$%\^&*=\+\*]+/;
if (results) {
for (const {contentNoFormatting, titleNoFormatting} of results) {
const wordArray = (contentNoFormatting + ' ' + titleNoFormatting)
.split(splitter)
.map(w => w.toLowerCase());
for (const w of wordArray) {
if (w && !stopWords.has(w)) {
words[w] = (words[w] + 1) || 1;
}
}
}
}
const dataForChart = [];
for (const key in words) {
const val = words[key];
dataForChart.push({
'x': key,
'value': val,
});
}
const container = document.createElement('div');
resultsDiv.appendChild(container);
container.id = 'container';
// create a tag (word) cloud chart
const chart = anychart.tagCloud(dataForChart);
// set a chart title
chart.title(`Words for query: "${q}"`)
// set an array of angles at which the words will be laid out
chart.angles([0, 45, 90, 135])
// display the word cloud chart
chart.container(container);
chart.draw();
return true; // Don't display normal search results.
};
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
web: {
ready: resultsReadyWordCloudCallback,
},
};
Включите эти элементы в HTML:
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
Пример обратного вызова из двух частей
Обратные вызовы готовых результатов и обработанных результатов можно использовать в сочетании для передачи информации от первого ко второму. Например, информация в массиве объектов результатов доступна для обратного вызова готовности результатов , но не для обратного вызова обработки результатов . Сохраняя эту информацию в массиве как часть обратного вызова готовности результатов, мы можем сделать ее доступной для обратного вызова , отображаемого для результатов .
Одним из примеров этого является обход панели предварительного просмотра, отображаемой при нажатии на результат изображения. С помощью обратного вызова, состоящего из двух частей, мы можем получить ссылку на результаты изображения непосредственно на соответствующие веб-сайты, а не отображать предварительный просмотр изображения при нажатии.
<script async
src="https://cse.google.com/cse.js?cx=000888210889775888983:g9ckaktfipe"></script>
const makeTwoPartCallback = () => {
let urls;
const readyCallback = (name, q, promos, results, resultsDiv) => {
urls = [];
for (const result of results) {
urls.push(result['contextUrl']);
}
};
const renderedCallback = (name, q, promos, results) => {
const removeEventListeners = element => {
const clone = element.cloneNode(true);
element.parentNode.replaceChild(clone, element);
return clone;
};
for (let i = 0; i < results.length; ++i) {
const element = removeEventListeners(results[i]);
element.addEventListener('click', () => window.location.href = urls[i]);
}
};
return {readyCallback, renderedCallback};
};
const {
readyCallback: imageResultsReadyCallback,
renderedCallback: imageResultsRenderedCallback,
} = makeTwoPartCallback();
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
image: {
ready: imageResultsReadyCallback,
rendered: imageResultsRenderedCallback,
},
};
Включите эти элементы в HTML:
<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>