搞机男  订阅  何许人也  

批量删除新浪微博发言内容

今天想把新浪微博上发过的内容全部删除了,就找了一个脚本,挺方便的,用了将近20分钟把六千多条微博全部清空了。。。

脚本是由 @TibcoPaul 写的,很方便基本没有中断,脑袋抽风想删除自己微博的童鞋可以试试~~

使用方法:

  1. 先进入你的个人主页
  2. 在Firefox控制台或者Chrome控制台执行下面这段代码
  3. 等待, 直到页面弹出 "It's done! Love you! Tibco Paul."
var deleteAllMyPost = function() {
    // check browser
    if (!document.createEvent) {
        alert('Sorry, but you should run my script under Firefox or Chrome, NO IE!nn对不起, 你只能在火狐或者谷歌浏览器Chrome下运行这段代码!nnTo download Firefox, please go to: "http://www.mozilla.org/en-US/firefox/new/", then install "Firebug" to run it;nn下载火狐,请打开:http://www.mozilla.org/en-US/firefox/new/');
        return false;
    } 

    // seriously warning!
    var dbconfirm = confirm('Warning: to run this script, all of your posts in Weibo.com will be deleted! ARE YOU SURE?nn警告: 如果继续执行这个代码, 那么你新浪微博里面的所有的帖子都会被删除, 你确定么?');

    if (!dbconfirm) {
        return false;
    }

    // check if current page is personal page
    var pageUrl = location.href;
    if (!/.*/profile?.*/.test(pageUrl)) {
        alert('Sorry, but, to run this script to delete your all of your posts, you should go to your personal page by clicking your avatar or your nic-name next to your avatar;nn对不起, 要运行这段代码去删除你所有的新浪微博帖子, 请点击你的头像或者你头像旁边的你的昵称跳到你的个人微博主页.');
        return false;
    }

    // deleting indicator
    var masker = document.createElement('div');
    var maskerText = '<h1>Deleting all posts of your weibo.com, to cancel deleting, please press F5 key. <br /> 正在删除新浪微博所有的帖子,如果要停止删除,请按 F5 键.</h1>';
    masker.innerHTML = maskerText;
    masker.style.opacity = '0.7';
    masker.style.backgroundColor = '#000000';
    masker.style.position = 'fixed';
    masker.style.height = '100%';
    masker.style.width= '100%';
    masker.style.top= '0';
    masker.style.left= '0';
    masker.style.zIndex= '9999';
    masker.style.color= '#ffffff';
    masker.style.padding= '100px';

    document.body.appendChild(masker);

    // prepare click event
    var event = document.createEvent('HTMLEvents');
    event.initEvent('click', true, true);

    // get next page handler
    var getNextPageBtn = function() {
        var tmpBtns = document.getElementsByTagName('span');
        len = tmpBtns .length;
        window.nextPageBtn = null;
        for (var i = 0; i < len; i++) {
            nextPageBtnTmp = tmpBtns[i];
            if (/下一页/.test(nextPageBtnTmp.innerHTML)){
                nextPageBtn = nextPageBtnTmp.parentNode;
            }
        }
        return nextPageBtn;
    }

    // periodly check next page button is available

    // trigger lazyload to load all post
    // trigger
    // scroll down to trigger lazyLoad

    var scrollDown = function() {
        setInterval(function(){
            // if pre-cached nextPageBtn is removed from dom, then rock it again
            getNextPageBtn();
            if (!nextPageBtn || !nextPageBtn.parentNode.parentNode) {
                var sh = document.body.scrollHeight;
                window.scroll(0, sh);
                // if failed, retry
                var retryLoadLinkTmp = document.getElementsByTagName('a');
                len = retryLoadLinkTmp.length;
                for (var i = 0; i < len; i++) {
                    var retryLoadLink = retryLoadLinkTmp[i];
                    if (/请重试/.test(retryLoadLink.innerHTML)){
                        retryLoadLink.dispatchEvent(event);
                    }
                }
            } else if (typeof countActiveXhr == 'undefined' || countActiveXhr === 0) {
                main();
            }
        }, 1000);
    }

    // invoke scrollDown
    scrollDown();

    var main = function() {

        // all array or dom obj len
        var len = 0;

        // new get all dl list, the post id is attached on dl element
        var elements = document.getElementsByTagName('dl');
        var myE = null;
        // all post id (message id) to delete
        var midToDel = [];

        // filter dl that doesn't have feed_list_item attribute
        var dlAttrFileter = '';

        // catch all dom obj to array, speed up javascript
        var elementArr = [];

        len = elements.length;
        for (var i = 0; i < len; i++ ) {
            elementArr[i] = elements[i];
        }

        len = elementArr.length;
        for (var i = 0; i < len; i++) {
            myE = elementArr[i];
            dlAttrFileter = myE.getAttribute('action-type');
            // if has action-type attribute and it's value is equal to feed_list_item
            if (dlAttrFileter && (dlAttrFileter == 'feed_list_item')) {
                // push all post id in midToDel array
                midToDel.push(myE.getAttribute('mid'));
            }
        }

        var xhrs = [];
        // count current active xhr, if none active, then turn to next page
        window.countActiveXhr = 0;

        len = midToDel.length;
        for (var i = 0; i < len; i++) {
            // create new xhr
            xhrs[i] = new XMLHttpRequest();
            xhrs[i].open('POST', 'http://weibo.com/aj/mblog/del');
            // should set these headers, to simulate the xhr is generated by native script in weibo.com
            xhrs[i].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
            xhrs[i].setRequestHeader('X-Requested-With', 'XMLHttpRequest');
            xhrs[i].onreadystatechange = function() {
                if (this.readyState == 4 && (this.status == 200)) {
                    // decreate the active xhr counter
                    countActiveXhr--;
                    if (!countActiveXhr) {
                        // turn to next page, fire click event
                        nextPageBtn.dispatchEvent(event);
                    }
                }
            };
            // send data, keep in mind, the _t is extra data required by weibo.com
            xhrs[i].send('mid=' + midToDel[i] + '&' + '_t=0');

            // increate active xhr counter
            countActiveXhr++;
        }
    }

}

// rock it!!!!
deleteAllMyPost();

新浪微博比较顽固所以要这么删,这里再给出 Twitter 的批量删除方法,这个是利用 OAuth 登录后通过 API 删除的,很安全。

Twitter http://app.orzdream.com/twitrub/


Carpe Diem.
Contact me at tink.im. 回到顶部