Tieba Sign

贴吧签到

当前为 2014-05-26 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Tieba Sign
  3. // @namespace http://gera2ld.blog.163.com/
  4. // @author Gerald <gera2ld@163.com>
  5. // @icon http://s.gravatar.com/avatar/a0ad718d86d21262ccd6ff271ece08a3?s=80
  6. // @version 1.3.4
  7. // @description 贴吧签到
  8. // @homepage http://geraldl.ml/userjs/TiebaSign
  9. // @include http://tieba.baidu.com/*
  10. // @exclude http://tieba.baidu.com/tb/*
  11. // @require https://greasyfork.org/scripts/144/code.user.js
  12. // ==/UserScript==
  13.  
  14. // 模拟WAP签到
  15. function wapSign(n,callback){
  16. /*
  17. * -1: 未知错误
  18. * 0: 签到成功
  19. * 1: 未开通签到
  20. * 2: 网络错误
  21. */
  22. var R={err:-1};
  23. function error(){R.err=2;R.msg='网络错误';callback(R);}
  24. $.get('/mo/?kw='+encodeURIComponent(n)+'&ie=utf-8',function(d){
  25. var m,s;
  26. if(s=d.match(/<(\w+) style="text-align:right;">(.*?)<\/\1>/)) {
  27. if(s=s[2]) {
  28. if(m=s.match(/<a href="(.*?)">签到<\/a>/))
  29. return $.get(m[1].replace(/&amp;/g,'&'),function(d){
  30. if(m=d.match(/<span class="light">(.*?)<div/)) {
  31. R.msg=m[1].replace(/<[^>]*>/g,'');
  32. if(/^签到成功/.test(R.msg)) R.err=0;
  33. }
  34. callback(R);
  35. },'html').fail(error);
  36. if(s.match(/<span >已签到<\/span>/)) {R.err=0;R.msg='已签到';}
  37. } else R.err=1;
  38. }
  39. callback(R);
  40. },'html').fail(error);
  41. }
  42. // 普通签到
  43. function htmlSign(n,callback){
  44. var R={err:-1};
  45. function error(){R.err=2;R.msg='网络错误';callback(R);}
  46. $.get('/f?kw='+encodeURIComponent(n)+'&ie=utf-8',function(d){
  47. var r=d.match(/"is_sign_in":(\d+),"user_sign_rank":(\d+),/);
  48. if(r&&r[1]=='1') {
  49. R.err=0;R.msg='签到成功,排名'+r[2];
  50. } else if(r=d.match(/PageData\.tbs = "(.*?)";/))
  51. return $.post('/sign/add',{ie:'utf-8',kw:n,tbs:r[1]},function(r) {
  52. if(!r.no) {
  53. R.err=0;R.msg='签到成功,排名'+r.data.uinfo.user_sign_rank;
  54. } else R.msg=r.no+': '+r.error;
  55. callback(R);
  56. },'json').fail(error);
  57. callback(R);
  58. },'html').fail(error);
  59. }
  60. // 访问时自动签到
  61. function visitSign(j){
  62. if(j.length&&!$('#balv_dolike').length) { // “喜欢”才签到
  63. if(utils.getObj('wap',true))
  64. wapSign(PageData.forum.name,function(d){
  65. if(d.err) return;
  66. j.removeClass('j_cansign signstar_btn').addClass('signstar_signed').html('<span class="sign_keep_span">WAP成功</span>');
  67. $('#signstar_wrapper').addClass('signstar_wrapper_signed sign_box_bright_signed');
  68. });
  69. else $('.j_cansign').click();
  70. }
  71. }
  72. // 从贴吧个人中心自动签到所有爱逛的贴吧
  73. function hSign(){
  74. function init(){
  75. b.prop('disabled',false);
  76. b.html('全部签到');
  77. }
  78. function work(){
  79. b.prop('disabled',true);
  80. b.html('正在签到...');
  81. i=0;sign();
  82. }
  83. function mark(r){
  84. var o=$('a.unsign[data-fid='+a[i].forum_id+']');
  85. if(r.err) {
  86. if(r.err==1) {r.color='blue';r.msg='未开通签到';}
  87. else {r.color='red';r.msg=r.msg||'未知错误';}
  88. } else {
  89. a[i].is_sign=1;o.removeClass('unsign').addClass('sign');
  90. }
  91. o.prop('title',r.msg);i++;setTimeout(sign,1000);
  92. }
  93. function sign(){
  94. var o;
  95. while((o=a[i])&&o.is_sign) i++;
  96. if(!o) return init();
  97. b.html('正在签到...'+o.forum_name);
  98. (utils.getObj('wap',true)?wapSign:htmlSign)(o.forum_name,mark);
  99. }
  100. var b=$('<button>').appendTo('.ihome_title').click(work),
  101. a=unsafeWindow.ihome.forumGroup._forumArr,i;
  102. init();
  103. }
  104. // 设置
  105. function showOptions(){
  106. utils.popup.show({
  107. html:'\
  108. <h3>设置 - 百度贴吧签到脚本</h3>\
  109. <label><input type=checkbox id=gs_wap>模拟WAP签到</label><br>\
  110. <label><input type=checkbox id=gs_sign>访问已关注的贴吧时自动签到</label><br>\
  111. ',
  112. className:'ge_opt',
  113. init:function(d){
  114. utils.bindProp($(d).find('#gs_wap'),'checked','wap',true);
  115. utils.bindProp($(d).find('#gs_sign'),'checked','sign',true);
  116. },
  117. });
  118. }
  119.  
  120. if(PageData&&PageData.user&&PageData.user.is_login) {
  121. GM_registerMenuCommand('签到脚本设置',showOptions);
  122. if(unsafeWindow.ihome&&$('.userinfo_scores').length) hSign();
  123. else if(utils.getObj('sign',true)&&!PageData.user.is_black) visitSign($('#sign_mod .j_cansign'));
  124. }