Greasy Fork

Greasy Fork is available in English.

油猴酷@百度,谷歌搜索记录在线保存收藏

可以自动在线保存搜索过的关键词,可以浏览最近保存的关键词,可以在搜索,删除保存的关键字(扩展),可以收藏关键词并查看,安全保密,尊重用户隐私。

当前为 2020-06-19 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         油猴酷@百度,谷歌搜索记录在线保存收藏
// @namespace    www.keywords.cool
// @homepage     https://www.keywords.cool
// @version      1.0.1
// @description  可以自动在线保存搜索过的关键词,可以浏览最近保存的关键词,可以在搜索,删除保存的关键字(扩展),可以收藏关键词并查看,安全保密,尊重用户隐私。
// @author       colin
// @match        *://www.baidu.com/*
// @match        *://www.google.com/search?*
// @require      https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @grant        unsafeWindow

// ==/UserScript==

var jq1124 = jQuery.noConflict(true);

// 重要重要重要,注意:这里填写您的api Token注意不要换行,api Token从官网登录进个人中心获取,官网是 https://www.keywords.cool
var token = "请在这里填写您从官网获取的api Token";

// 特别重要!!!该脚本可以单独使用,但功能有限制,目前己知百度在某些情况下不能自动向服务器推送数据。要想获得更好体验请同时安装chrome扩展(推荐)。如果你非要单独使用请打开line:107、line:108两行注释。回车或点击“百度一下”会推
// 送数据,但有些情况下不会主动推送数据,比如你选择了百度下拉推荐,或是直接在搜索框搜索没有回车,没有点按钮。所以如果你发现有些词没有保存,请点一下“百度一下”按钮。安装chrome扩展完全不用担心这个问题。因为她是监听百度xhr请求的。

// 这里是接口主地址不能修改
var restUrl = "https://www.keywords.cool/api/v1/";

