Tieba Sign

贴吧签到

当前为 2015-02-02 提交的版本,查看 最新版本

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