贴吧签到
// ==UserScript== // @name Tieba Sign // @namespace http://gera2ld.blog.163.com/ // @author Gerald <[email protected]> // @icon http://cn.gravatar.com/avatar/a0ad718d86d21262ccd6ff271ece08a3?s=80 // @version 1.3.4.6 // @description 贴吧签到 // @homepageURL http://gerald.top/code/TiebaSign // @include http://tieba.baidu.com/* // @exclude http://tieba.baidu.com/tb/* // @require https://greasyfork.org/scripts/144/code.user.js // @grant none // ==/UserScript== /* * 0: 签到成功 * 1: 已签到 * 2: 未开通签到 * 3: 网络错误 * 4: 未知错误 */ // 模拟WAP签到 function wapSign(name, callback) { function error() { ret.err = 3; ret.msg = '网络错误'; callback(ret); } var ret = {err: 4}; $.get('/mo/?kw=' + encodeURIComponent(name) + '&ie=utf-8', function (d) { var s = d.match(/<(\w+) style="text-align:right;">(.*?)<\/\1>/); if (s) { if (s = s[2]) { var m = s.match(/<a href="(.*?)">签到<\/a>/); if (m) return $.get(m[1].replace(/&/g, '&'), function (d) { if (m = d.match(/<span class="light">(.*?)<div/)) { ret.msg = m[1].replace(/<[^>]*>/g, ''); if (/^签到成功/.test(ret.msg)) ret.err = 0; } callback(ret); }, 'html').fail(error); if (s.match(/<span >已签到<\/span>/)) { ret.err = 1; ret.msg = '已签到'; } } else ret.err = 2; } callback(ret); }, 'html').fail(error); } // 普通签到 function htmlSign(n, callback) { function error() { ret.err = 3; ret.msg = '网络错误'; callback(ret); } var ret = {err: 4}; $.get('/f?kw=' + encodeURIComponent(n) + '&ie=utf-8', function (d) { var matches = d.match(/"is_sign_in":(\d+),"user_sign_rank":(\d+),/); if (matches && matches[1] == 1) { ret.err = 0; ret.msg = '签到成功,排名' + matches[2]; } else if (matches = d.match(/PageData\.tbs = "(.*?)";/)) return $.post('/sign/add', { ie: 'utf-8', kw: n, tbs: matches[1] }, function (res) { if (!res.no) { ret.err = 0; ret.msg = '签到成功,排名' + res.data.uinfo.user_sign_rank; } else ret.msg = res.no + ': ' + res.error; callback(ret); }, 'json').fail(error); callback(ret); }, 'html').fail(error); } // 访问时自动签到 function visitSign(j) { if (j.length && $('.focus_btn.cancel_focus').length) { // “喜欢”才签到 if (utils.getObj('wap', true)) wapSign(PageData.forum.forum_name, function (d) { if (d.err) return; j.removeClass('j_cansign signstar_btn') .addClass('signstar_signed') .html(function (i, o) { return '<span class="sign_keep_span">WAP成功</span>' + o; }); $('#signstar_wrapper').addClass('signstar_wrapper_signed sign_box_bright_signed'); }); else $('.j_cansign').click(); } } // 从贴吧个人中心自动签到所有爱逛的贴吧 function hSign(ihome) { function init() { btnSign.prop('disabled', false); btnSign.html('全部签到'); } function work(){ btnSign.prop('disabled', true); btnSign.html('正在签到...'); idx = 0; sign(); } function mark(r) { var o = $('a.unsign[data-fid=' + forums[idx].forum_id + ']'); if (r.err > 1) { if (r.err == 2) { r.color = 'blue'; r.msg = '未开通签到'; } else { r.color = 'red'; r.msg = r.msg || '未知错误'; } } else { forums[idx].is_sign = 1; o.removeClass('unsign').addClass('sign'); } o.prop('title', r.msg); idx ++; setTimeout(sign, 1000); } function sign() { var o; while ((o = forums[idx]) && o.is_sign) idx++; if (!o) { btnSign.html('完成签到'); return setTimeout(init, 200); } btnSign.html('正在签到...' + o.forum_name); (utils.getObj('wap', true) ? wapSign : htmlSign)(o.forum_name, mark); } var forums = ihome.forumGroup._forumArr; var btnSign = $('<button class="btn-default btn-middle" style="margin-left:8px;margin-right:8px">').appendTo('.ihome_title').click(work); var idx; $('<button class="btn-default btn-middle">').appendTo('.ihome_title').click(showOptions).html('签到设置'); init(); } // 设置 function showOptions(e) { e.stopPropagation(); utils.popup.show({ html: '<h3>设置 - 百度贴吧签到脚本</h3>' + '<label><input type=checkbox id=gs_wap>模拟WAP签到</label><br>' + '<label><input type=checkbox id=gs_sign>访问已关注的贴吧时自动签到</label><br>', className: 'ge_opt', init: function (d) { utils.bindProp($(d).find('#gs_wap'), 'checked', 'wap', true); utils.bindProp($(d).find('#gs_sign'), 'checked', 'sign', true); }, }); } if (PageData && PageData.user && PageData.user.is_login) { if (unsafeWindow.ihome && $('.userinfo_scores').length) hSign(unsafeWindow.ihome); else if (utils.getObj('sign', true) && !PageData.user.is_black) visitSign($('#sign_mod .j_cansign')); }