GM_addStyle(`
    #kwc-panel-g ul li p {margin:0;word-break:break-all;}
`);
(function($) {
    'use strict';
    // Your code here...
    // 发送 http 请求的基类
    class Base{
        constructor(){
            this.baseRequestUrl = restUrl;
        }
        request(params){
            let url = this.baseRequestUrl + params.url;
            if(!params.type){
                params.type = 'GET';
            }
            GM_xmlhttpRequest({
                method: params.type,
                url: url,
                responseType: 'json',
                data: params.data,
                headers:  {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "token": token
                },
                onload: res => {
                    params.sCallback && params.sCallback(res.response);
                }
            });
        }
    }
    // post get 关键词的类
    class Keywords extends Base {
        constructor(){
            super();
        }
        postWordsToServer(data, callback){
            this.request({
                url:'keywords/save',
                type: 'post',
                data: 'keywords='+data.keywords+'&type='+data.type,
                sCallback: res => {
                    callback && callback(res)
                }
            });
        }
        getUserKeywords(callback){
            this.request({
                url:'keywords/get',
                sCallback: res => {
                    callback && callback(res)
                }
            });
        }
        addToFavorite(id,callback){
            this.request({
                url:'keywords/favorite',
                type: 'post',
                data: 'id='+id,
                sCallback: res => {
                    callback && callback(res)
                }
            });
        }
    }
    // 脚本的主要部分开始
    let domain = document.domain;
    if(domain == 'www.baidu.com'){
        $(".s_form").append(`<div style='display:inline-block;margin: 20px'><span style='color: #1ABC9C;'>油猴酷:</span><span style='color:red' id='kwcc'></span><div>`);

        // 先获取关键字,调用接口发送一次http请求,这个是为了在当用户从地址栏跳到百度搜索结果的时候自动保存一次关键字,
        // 另外副作用是当用户刷新页面的时候也会自动保存
        let keywords = $("#kw").val();
        console.log(keywords);
        if(keywords != "" && !(/^\s$/.test(keywords)) && keywords != undefined && keywords != 'undefined' && !(/undefined/.test(keywords))){
            saveKeywords(keywords, 1);
        }
        setTimeout(getKeywords, 2000);
        $(".bg.s_btn_wr").on('click',function(){
            // 没有装chrome扩展的可以打开下面两个注释
//             let keywords = $("#kw").val();
//             saveKeywords(keywords, 1);
            setTimeout(getKeywords, 2000);
        });
    }

    if(domain == 'www.google.com'){
        if(window.location.href !="https://www.google.com/" && window.location.href !="http://www.google.com/" ){
            $("#searchform").append(`<div style='display: block;margin: 20px;margin-left: 890px;margin-top: -26px;z-index: 9999999;position: fixed;'><span style='color: #1ABC9C;'>油猴酷:</span><span style='color:red' id='kwcc'></span><div>`);
        }
        let keywords = $(".gLFyf.gsfi").val();
        console.log(keywords);
        if(keywords != "" && !(/^\s$/.test(keywords)) && keywords != undefined && keywords != 'undefined' && !(/undefined/.test(keywords))){
            saveKeywords(keywords, 2);
        }
        setTimeout(getKeywords, 1800);
    }

    function saveKeywords(keywords,type){
        let words = new Keywords();
        words.postWordsToServer({keywords,type}, res=>{
            console.log(res);
            if(res && res.err_code > 10000){
                $("#kwcc").css('color', 'red');
                $("#kwcc").html(res.err_msg);
            } else if(res && res.err_code == 10000) {
                $("#kwcc").css('color', 'blue');
                $("#kwcc").html(res.msg);
            } else {
                $("#kwcc").html('服务器没有返回任何信息');
            }
        });
    }
    function getKeywords(){
        let words = new Keywords();
        words.getUserKeywords(res=>{
            console.log(res);
            if(domain=='www.baidu.com'){
               $('#content_right').prepend(`<div id='kwc-panel' style='width:455px;margin-bottom:30px;'><div id='baidu'><h4 style='display:flex;justify-content:space-between;'><span>百度</span><span style='cursor:pointer;' onclick='closePanel();'>X</span></h4></div><div id='google'><h4>谷歌</h4></div><div id='favorite'><h4>收藏</h4></div></div>`)
            } else{
               $('#rhs').prepend(`<div id='kwc-panel-g' style='width:455px;margin-bottom:30px;'><div id='google'><h4 style='display:flex;justify-content:space-between;'><span>谷歌</span><span style='cursor:pointer;' onclick='closePanel();'>X</span></h4></div><div id='baidu'><h4>百度</h4></div><div id='favorite'><h4>收藏</h4></div></div>`)
            }
            if(res && res.hasOwnProperty('err_code')){

            } else {
                let baiduArr = res.baidu;
                let googleArr = res.google;
                let favoriteArr = res.favorite;
                let baiduDom = createDomFromArr(baiduArr,'baidu');
                let googleDom = createDomFromArr(googleArr,'google');
                let favoriteDom = createDomFromArr(favoriteArr,'',false);
                $("#baidu").append(baiduDom);
                $("#google").append(googleDom);
                $("#favorite").append(favoriteDom);

            }
        });
    }

    function createDomFromArr(array, typeName, btn='true'){
        let str = '<ul>';
        array.forEach(function(item, index){
            if(btn){
                if(typeName == 'baidu'){
                    if(item.favo == 2){
                        str += `<li style='display:flex;justify-content:space-between;margin:6px;border-bottom:1px solid #e5e5e5;'><p><a href='https://www.baidu.com/s?wd=${item.words}' target='_blank'>${item.words}</a></p><button onclick='toFavorite(${item.id})'>收藏</button></li>`;
                    }else{
                        str += `<li style='display:flex;justify-content:space-between;margin:6px;border-bottom:1px solid #e5e5e5;'><p><a href='https://www.baidu.com/s?wd=${item.words}' target='_blank'>${item.words}</a></p></li>`;
                    }
                }else{
                    if(item.favo == 2){
                        str += `<li style='display:flex;justify-content:space-between;margin:6px;border-bottom:1px solid #e5e5e5;'><p><a href='https://www.google.com/search?q=${item.words}' target='_blank'>${item.words}</a></p><button onclick='toFavorite(${item.id})'>收藏</button></li>`;
                    }else{
                        str += `<li style='display:flex;justify-content:space-between;margin:6px;border-bottom:1px solid #e5e5e5;'><p><a href='https://www.google.com/search?q=${item.words}' target='_blank'>${item.words}</a></p></li>`;
                    }
                }
            } else{
                if(item.type == 'baidu'){
                    str += `<li style='display:flex;justify-content:space-between;margin:6px;border-bottom:1px solid #e5e5e5;'><p><a href='https://www.baidu.com/s?wd=${item.words}' target='_blank'>${item.words}</a></p></li>`;
                } else{
                    str += `<li style='display:flex;justify-content:space-between;margin:6px;border-bottom:1px solid #e5e5e5;'><p><a href='https://www.google.com/search?q=${item.words}' target='_blank'>${item.words}</a></p></li>`;
                }
            }
        });
        str += '</ul>'
        return str;
    }
    unsafeWindow.toFavorite = function(fid){
        let words = new Keywords();
        words.addToFavorite(fid, res=>{
            console.log(res);
            alert(res.err_msg);
        });
    }
    unsafeWindow.closePanel = function(){
        if(domain == 'www.baidu.com'){
            $("#kwc-panel").hide();
        }else {
            $("#kwc-panel-g").hide();
        }

    }


})(jq1124);