您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhance your Google search experience by displaying additional search results from the Google Custom Search API in a convenient sidebar. Perfect for power users who want more information at their fingertips.
当前为
- // ==UserScript==
- // @name Friendly Sidebar Display of Custom Search API Results
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Enhance your Google search experience by displaying additional search results from the Google Custom Search API in a convenient sidebar. Perfect for power users who want more information at their fingertips.
- // @author Your Name
- // @match https://www.google.com/search?*
- // @grant GM_xmlhttpRequest
- // @grant GM_addStyle
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- // Add custom styles for the sidebar
- GM_addStyle(`
- #custom-search-sidebar {
- position: fixed;
- right: 0;
- top: 0;
- width: 30%; /* Adjust width as needed */
- height: 100%;
- background-color: white;
- overflow-y: auto;
- border-left: 1px solid #ccc;
- z-index: 9999;
- padding: 10px;
- box-sizing: border-box;
- }
- #settings-form {
- position: fixed;
- top: 10px;
- right: 10px;
- background-color: white;
- padding: 10px;
- border: 1px solid #ccc;
- z-index: 10000;
- display: none; /* Initially hidden */
- }
- #show-settings {
- position: fixed;
- top: 10px;
- right: 10px;
- z-index: 10001;
- }
- `);
- // Function to load settings with a default value for dateRestrict
- function loadSettings() {
- return {
- apiKey: localStorage.getItem('apiKey') || '',
- searchEngineId: localStorage.getItem('searchEngineId') || '',
- dateRestrict: localStorage.getItem('dateRestrict') || '' // Default to 'm1' if not set
- };
- }
- // Function to save settings
- function saveSettings(apiKey, searchEngineId, dateRestrict) {
- localStorage.setItem('apiKey', apiKey);
- localStorage.setItem('searchEngineId', searchEngineId);
- localStorage.setItem('dateRestrict', dateRestrict);
- }
- // Function to create settings form
- function createSettingsForm() {
- const form = document.createElement('div');
- form.id = 'settings-form';
- form.innerHTML = `
- <input type="text" id="api-key-input" placeholder="API Key" value="${loadSettings().apiKey}">
- <input type="text" id="search-engine-id-input" placeholder="Search Engine ID" value="${loadSettings().searchEngineId}">
- <button id="save-settings">Save</button>
- `;
- document.body.appendChild(form);
- document.getElementById('save-settings').addEventListener('click', function () {
- const apiKey = document.getElementById('api-key-input').value;
- const searchEngineId = document.getElementById('search-engine-id-input').value;
- saveSettings(apiKey, searchEngineId);
- form.style.display = 'none'; // Hide the form after saving settings
- });
- }
- // Create a button to show/hide the settings form
- const showSettingsButton = document.createElement('button');
- showSettingsButton.id = 'show-settings';
- showSettingsButton.textContent = 'Settings';
- document.body.appendChild(showSettingsButton);
- showSettingsButton.addEventListener('click', function () {
- const form = document.getElementById('settings-form');
- form.style.display = form.style.display === 'none' ? 'block' : 'none';
- });
- // Create settings form on script load
- createSettingsForm();
- // Extract the search query from the URL
- const params = new URLSearchParams(window.location.search);
- const query = params.get('q');
- // Create the sidebar div
- const sidebar = document.createElement('div');
- sidebar.id = 'custom-search-sidebar';
- document.body.appendChild(sidebar);
- // Use the settings to construct the initial API request URL
- const { apiKey, searchEngineId, dateRestrict } = loadSettings();
- const requestUrl = `https://www.googleapis.com/customsearch/v1?key=${apiKey}&cx=${searchEngineId}&q=${encodeURIComponent(query)}&dateRestrict=${dateRestrict}`;
- // ...之前的代码...
- // Make the API request
- GM_xmlhttpRequest({
- method: 'GET',
- url: requestUrl,
- onload: function (response) {
- const results = JSON.parse(response.responseText);
- displayResults(results);
- },
- onerror: function (error) {
- console.error('API Request failed', error);
- }
- });
- // ...之前的代码...
- // Function to display results in the sidebar
- function displayResults(data) {
- const sidebar = document.getElementById('custom-search-sidebar');
- // Save the date restrict select element and remove it temporarily from the sidebar
- const dateRestrictSelect = document.getElementById('date-restrict-select');
- if (dateRestrictSelect && dateRestrictSelect.parentNode) {
- dateRestrictSelect.parentNode.removeChild(dateRestrictSelect);
- }
- // Clear existing results
- sidebar.innerHTML = '';
- // Re-add the date restrict select element to the sidebar
- if (dateRestrictSelect) {
- sidebar.appendChild(dateRestrictSelect);
- }
- if (data.items && data.items.length > 0) {
- const list = document.createElement('ul');
- list.style.listStyle = 'none';
- list.style.padding = '0';
- list.style.margin = '0';
- data.items.forEach(item => {
- const listItem = document.createElement('li');
- listItem.style.marginBottom = '10px';
- const title = document.createElement('div');
- title.style.fontWeight = 'bold';
- title.textContent = item.title;
- const link = document.createElement('a');
- link.href = item.link;
- link.textContent = item.displayLink;
- link.style.display = 'block';
- link.style.marginBottom = '5px';
- link.style.color = '#1a0dab';
- link.target = '_blank';
- const snippet = document.createElement('div');
- snippet.textContent = item.snippet;
- listItem.appendChild(title);
- listItem.appendChild(link);
- listItem.appendChild(snippet);
- list.appendChild(listItem);
- });
- sidebar.appendChild(list);
- } else {
- sidebar.textContent = 'No results found.';
- }
- }
- // ...之后的代码...
- // ...之前的代码...
- // Function to create the date restrict selector within the sidebar
- function createDateRestrictSelectorInSidebar() {
- const selector = document.createElement('select');
- selector.id = 'date-restrict-select';
- selector.innerHTML = `
- <option value="">Any time</option>
- <option value="d1">Past 24 hours</option>
- <option value="d7">Past week</option>
- <option value="m1">Past month</option>
- <option value="y1">Past year</option>
- `;
- // Pre-select the saved date restrict option
- const savedDateRestrict = loadSettings().dateRestrict;
- if (savedDateRestrict) {
- selector.value = savedDateRestrict;
- }
- // Event listener to update results on change
- selector.addEventListener('change', function () {
- const dateRestrict = selector.value;
- console.log(dateRestrict)
- saveSettings(loadSettings().apiKey, loadSettings().searchEngineId, dateRestrict);
- updateSearchResults();
- });
- // Add the selector to the sidebar
- const sidebar = document.getElementById('custom-search-sidebar');
- sidebar.insertBefore(selector, sidebar.firstChild);
- }
- // Function to update search results
- function updateSearchResults() {
- // Extract the search query from the URL
- const params = new URLSearchParams(window.location.search);
- const query = params.get('q');
- console.log(loadSettings())
- // Get updated settings
- const { apiKey, searchEngineId, dateRestrict } = loadSettings();
- // Construct the API request URL
- const requestUrl = dateRestrict
- ? `https://www.googleapis.com/customsearch/v1?key=${apiKey}&cx=${searchEngineId}&q=${encodeURIComponent(query)}&dateRestrict=${dateRestrict}`
- : `https://www.googleapis.com/customsearch/v1?key=${apiKey}&cx=${searchEngineId}&q=${encodeURIComponent(query)}`;
- // Make the API request and update the sidebar
- GM_xmlhttpRequest({
- method: 'GET',
- url: requestUrl,
- onload: function (response) {
- const results = JSON.parse(response.responseText);
- displayResults(results);
- },
- onerror: function (error) {
- console.error('API Request failed', error);
- }
- });
- }
- // ...之前的代码...
- // Call this function to create the date restrict selector inside the sidebar
- createDateRestrictSelectorInSidebar();
- // Rest of your script...
- })();