Greasy Fork

Greasy Fork is available in English.

douban delete follower

add button to douban to delete follower

当前为 2018-11-01 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         douban delete follower
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  add button to douban to delete follower
// @author       harryhare
// @license      GPL 3.0
// @match        https://www.douban.com/contacts/rlist**
// @grant        none
// ==/UserScript==


var i=0;
var button;
var ck="";
var url_ban="/j/contact/addtoblacklist";
var url_unban="/j/contact/unban";

//time delay
var interval=2000;
var interval_id;

var mode="serial";//do unfollow one by one

function getCookie(c_name)
{
    if (document.cookie.length>0)
    {
        var c_start=document.cookie.indexOf(c_name + "=");
        if (c_start!=-1){
            c_start=c_start + c_name.length+1;
            var c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) c_end=document.cookie.length;
            return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}

var user_list=[];
var name_map={};
var node_map={};
var href_map={};
var button_list=[];
var cur=0;

function prepare(){
    var userlist_nodes=document.querySelectorAll("div#wrapper div#content div.grid-16-8.clearfix ul.user-list li.clearfix");
	for(let i=0;i<userlist_nodes.length;i++){
		var t=userlist_nodes[i];
		var id=t.id.replace("u","");
        var name=t.childNodes[1].title;
        var href=t.childNodes[1].href;
        user_list.push(id);
        name_map[id]=name;
        node_map[id]=t;
        href_map[id]=href;
        var b=document.createElement('a');
        b.class="a-btn-add mr10 add_contact";
        b.id=id;
        b.innerHTML='取消对我的关注';
        b.onclick=click_unfollow;
        b.style="align:right;";
        button_list.push(b);
        var x=t.querySelector("div.info");
        x.append(b);
    }
}

function click_unfollow(e){
    var id=e.target.id;
    var name=name_map[id];
    var node=node_map[id];
    var href=href_map[id];
    var asyn=true;
    if(asyn){
        ban(id,name,node,href,true);
    }else{
        ban(id,name,node,href,false);
        unban(id,name,node,href,false);
        after(id,name,node,href);
    }
}

function do_ban_and_unban(){
    if(cur>=button_list.length){
        interval_id=window.clearInterval(interval_id);
        return;
    }
    button_list[cur].click();

    cur++;
}

function ban(userid,name,node,href,asyn) {
    var xmlhttp=new XMLHttpRequest();
    var url=url_ban;
    var data="people="+userid+"&ck="+ck;
    console.log('ban:',data);
    node.innerHTML="<a href='"+href+"'>正在ban:"+name+"</a>";
    xmlhttp.open("POST",url,asyn);
    xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    if(asyn){
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200 ) {
                unban(userid,name,node,asyn);
            }
        };
    }
    xmlhttp.send(data);
}

function unban(userid,name,node,asyn){
    var xmlhttp=new XMLHttpRequest();
    var url=url_unban;
    var data="people="+userid+"&ck="+ck;
    console.log("ban success:"+data);
    console.log('unban:',data);
    node.children[0].innerHTML="正在unban:"+name;
    xmlhttp.open("POST",url,asyn);
    xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    if(asyn){
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200 ) {
                after(userid,name,node);
            }
        };
    }
    xmlhttp.send(data);
}

function after(userid,name,node){
    console.log("unban success:"+userid);
    node.children[0].innerHTML="已取消"+name+"对你的关注";
}

(function() {
    'use strict';
    ck=getCookie("ck");
    var x=document.querySelector("div#wrapper div#content");
    var y1=document.querySelector("div#wrapper div#content h1");
    var y2=document.querySelector("div#wrapper div#content div.grid-16-8.clearfix");
    var userlist_container=document.querySelector("div#wrapper div#content div.grid-16-8.clearfix ul.user-list");
    if(!x || !y1 || !y2 ){
        return;
    }
    button=document.createElement('button');
    button.innerHTML='一键取消本页用户对我的关注';
    prepare();
    button.onclick=(e)=>{
        interval_id= window.setInterval(do_ban_and_unban,interval);
    };
    userlist_container.prepend(button);
})();