block-weibo-red-guards.js javascript:!function() { let WEIBO_RED_GUARDS_LIST = 'https://raw.githubusercontent.com/yu961549745/WeiboBlackList/master/list.txt' , BLOCK_URI = '//weibo.com/aj/filter/block?ajwvr=6' , BLUEBIRD_URI = '//cdn.static
javascript: !function() { let WEIBO_RED_GUARDS_LIST = 'https://raw.githubusercontent.com/yu961549745/WeiboBlackList/master/list.txt' , BLOCK_URI = '//weibo.com/aj/filter/block?ajwvr=6' , BLUEBIRD_URI = '//cdn.staticfile.org/bluebird/3.5.0/bluebird.min.js' , UID_REGEXP = new RegExp(/^\d+$/) , MAX_CONCURRENCY = 1 , PER_REQ_DELAY_MS = 2000 , RESULT_SET = [] ; if(!ensureDomain('weibo.com')) { return; } loadScript(BLUEBIRD_URI, doBatchBlock); function ensureDomain(domainName, schema) { if(domainName != location.host) { alert('请在 ' + domainName + ' 域名下执行本脚本'); return false; } return true; } function loadScript(uri, callbackFn) { var body= document.getElementsByTagName('body')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= uri; body.appendChild(script); script.onload= callbackFn || noop; return script; } function noop() {} function isValidUid(uid) { return UID_REGEXP.test(uid); } function blockUserByUid(uid) { if(!isValidUid(uid)) { console.debug('invalid uid %d, skiped', uid); return Promise.resolve({ code: -1, msg: 'skip' }); } console.debug('processing uid: %d', uid); return Promise.delay(PER_REQ_DELAY_MS) .then(() => uid) .then(doBlockUserByUid); } function doBlockUserByUid(uid) { return sendBlockRequest(uid) .then(result => { RESULT_SET.push(result); return result; }) ; } function sendBlockRequest(uid) { let xhr = new XMLHttpRequest(); return new Promise((resolveFn, rejectFn) => { xhr.open('POST', BLOCK_URI, true); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.send('uid=' + uid + '&filter_type=1&status=1&interact=1&follow=1'); xhr.onreadystatechange = function() { let defaultData = { code: -1, msg: xhr.responseText }; if (4 != xhr.readyState || 200 != xhr.status) { console.debug('xhr request failed: %d, resp: %s', xhr.status, xhr.responseText); return resolveFn(defaultData); } try { data = JSON.parse(xhr.responseText); } catch (err) { } resolveFn(data); } }); } function fetchContentText(uri) { return Promise.resolve( fetch(uri).then(data => data.text()) ); } function doBatchBlock() { fetchContentText(WEIBO_RED_GUARDS_LIST) .then(data => data.split('\n')) .map(blockUserByUid, {concurrency: MAX_CONCURRENCY}) .catch(err => { console.error(err); }) .finally(printBlockResult) ; } function printBlockResult() { let totalCount = RESULT_SET.length , failedSet = RESULT_SET.filter(isBlockFailed) , failedCount = failedSet.length ; console.log('共处理%d条拉黑请求, 失败%d条', totalCount, failedCount); if(0 === failedCount) { return; } failedSet.forEach(result => { console.log('code: %d \nmsg: %s', result.code, result.msg); }); } function isBlockFailed(resp) { return 100000 !== resp.code; } }();