tiebaAllsign

贴吧集中签到

当前为 2014-07-30 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name tiebaAllsign
  3. // @description 贴吧集中签到
  4. // @include http://www.baidu.com/
  5. // @include http://www.baidu.com/?vit=1
  6. // @include http://www.baidu.com/index.php?tn=baiduhome_pg
  7. // @include http://tieba.baidu.com/f?kw=*
  8. // @include http://tieba.baidu.com/f?ie=gbk&kw=*
  9. // @include http://tieba.baidu.com/f?ie=utf-8&kw=*
  10. // @include http://tieba.baidu.com/f?tp=0&kw=*
  11. // @icon http://tb.himg.baidu.com/sys/portraitn/item/4e2ed7f8bbb3d4f2c2d2bb21
  12. // @author congxz6688
  13. // @grant GM_getValue
  14. // @grant GM_setValue
  15. // @grant GM_deleteValue
  16. // @grant GM_xmlhttpRequest
  17. // @version 2014.7.30.0
  18. // @namespace https://greasyfork.org/scripts/152
  19. // ==/UserScript==
  20.  
  21.  
  22. //这里指明不签到的吧,吧名不要带最后的“吧”字,用小写的双引号括起来,再用小写的逗号隔开,就象下面一样
  23. var undoList = ["贴吧一", "贴吧二", "贴吧三"];
  24.  
  25. //此处可修改屏幕允许显示的最大行数;
  26. var maxLines = 20;
  27.  
  28. //这里指定最大签到数,9999为默认,即全签。
  29. var maxSign = 9999;
  30.  
  31.  
  32.  
  33. /************************以下不要随便动****************************/
  34.  
  35. //脚本应用式样
  36. function addStyle(css){
  37. document.head.appendChild(document.createElement("style")).textContent = css;
  38. }
  39. var signCSS = "";
  40. signCSS += ".s-mod-nav{margin-right:10px}";
  41. signCSS += "#headTd{border-bottom:1px solid grey; color:blue; padding:0px 0px 5px 0px !important;}";
  42. signCSS += "#footTd{border-top:1px solid grey; color:blue; padding:6px 0px 0px 0px !important;}";
  43. signCSS += ".signbaInfor{white-space:nowrap; padding:0px 6px 0px 6px;}";
  44. signCSS += "#scrollDiv *{font-size:12px !important; line-height:18px !important;} #scrollDiv{max-height:" + (maxLines * 18) + "px; max-width:1200px;}";
  45. signCSS += "#newbutn,#newbutn2,#newbutn3,#zhidaoDiv{float:right;}#useIdDiv,#thDiv{float:left;}";
  46. signCSS += "#timerDiv{z-index:997; position:fixed;left:5px;top:5px;}";
  47. signCSS += "#getDown,#allsign,#newbutn,#newbutn2,#newbutn3{background:rgba(228,228,228,0.4); cursor:pointer; margin:0px 1px 0px 0px; padding:0px 3px;color:black; border:2px ridge black;}";
  48. signCSS += "#getDown:active,#allsign:active,#newbutn:active,#newbutn3:active{border:2px groove black;}";
  49. signCSS += "#readyDiv,#messageWindow{z-index:9999; padding:6px 10px 8px 10px;background-color:lightGrey;position:fixed;right:5px;bottom:5px;border:1px solid grey}";
  50. addStyle(signCSS);
  51.  
  52. //BDUSS侦测
  53. if(document.cookie.match(/BDUSS=(.{192})/)){
  54. BDUSS = document.cookie.match(/BDUSS=(.{192})/)[1];
  55. }else{
  56. BDUSS = "";
  57. }
  58. //MD5加密函数 取自网络孤独行客的脚本
  59. var hexcase=0;var b64pad="";function hex_md5(s){return rstr2hex(rstr_md5(str2rstr_utf8(s)));}function b64_md5(s){return rstr2b64(rstr_md5(str2rstr_utf8(s)));}function any_md5(s,e){return rstr2any(rstr_md5(str2rstr_utf8(s)),e);}function hex_hmac_md5(k,d){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d)));}function b64_hmac_md5(k,d){return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d)));}function any_hmac_md5(k,d,e){return rstr2any(rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d)),e);}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72";}function rstr_md5(s){return binl2rstr(binl_md5(rstr2binl(s),s.length*8));}function rstr_hmac_md5(key,data){var bkey=rstr2binl(key);if(bkey.length>16)bkey=binl_md5(bkey,key.length*8);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}var hash=binl_md5(ipad.concat(rstr2binl(data)),512+data.length*8);return binl2rstr(binl_md5(opad.concat(hash),512+128));}function rstr2hex(input){try{hexcase}catch(e){hexcase=0;}var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var output="";var x;for(var i=0;i<input.length;i++){x=input.charCodeAt(i);output+=hex_tab.charAt((x>>>4)&0x0F)+hex_tab.charAt(x&0x0F);}return output;}function rstr2b64(input){try{b64pad}catch(e){b64pad='';}var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var output="";var len=input.length;for(var i=0;i<len;i+=3){var triplet=(input.charCodeAt(i)<<16)|(i+1<len?input.charCodeAt(i+1)<<8:0)|(i+2<len?input.charCodeAt(i+2):0);for(var j=0;j<4;j++){if(i*8+j*6>input.length*8)output+=b64pad;else output+=tab.charAt((triplet>>>6*(3-j))&0x3F);}}return output;}function rstr2any(input,encoding){var divisor=encoding.length;var i,j,q,x,quotient;var dividend=Array(Math.ceil(input.length/2));for(i=0;i<dividend.length;i++){dividend[i]=(input.charCodeAt(i*2)<<8)|input.charCodeAt(i*2+1);}var full_length=Math.ceil(input.length*8/(Math.log(encoding.length)/Math.log(2)));var remainders=Array(full_length);for(j=0;j<full_length;j++){quotient=Array();x=0;for(i=0;i<dividend.length;i++){x=(x<<16)+dividend[i];q=Math.floor(x/divisor);x-=q*divisor;if(quotient.length>0||q>0)quotient[quotient.length]=q;}remainders[j]=x;dividend=quotient;}var output="";for(i=remainders.length-1;i>=0;i--)output+=encoding.charAt(remainders[i]);return output;}function str2rstr_utf8(input){var output="";var i=-1;var x,y;while(++i<input.length){x=input.charCodeAt(i);y=i+1<input.length?input.charCodeAt(i+1):0;if(0xD800<=x&&x<=0xDBFF&&0xDC00<=y&&y<=0xDFFF){x=0x10000+((x&0x03FF)<<10)+(y&0x03FF);i++;}if(x<=0x7F)output+=String.fromCharCode(x);else if(x<=0x7FF)output+=String.fromCharCode(0xC0|((x>>>6)&0x1F),0x80|(x&0x3F));else if(x<=0xFFFF)output+=String.fromCharCode(0xE0|((x>>>12)&0x0F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F));else if(x<=0x1FFFFF)output+=String.fromCharCode(0xF0|((x>>>18)&0x07),0x80|((x>>>12)&0x3F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F));}return output;}function str2rstr_utf16le(input){var output="";for(var i=0;i<input.length;i++)output+=String.fromCharCode(input.charCodeAt(i)&0xFF,(input.charCodeAt(i)>>>8)&0xFF);return output;}function str2rstr_utf16be(input){var output="";for(var i=0;i<input.length;i++)output+=String.fromCharCode((input.charCodeAt(i)>>>8)&0xFF,input.charCodeAt(i)&0xFF);return output;}function rstr2binl(input){var output=Array(input.length>>2);for(var i=0;i<output.length;i++)output[i]=0;for(var i=0;i<input.length*8;i+=8)output[i>>5]|=(input.charCodeAt(i/8)&0xFF)<<(i%32);return output;}function binl2rstr(input){var output="";for(var i=0;i<input.length*32;i+=8)output+=String.fromCharCode((input[i>>5]>>>(i%32))&0xFF);return output;}function binl_md5(x,len){x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i<x.length;i+=16){var olda=a;var oldb=b;var oldc=c;var oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);}return Array(a,b,c,d);}function md5_cmn(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);}function md5_ff(a,b,c,d,x,s,t){return md5_cmn((b&c)|((~b)&d),a,b,x,s,t);}function md5_gg(a,b,c,d,x,s,t){return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);}function md5_hh(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t);}function md5_ii(a,b,c,d,x,s,t){return md5_cmn(c^(b|(~d)),a,b,x,s,t);}function safe_add(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);}function bit_rol(num,cnt){return(num<<cnt)|(num>>>(32-cnt));}
  60.  
  61. //POST数据加密处理函数 取自网络孤独行客的脚本
  62. function decodeURI_post(postData) {
  63. var SIGN_KEY = "tiebaclient!!!";
  64. var s = "";
  65. for (var i in postData) {
  66. s += i + "=" + postData[i];
  67. }
  68. var sign = hex_md5(decodeURIComponent(s) + SIGN_KEY);
  69. var data = "";
  70. for (var i in postData) {
  71. data += "&" + i + "=" + postData[i];
  72. }
  73. data += "&sign=" + sign;
  74. return data.replace("&", "");
  75. }
  76.  
  77. //北京时间
  78. var yuy = new Date();
  79. re = yuy.getTime() + 28800000;
  80. yuy.setTime(re);
  81. var fulltime = yuy.getUTCFullYear() + "/" + (yuy.getUTCMonth() + 1) + "/" + yuy.getUTCDate();
  82.  
  83. //添加按钮
  84. var newEm = document.createElement("span");
  85. newEm.innerHTML = "全签到";
  86. newEm.id = "allsign";
  87. newEm.addEventListener('click', jjuds, true);
  88. var autoSignbox = document.createElement("input");
  89. autoSignbox.type = "checkbox";
  90. autoSignbox.id = "autoSign";
  91. autoSignbox.title = "选中此项,启动自动签到,否则,关闭自动签到";
  92. autoSignbox.checked = GM_getValue('autoSignbox', true);
  93. autoSignbox.addEventListener('click', function () {
  94. GM_setValue('autoSignbox', document.getElementById("autoSign").checked)
  95. }, true);
  96. if (window.location.href.indexOf("http://www.baidu.com/") != -1) {
  97. //百度首页添加按钮
  98. if (document.getElementById("u_sp") && document.getElementById("s_username_top")) {
  99. document.getElementById("u_sp").insertBefore(autoSignbox,document.getElementById("u_sp").firstChild);
  100. document.getElementById("u_sp").insertBefore(newEm,document.getElementById("u_sp").firstChild);
  101. addStyle("#autoSign{margin:3px 10px 0 0;} #allsign{margin-top:3px}");
  102. }
  103. var userSignName = unsafeWindow.bds.comm.user;
  104. } else { //各贴吧添加按钮
  105. var userSignName = unsafeWindow.PageData.user.user_name;
  106. if (userSignName) {
  107. if (document.getElementsByClassName("nav_center").length != 0) {//旧版
  108. var hhio = document.getElementsByClassName("nav_center")[0];
  109. } else {
  110. var hhio = document.getElementsByClassName("j_nav_list")[0] || document.getElementById("star_class_nav");
  111. }
  112. var signLi = document.createElement("li");
  113. signLi.className = "j_tbnav_tab";
  114. hhio.appendChild(signLi);
  115. var getDown = document.createElement("span");
  116. getDown.id = "getDown";
  117. getDown.innerHTML = "↓";
  118. getDown.addEventListener('click', function () {
  119. if (document.getElementById("btUnminify")) {
  120. unsafeWindow.unminifyShare();
  121. }else{
  122. window.scrollTo(0, 10000000);
  123. }
  124. unsafeWindow.test_editor.execCommand("inserthtml", "");
  125. }, true);
  126. signLi.appendChild(getDown);
  127. signLi.appendChild(newEm);
  128. signLi.appendChild(autoSignbox);
  129. }
  130. }
  131.  
  132. //自动签到
  133. var todaySign = JSON.parse(GM_getValue('todaySigned', "{}"));
  134. if (userSignName) {
  135. if (yuy.getUTCHours() > 0 && document.getElementById("autoSign").checked && (!todaySign.date || todaySign.date != fulltime || todaySign[userSignName] == undefined)) {
  136. jjuds();
  137. }
  138. }
  139.  
  140. //获取签到贴吧名单
  141. function jjuds() {
  142. if (BDUSS == "") {
  143. var noBDUSS = confirm("tiebaAllsign无法获取BDUSS!请按以下方法操作:\r\n\r\n一、安装UA转换扩展:https://addons.mozilla.org/zh-CN/firefox/addon/user-agent-overrider/\r\n二、在工具栏中找到UA转换器图标,点其右侧下拉菜单,选用其中的“Android/firefox26”\r\n三、打开http://tieba.baidu.com/mo,找到注销按钮,注销,重登录。\r\n四、把UA转换器的图标点成灰色;\r\n五、关闭登录页\r\n六、重新回到签到页面,刷新\r\n\r\n\r\n按确定键关闭此窗口,按取消键取消自动签到");
  144. if (!noBDUSS){
  145. if (!todaySign.date || todaySign.date != fulltime) { //日期不对,记录全清零
  146. todaySign = {};
  147. todaySign.date = fulltime;
  148. todaySign[userSignName] = "user_pause";
  149. } else if (!todaySign[userSignName]){
  150. todaySign[userSignName] = "user_pause";
  151. }
  152. GM_setValue('todaySigned', JSON.stringify(todaySign)); //此处用于破坏自动签到的条件,既点“取消”,那就不能再打扰
  153. }
  154. } else {
  155. var newsignCss = document.createElement("style");
  156. newsignCss.id = "newsignCss";
  157. newsignCss.type = "text/css";
  158. newsignCss.innerHTML = "#allsign{display:none}";
  159. document.head.appendChild(newsignCss); //签到过程中,隐藏签到按钮
  160.  
  161. var readyDiv = document.createElement("div");
  162. readyDiv.id = "readyDiv";
  163. readyDiv.innerHTML = "开始签到准备,正在获取贴吧列表第1页";
  164. document.body.appendChild(readyDiv);
  165. var allAncs = []; //地址收集数组
  166. var baNameF = []; //吧名收集数组
  167. var heer = new Date();
  168. sed = heer.getTime() - 600000;
  169.  
  170. function getTieba(nn, lp) { //获取第2-第n页的贴吧列表
  171. var addTail = "&pn=" + nn;
  172. var urll = "http://tieba.baidu.com/f/like/mylike?v=" + sed + addTail;
  173. setTimeout(function () { //延时操作以免度娘误会
  174. readyDiv.innerHTML = "开始签到准备,正在获取贴吧列表第" + nn + "页";
  175. GM_xmlhttpRequest({
  176. method : 'GET',
  177. synchronous : false,
  178. headers : { //添加http头信息,希望有用
  179. "cookie" : document.cookie
  180. },
  181. url : urll,
  182. onload : function (reText) {
  183. var reTextTxt = reText.responseText.replace(/[ ]/g, "").replace(/<td>\r\n/g, "<td>").replace(/\r\n<\/td>/g, "</td>").replace(/<span.*?span>\r\n/g, "");
  184. var ww = reTextTxt.match(/<a[ ]href=".*?(?=<\/a><\/td>)/g);
  185. for (s = 0; s < ww.length; s++) {
  186. if (allAncs.length < maxSign) {
  187. qq = allAncs.push("http://tieba.baidu.com/mo/m?kw=" + ww[s].replace('<a href="/f?kw=', '').replace(/"[ ]title.*/, ""));
  188. dd = baNameF.push(ww[s].replace(/<a[ ]href=".*?">/, ""));
  189. } else {
  190. break;
  191. }
  192. }
  193. if (nn == lp) { //最后一页取完,开始执行签到
  194. gowork(allAncs, baNameF);
  195. } else {
  196. ns = nn + 1;
  197. getTieba(ns, lp); //自调用,顺序循环
  198. }
  199. }
  200. })
  201. }, 1000);
  202. }
  203.  
  204. GM_xmlhttpRequest({ //从“我的贴吧”第1页获取列表
  205. method : 'GET',
  206. synchronous : false,
  207. url : "http://tieba.baidu.com/f/like/mylike?v=" + sed,
  208. headers : { //添加http头信息,希望有用
  209. "cookie" : document.cookie
  210. },
  211. onload : function (reDetails) {
  212. var simTxt = reDetails.responseText.replace(/[ ]/g, "").replace(/<td>\r\n/g, "<td>").replace(/\r\n<\/td>/g, "</td>").replace(/<span.*?span>\r\n/g, "");
  213. var ww = simTxt.match(/<a[ ]href=".*?(?=<\/a><\/td>)/g);
  214. for (s = 0; s < ww.length; s++) {
  215. if (allAncs.length < maxSign) {
  216. qq = allAncs.push("http://tieba.baidu.com/mo/m?kw=" + ww[s].replace('<a href="/f?kw=', '').replace(/"[ ]title.*/, ""));
  217. dd = baNameF.push(ww[s].replace(/<a[ ]href=".*?">/, ""));
  218. } else {
  219. break;
  220. }
  221. }
  222. var qqee = simTxt.match(/<a[ ]href=.*pn=(\d+)">尾页<\/a>/);
  223. if (qqee) { //检查是否分页,分页则继续获取贴吧名单
  224. var deho = Number(qqee[1]);
  225. //deho = (deho < 10) ? deho : 10; //因为度娘限签200,所以,此处只取前10页 //2013.6.25听说度娘取消了签到数量限制,所以暂时屏蔽这一句
  226. if (Math.ceil(maxSign / 20) < deho) {
  227. deho = Math.ceil(maxSign / 20);
  228. }
  229. if (deho == 1) {
  230. gowork(allAncs, baNameF);
  231. } else {
  232. getTieba(2, deho);
  233. }
  234. } else { //不分页则直接开始签到
  235. gowork(allAncs, baNameF);
  236. }
  237. }
  238. })
  239. }
  240. }
  241.  
  242. //功能函数
  243. function gowork(allAncs, baNameF) { //以获取的地址数组和吧名数组为参数
  244. document.body.removeChild(document.getElementById("readyDiv"));
  245.  
  246. var yuye = new Date();
  247. ree = yuye.getTime() + 28800000;
  248. yuye.setTime(ree);
  249. var anotherTime = yuye.getUTCFullYear() + "/" + (yuye.getUTCMonth() + 1) + "/" + yuye.getUTCDate(); //当前时间
  250.  
  251. //创建窗口
  252. if (document.getElementById("messageWindow")) {
  253. document.body.removeChild(document.getElementById("messageWindow"));
  254. }
  255. var newDiv = document.createElement("div");
  256. newDiv.id = "messageWindow";
  257. newDiv.align = "left";
  258. document.body.appendChild(newDiv);
  259.  
  260. var tablee = document.createElement("table");
  261. newDiv.appendChild(tablee);
  262.  
  263. var thh = document.createElement("th");
  264. thh.id = "headTd";
  265. var thDiv = document.createElement("span");
  266. thDiv.id = "thDiv";
  267. thh.appendChild(thDiv);
  268. tablee.appendChild(thh);
  269.  
  270. var tr1 = document.createElement("tr");
  271. var tr2 = document.createElement("tr");
  272.  
  273. tablee.appendChild(tr1);
  274. tablee.appendChild(tr2);
  275.  
  276. var td1 = document.createElement("td");
  277. var td2 = document.createElement("td");
  278. td2.id = "footTd";
  279.  
  280. tr1.appendChild(td1);
  281. tr2.appendChild(td2);
  282.  
  283. var tibeNums = allAncs.length; //贴吧总数量
  284. var Tds = []; //各吧签到信息栏的空白数组
  285.  
  286. var scrollDiv = document.createElement("div");
  287. scrollDiv.id = "scrollDiv";
  288. newTable = creaseTable(tibeNums); //根据贴吧数量创建列表
  289. scrollDiv.appendChild(newTable);
  290. td1.appendChild(scrollDiv);
  291. td2.innerHTML += anotherTime + " 共" + tibeNums + "个贴吧需要签到&nbsp;&nbsp;";
  292.  
  293. zhidao(); //知道签到
  294. onebyone(0, "conti"); //这里开始启动逐一签到动作
  295.  
  296.  
  297. var newbutn = document.createElement("span"); //创建关窗按钮
  298. newbutn.id = "newbutn";
  299. newbutn.innerHTML = "关闭窗口";
  300. newbutn.addEventListener("click", function () {
  301. document.head.removeChild(document.getElementById("newsignCss"));
  302. document.body.removeChild(document.getElementById("messageWindow"));
  303. }, false);
  304. td2.appendChild(newbutn);
  305.  
  306. var useIdDiv = document.createElement("span");
  307. useIdDiv.id = "useIdDiv";
  308. useIdDiv.innerHTML = "用户ID&nbsp;:&nbsp;" + userSignName;
  309. thDiv.appendChild(useIdDiv);
  310.  
  311. //知道签到函数
  312. function zhidao() {
  313. var zhidaoDiv = document.createElement("span");
  314. zhidaoDiv.id = "zhidaoDiv";
  315. thh.appendChild(zhidaoDiv);
  316. var gtt = new Date();
  317. dataa = "cm=100509&t=" + gtt.getTime();
  318. GM_xmlhttpRequest({
  319. method : 'POST',
  320. synchronous : false,
  321. url : "http://zhidao.baidu.com/submit/user",
  322. headers : {
  323. "Content-Type" : "application/x-www-form-urlencoded"
  324. },
  325. data : encodeURI(dataa),
  326. onload : function (response) {
  327. if (JSON.parse(response.responseText).status == 0) {
  328. var todayEx = JSON.parse(response.responseText).data.expToday;
  329. zhidaoDiv.innerHTML = "百度知道签到成功&nbsp;经验+" + todayEx.toString();
  330. } else if (JSON.parse(response.responseText).status == 2) {
  331. zhidaoDiv.innerHTML = "百度知道已签到";
  332. }
  333. }
  334. })
  335. }
  336.  
  337. //列表创建函数
  338. function creaseTable(UrlLength) {
  339. var cons = (UrlLength <= maxLines * 2) ? 2 : 3;
  340. if (tibeNums > maxLines * cons) {
  341. addStyle("#scrollDiv{overflow-x:auto; overflow-y:scroll; padding-right:15px}");
  342. }
  343. var tablepp = document.createElement("table");
  344. var trs = [];
  345. for (ly = 0; ly < Math.ceil(UrlLength / cons); ly++) {
  346. var tr = document.createElement("tr");
  347. mmd = trs.push(tr);
  348. tablepp.appendChild(tr);
  349. }
  350. for (ls = 0; ls < UrlLength; ls++) {
  351. var td = document.createElement("td")
  352. td.setAttribute("class", "signbaInfor");
  353. wq = Tds.push(td);
  354. trs[Math.floor(ls / cons)].appendChild(td);
  355. }
  356. return tablepp
  357. }
  358.  
  359. //显示信息序号的函数
  360. function consNum(n) {
  361. if (tibeNums < 10) {
  362. var indexN = (n + 1).toString();
  363. } else if (tibeNums > 9 && tibeNums < 100) {
  364. if (n < 9) {
  365. var indexN = "0" + (n + 1);
  366. } else {
  367. var indexN = (n + 1).toString();
  368. }
  369. } else if (tibeNums > 99 && tibeNums < 1000) {
  370. if (n < 9) {
  371. var indexN = "00" + (n + 1);
  372. } else if (n >= 9 && n < 99) {
  373. var indexN = "0" + (n + 1);
  374. } else {
  375. var indexN = (n + 1).toString();
  376. }
  377. } else {
  378. if (n < 9) {
  379. var indexN = "000" + (n + 1);
  380. } else if (n >= 9 && n < 99) {
  381. var indexN = "00" + (n + 1);
  382. } else if (n >= 99 && n < 999) {
  383. var indexN = "0" + (n + 1);
  384. } else {
  385. var indexN = (n + 1).toString();
  386. }
  387. }
  388. return indexN;
  389. }
  390.  
  391. function onebyone(gg, goorstop) { //这里的gg是从0开始的贴吧序号,goorstop用于判别是否递进执行。
  392. //吧名缩略显示
  393. String.prototype.reComLength = function () {
  394. var yn = 0;
  395. var kuu = "";
  396. for (w in this) {
  397. if (w < this.length) {
  398. if (/[a-zA-Z0-9]/.exec(this[w])) {
  399. yn += 1;
  400. } else {
  401. yn += 2;
  402. }
  403. if (yn < 11) {
  404. kuu += this[w];
  405. }
  406. }
  407. }
  408. var uui = yn > 13 ? kuu + "..." : this;
  409. return uui;
  410. }
  411.  
  412. gg = Number(gg);
  413. var timeout = 500; //默认延时
  414. var tiebaname = "<a href='http://tieba.baidu.com/mo/m?kw=" + baNameF[gg] + "' title='" + baNameF[gg] + "吧' target='_blank'><font color='blue'>" + baNameF[gg].reComLength() + "吧</font></a>";
  415. if(!todaySign[userSignName]) todaySign[userSignName] = [];
  416. if (undoList.indexOf(baNameF[gg]) != -1) {
  417. Tds[gg].innerHTML = consNum(gg) + ".&nbsp;" + tiebaname + " 用户指定不签到";
  418. if (gg + 1 < tibeNums && !Tds[gg + 1].innerHTML) {
  419. onebyone(gg + 1, "conti");
  420. }
  421. } else if (todaySign.date == fulltime && todaySign[userSignName].indexOf(baNameF[gg]) != -1) {
  422. Tds[gg].innerHTML = consNum(gg) + ".&nbsp;" + tiebaname + " 已有签到记录";
  423. if (gg + 1 < tibeNums && !Tds[gg + 1].innerHTML) {
  424. onebyone(gg + 1, "conti");
  425. }
  426. } else {
  427. Tds[gg].innerHTML = consNum(gg) + ".&nbsp;" + tiebaname + " 访问中......".blink();
  428. if (goorstop == "conti") {
  429. document.getElementById("scrollDiv").scrollTop = document.getElementById("scrollDiv").scrollHeight; //滚动时总显示最下一行
  430. }
  431. var ttss;
  432. var myRequest = GM_xmlhttpRequest({
  433. method : 'GET',
  434. synchronous : false,
  435. headers : {
  436. "cookie" : document.cookie,
  437. "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  438. "User-Agent" : "Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaE72-1/021.021; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.1.16352"
  439. },
  440. url : allAncs[gg],
  441. overrideMimeType : "text/html",
  442. onload : function (responseDetails) {
  443. var wwdata = responseDetails.responseText;
  444. var rightPart = wwdata.match(/<td[ ]style="text-align:right;".*?<\/td>/);
  445. if (!rightPart || rightPart[0] == '<td style="text-align:right;"></td>') {
  446. Tds[gg].innerHTML = consNum(gg) + ".&nbsp;" + tiebaname + " 未开启签到功能".fontcolor("grey");
  447. } else {
  448. if (rightPart[0].indexOf("已签到") != -1) {
  449. if (!todaySign.date || todaySign.date != fulltime) { //日期不对,记录全清零
  450. todaySign = {};
  451. todaySign.date = fulltime;
  452. todaySign[userSignName] = [];
  453. rqq = todaySign[userSignName].push(baNameF[gg]);
  454. } else {
  455. if(Object.prototype.toString.call(todaySign[userSignName])=="[object String]") {//清除旧版的不同格式记录
  456. todaySign[userSignName] = [];
  457. }
  458. rqq = todaySign[userSignName].push(baNameF[gg]);
  459. }
  460. GM_setValue('todaySigned', JSON.stringify(todaySign));
  461. Tds[gg].innerHTML = consNum(gg) + ".&nbsp;" + tiebaname + " 此前已签过到";
  462. } else {
  463. timeout = 638;
  464. var km = gg; //把gg此时的值记录下来是必须的,因为gg值将发生变化,后面不便调用
  465. //Post对象
  466. var PostObData = {
  467. "BDUSS" : BDUSS,
  468. "_client_id" : "03-00-DA-59-05-00-72-96-06-00-01-00-04-00-4C-43-01-00-34-F4-02-00-BC-25-09-00-4E-36",
  469. "_client_type" : "4",
  470. "_client_version" : "1.2.1.17",
  471. "_phone_imei" : "540b43b59d21b7a4824e1fd31b08e9a6",
  472. "fid" : rightPart[0].match(/fid=(\d+)/)[1],
  473. "kw" : baNameF[km],
  474. "net_type" : "3",
  475. "tbs" : rightPart[0].match(/tbs=([0-9a-f]{26})/)[1]
  476. };
  477. GM_xmlhttpRequest({
  478. method : "POST",
  479. url : "http://c.tieba.baidu.com/c/c/forum/sign",
  480. data : decodeURI(decodeURI_post(PostObData)),
  481. headers : {
  482. "Content-Type" : "application/x-www-form-urlencoded"
  483. },
  484. onload : function (responsesss) {
  485. var msg = JSON.parse(responsesss.responseText);
  486. if (msg.error_code == 0) {
  487. if (!todaySign.date || todaySign.date != fulltime) { //日期不对,记录全清零
  488. todaySign = {};
  489. todaySign.date = fulltime;
  490. todaySign[userSignName] = [];
  491. rqq = todaySign[userSignName].push(baNameF[gg]);
  492. } else {
  493. if(Object.prototype.toString.call(todaySign[userSignName])=="[object String]") {//清除旧版的不同格式记录
  494. todaySign[userSignName] = [];
  495. }
  496. rqq = todaySign[userSignName].push(baNameF[gg]);
  497. }
  498. GM_setValue('todaySigned', JSON.stringify(todaySign)); //成功一个保存一个,以防签到意外中断
  499. Tds[km].innerHTML = consNum(km) + ".&nbsp;" + tiebaname + "&nbsp;模拟客户端成功,经验+" + msg.user_info.sign_bonus_point.toString().fontcolor("blue");
  500. } else {
  501. var reSignAn = document.createElement("a");
  502. reSignAn.href = 'javascript:void(0);';
  503. reSignAn.innerHTML = "重签";
  504. reSignAn.setAttribute("sentValue", km);
  505. reSignAn.addEventListener('click', function (ee) {
  506. k = ee.target.getAttribute("sentValue");
  507. onebyone(k, "stop"); //带"stop"参数,避免递进执行。
  508. }, true);
  509. Tds[km].innerHTML = consNum(km) + ".&nbsp;" + tiebaname + "&nbsp;" + msg.error_msg + "&nbsp;";
  510. Tds[km].appendChild(reSignAn);
  511. }
  512. }
  513. });
  514. }
  515. }
  516. if (goorstop == "conti" && Tds[gg + 1] && !Tds[gg + 1].innerHTML) { //只有当参数为"conti"、下一表格存在且内容为空时,才继续下一个签到动作
  517. setTimeout(function () {
  518. onebyone(gg + 1, "conti"); //函数自调用,其实是另一种循环
  519. }, timeout);
  520. }
  521. },
  522. onreadystatechange : function (responseDe) { //访问超时应对
  523. if (responseDe.readyState == 1 && typeof ttss == 'undefined') {
  524. ttss = setTimeout(function () { //添加延时
  525. myRequest.abort(); //中止请求
  526. var oldStr = ["mo/m?kw=", "f?kw=", "m?kw=", "f?tp=0&kw=", "m?tp=0&kw="];
  527. var newStr = ["f?kw=", "m?kw=", "f?tp=0&kw=", "m?tp=0&kw=", "mo/m?kw="];
  528. var delayRetry = GM_getValue("delayRetry", 0);
  529. if (delayRetry < 5) {
  530. console.log(baNameF[gg] + "吧 访问超时!微调访问地址,第" + (delayRetry + 1) + "次重试中...");
  531. console.log("原地址:" + allAncs[gg]);
  532. GM_setValue("delayRetry", delayRetry + 1);
  533. allAncs[gg] = allAncs[gg].replace(oldStr[delayRetry], newStr[delayRetry]); //更改访问地址
  534. console.log("新地址:" + allAncs[gg]);
  535. onebyone(gg, "conti"); //再请求
  536. } else {
  537. Tds[gg].innerHTML = consNum(gg) + ".&nbsp;" + tiebaname + " 暂时无法访问 ";
  538. Tds[gg].appendChild(pauseAc);
  539. GM_deleteValue("delayRetry");
  540. }
  541. }, 5000);
  542. } else if (responseDe.readyState == 2) { //如顺利,消除延时
  543. clearTimeout(ttss);
  544. GM_deleteValue("delayRetry");
  545. }
  546. }
  547. });
  548. //跳过功能
  549. var hii = gg;
  550. var pauseAc = document.createElement("a");
  551. pauseAc.href = 'javascript:void(0);';
  552. pauseAc.innerHTML = " 跳过";
  553. pauseAc.addEventListener('click', function () {
  554. myRequest.abort(); //中止请求
  555. clearTimeout(ttss); //取消延时块
  556. GM_deleteValue("delayRetry");
  557. var dnn = hii + 1;
  558. if (dnn < tibeNums && !Tds[dnn].innerHTML) {
  559. onebyone(dnn, "conti"); //进行下一个吧的签到
  560. }
  561. Tds[hii].innerHTML = consNum(hii) + ".&nbsp;" + tiebaname + " 已跳过 ";
  562. var reSignAn = document.createElement("a"); //添加重试按钮
  563. reSignAn.href = 'javascript:void(0);';
  564. reSignAn.innerHTML = "重试";
  565. reSignAn.addEventListener('click', function () {
  566. onebyone(hii, "stop"); //带"stop"参数,避免递进执行。
  567. }, true);
  568. Tds[hii].appendChild(reSignAn);
  569. }, true);
  570. Tds[gg].appendChild(pauseAc);
  571. }
  572. }
  573. }