检查互动抽奖情况的
// ==UserScript== // @name 互动抽奖检测 // @namespace mscststs // @version 0.6 // @description 检查互动抽奖情况的 // @author mscststs // @match *://h.bilibili.com/* // @match *://space.bilibili.com/* // @require https://cdn.bootcss.com/axios/0.17.1/axios.js // @require https://cdn.bootcss.com/jquery/3.3.1/jquery.slim.js // @require https://greasyfork.org/scripts/38220-mscststs-tools/code/MSCSTSTS-TOOLS.js?version=618337 // @grant none // ==/UserScript== (function() { 'use strict'; var $jquery = jQuery.noConflict(); class Api{ /* api部分 */ constructor(){ this.notice = "/lottery_svr/v1/lottery_svr/lottery_notice"; this.titleInfo = "i/api/ajaxTitleInfo"; this.titleWear = "i/ajaxWearTitle"; this.GetDailyBucket = "activity/v1/Common/getReceiveGift"; } async _api(url,data,method="post") { return axios({ url, baseURL: 'https://api.vc.bilibili.com/', method, data: data, transformRequest: [function (data) { // Do whatever you want to transform the data let ret = ''; for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'; } return ret; }], withCredentials: true, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (res) { return res.data; }); } async getNotice(doc_id,type=2){ return await this._api(`${this.notice}?business_type=${type}&business_id=${doc_id}`); } } let api = new Api(); function formatTime(date = new Date(), fmt = "YYYY-MM-DD HH:mm:ss") { date = typeof date === "number" ? new Date(date) : date; var o = { "M+": date.getMonth() + 1, "D+": date.getDate(), "h+": date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, "H+": date.getHours(), "m+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor((date.getMonth() + 3) / 3), S: date.getMilliseconds() }; var week = { "0": "\u65e5", "1": "\u4e00", "2": "\u4e8c", "3": "\u4e09", "4": "\u56db", "5": "\u4e94", "6": "\u516d" }; if (/(Y+)/.test(fmt)) { fmt = fmt.replace( RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length) ); } if (/(E+)/.test(fmt)) { fmt = fmt.replace( RegExp.$1, (RegExp.$1.length > 1 ? RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468" : "") + week[date.getDay() + ""] ); } for (var k in o) { if (new RegExp("(" + k + ")").test(fmt)) { fmt = fmt.replace( RegExp.$1, RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length) ); } } return fmt; } const Default_Pic = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAABGdBTUEAALGPC/xhBQAAAvZJREFUeAHswTEBAAAIwCBfyy+zDUwADD8AAACg2lNlZaUaCIPYhNSXl5fzA9Vq1dTUKM6cOZN12AYM0JMaZWVlWwDsmgPM3TEUxWfGsx1j3sIxnKOFs23bthHMjmYEs23btv87NzlNmk59b2j/L01ynnpfe+7v3erLB33o2bNnJJLX8pm0mfF9+vSpibZ9iPvKeNELAFs4ZMiQnCkFB4l2h96pRE1Jm8SoCsNnswwwph4AVL1UgdNcS+wZEhsO1aGGy2eqnbGztPjLiOkl1YTXDdE+E/rE2E9Q+VjDQXKFZVowoUNQfjOmf//+BaSNMa+lcvh6xfjx47P/YOqVQdt9Ajwzbdq0zLEFhARmMNk3eC71i7hSEqNXjgnHqMq6WtU1jfP0usgkVlrAXKeSlmllEX+ZfS+PM6B3TKK3RexErSpqWMSvZvzuOE+xJ0x4nEXCIxSgPn36lLPoewf73hrnCtrFpPf/TUA4B2VD/HNOxylxBtROmzaN/xYgxE7X+q0cW0CrVq1Kz9NwBL3F6y5RFKVNFhArZ7p2FJjtPQQkUxVGB0Nzf6IV6npBvcH769BZQ8+0mNtmOz/7YBw6F/5i3MHizRkY/JrpYHIxFHmuxeLVxSm5m343wi922EKXEPsIegm9NqTf1d7+oP0FT9DnbMYST6o/8epiCz+htln8Qpn+wlQtZ7/NW1V4JvHGPk+42KHUpbEdP/IKkL6LilcXFaS22VYeA2ql+nQB6C0H7+wrIPHGPt+6mGL7WEGnkVBx3wCJJ/HGPve6OP804ODeS7y6ukp0UTd2HyXeoC6u/xifC2Zqa8b2QYsTFRLZoPrg68VJaJ/mo7Z4c4TFYldzsAY53bUCoAAoAAqAAqAAKAAKgAKgACgACoACoAAoAAqAAqAAyDB3l4DGOAQ0hh7u+ghoGRN8L0ahVglqhFaFIxL9PuG85/eX+QiooPqPMsd6Il5oyz9I0DI13f6nZEyOXfBbe3AgAAAAwDDo/tQHWTUAAAAg7IMRaQWtWFjpAAAAAElFTkSuQmCC"; function getPic(pic){ if(pic.length==0|| pic=="loading"){ return Default_Pic; }else { return pic } } $jquery().ready(function(){ function prepare_html_node(data,id=1){ let n_time = Math.round(new Date().valueOf()/1000); let str = ""; if(data.first_prize > 0 ){ str+=`<div class="detail"><img src="${getPic(data.first_prize_pic)}"/><span>一等奖: ${data.first_prize_cmt} * ${data.first_prize}</span>`; let res = `<div class="r###lt">`; if(data.lottery_r###lt&&data.lottery_r###lt.first_prize_r###lt){ for(let person of data.lottery_r###lt.first_prize_r###lt){ res+=`<div class="fav"><img src="${person.face}"/><a target="_blank" href="https://space.bilibili.com/${person.uid}/#/">${person.name}</a></div>`; } } str+=res+`</div></div>`; } if(data.second_prize > 0 ){ str+=`<div class="detail"><img src="${getPic(data.second_prize_pic)}"/><span>二等奖: ${data.second_prize_cmt} * ${data.second_prize}</span>`; let res = `<div class="r###lt">`; if(data.lottery_r###lt&&data.lottery_r###lt.second_prize_r###lt){ for(let person of data.lottery_r###lt.second_prize_r###lt){ res+=`<div class="fav"><img src="${person.face}"/><a target="_blank" href="https://space.bilibili.com/${person.uid}/#/">${person.name}</a></div>`; } } str+=res+`</div></div>`; } if(data.third_prize > 0 ){ str+=`<div class="detail"><img src="${getPic(data.third_prize_pic)}"/><span>三等奖: ${data.third_prize_cmt} * ${data.third_prize}</span>`; let res = `<div class="r###lt">`; if(data.lottery_r###lt&&data.lottery_r###lt.third_prize_r###lt){ for(let person of data.lottery_r###lt.third_prize_r###lt){ res+=`<div class="fav"><img src="${person.face}"/><a target="_blank" href="https://space.bilibili.com/${person.uid}/#/">${person.name}</a></div>`; } } str+=res+`</div></div>`; } return `<div class="price" post="${id}"><div class="info">开奖时间: ${formatTime(data.lottery_time*1000)}<br>抽奖条件: ${data.lottery_feed_limit?"关注 ;":""} ${data.lottery_at_num?"@"+data.lottery_at_num+"个好友 ":""}</div>`+str+`</div>`; } function rewrite_lottery(ele,data,id=1){ ele.html(ele.html().replace(/互动抽奖/,`<div style="display:inline-block" onmouseover="show_dia(${id})" onmouseout="hide_dia(${id})"><a class="helper_lottory"><i class="svg" ></i>互动抽奖</a>`+prepare_html_node(data,id)+`</div>`)); window.show_dia = function(post){ if($jquery("#helper_ctrn_cla[post='"+post+"']").length){ }else{ $jquery("body").append(`<div id="helper_ctrn_cla" post="${post}"><style>.price[post="${post}"]{ transition:display 1s; display:block; } </style></div>`); } } window.hide_dia = function(post){ $jquery("#helper_ctrn_cla[post="+post+"]").remove(); } } async function xiangbu(){ let detail = await mscststs.wait(".discription",true); let doc_id = window.location.pathname.slice(1,1000); let lottery = await api.getNotice(doc_id); if(lottery.code==0){ // 确实存在 //await mscststs.sleep(1000); console.log(detail.innerText.length) rewrite_lottery($jquery(".discription"),lottery.data); } } async function solve_space_dynamic(card){ let des = card.find(".original-card-content a.content"); let id = ""; //console.log(des.text()); if(des.text().indexOf("互动抽奖")>=0){ //存在互动抽奖字符 let flag = false; if(des.attr("href").indexOf("t.bilibili.com")>=0){ let ind = des.attr("href").indexOf("t.bilibili.com"); let doc_id = parseInt(des.attr("href").slice(ind+15,1000)); //console.log(des.attr("href")+" "+doc_id); let lottery = await api.getNotice(doc_id,1); if(lottery.code==0){ rewrite_lottery(des.find(".content-ellipsis"),lottery.data,doc_id); rewrite_lottery(des.find(".content-full"),lottery.data,doc_id); } }if(des.attr("href").indexOf("h.bilibili.com")>=0){ let ind = des.attr("href").indexOf("h.bilibili.com"); let doc_id = parseInt(des.attr("href").slice(ind+15,1000)); flag =doc_id; //console.log(des.attr("href")+" "+doc_id); let lottery = await api.getNotice(doc_id); if(lottery.code==0){ rewrite_lottery(des.find(".content-ellipsis"),lottery.data,doc_id); rewrite_lottery(des.find(".content-full"),lottery.data,doc_id); } } } } async function space(){ setInterval(()=>{ if($jquery("#page-dynamic div.card>a").length){ //找出所有的card let card_array = []; let cards = $jquery("#page-dynamic div.card>a"); cards.each(function(){ if($(this).parent().attr("helper_solve")){ //被处理过,不进行处理 }else{ card_array.push($(this).parent()); } }) for(let card of card_array){ card.attr("helper_solve","true"); solve_space_dynamic(card); //单独处理每一张card } } },1000); } async function init(){ $jquery("body").on("dblclick",".price",function(){ let id = $jquery(this).attr("post"); $jquery("#helper_ctrn_cla[post="+id+"]").remove(); }) if(window.location.href.indexOf("h.bilibili.com")>=0){ await xiangbu(); //bilibili 相簿 } if(window.location.href.indexOf("space.bilibili.com")>=0){ await space(); //动态 } }; init(); $jquery("body").append(` <style> .price{ z-index:1000; border:1px solid #000; display:none; position:absolute; color: #000000 !important; font-weight: normal !important; background-color:#fff !important; margin-top:0px; border-radius:10px; /*pointer-events: none;*/ cursor: default; width:500px; padding:20px 7px; border: 1px solid #e3e8ec; box-shadow:0 0 18px 0 #aaa,0 0 3px 0 #666; user-select:none; /*border:1px solid #0f0;*/ } .price .info{ padding:10px 30px ; background-color:#f4f4f4; box-shadow: 0 0 14px 0 #ccc inset; } .price .detail{ margin-top:20px; } .price .detail > img{ margin:5px; width:60px; height:60px; box-shadow:0px 0px 5px 0px #4f5052; float:left; border-radius:7px; } .price .detail > span{ float:left; padding-left:30px; width:400px; height:70px; line-height:70px; } .price .detail >.r###lt{ width:450px; max-height:200px; overflow:auto; padding:0px 25px; background-color:#f4f4f4; box-shadow: 0 0 14px 0 #ccc inset; } .price .detail >.r###lt .fav{ float:left; width:225px; } .price .detail >.r###lt .fav a{ position:relative; float:left; text-decoration:none; color:#000; font-family:"Avenir,Helvetica,Arial,sans-serif"; line-height:40px; padding-left:12px; } .price .detail >.r###lt .fav:first-child{ margin-top:15px; } .price .detail >.r###lt .fav:nth-child(2){ margin-top:15px; } .price .detail >.r###lt .fav:last-child{ margin-bottom:15px; } .price .detail >.r###lt img{ border-radius:50%; width:40px; height:40px; float:left; } a.helper_lottory{ cursor:pointer; color:rgb(0, 161, 214); font-weight:bold; user-select:none; padding:0 5px; display:inline-block; border-radius:4px; } a.helper_lottory:hover{ background-color:rgba(0,0,0,0.1); } .svg{ display:inline-block; background-image:url(https://s1.hdslb.com/bfs/seed/bplus-common/icon/2.0.6/bp-svg-icon.svg); position:relative;top:2px;margin-left:0px;margin-right:2px; background-position-x:0px; background-position-y:-335px; width:17px; height:16px; background-size:40px 882px; font-size:40px; font-style:italic; } <style> `); }) // Your code here... })();