Bilibili-Evolved/min/feeds-apis.min.js
2020-02-04 15:46:41 +08:00

1 line
4.5 KiB
JavaScript

(()=>{return(t,e)=>{const r={repost:{id:1,name:"转发"},textWithImages:{id:2,name:"图文"},text:{id:4,name:"文字"},video:{id:8,name:"视频"},miniVideo:{id:16,name:"小视频"},column:{id:64,name:"专栏"},audio:{id:256,name:"音频"},bangumi:{id:512,name:"番剧"},share:{id:2048,name:"分享"}};const i=t=>{if(t.querySelector(".repost")){return r.repost}if(t.querySelector(".imagesbox")){return r.textWithImages}if(t.querySelector(".video-container")){return r.video}if(t.querySelector(".bangumi-container")){return r.bangumi}if(t.querySelector(".article-container")){return r.column}if(t.querySelector(".music-container")){return r.audio}if(t.querySelector(".h5share-container")){return r.share}if(t.querySelector(".vc-ctnr")){return r.miniVideo}return r.text};class n extends EventTarget{constructor(){super(...arguments);this.watching=false;this.cards=[]}addEventListener(t,e,r){super.addEventListener(t,e,r)}removeEventListener(t,e,r){super.removeEventListener(t,e,r)}async addCard(t){if(t instanceof HTMLElement&&t.classList.contains("card")){if(t.querySelector(".skeleton")!==null){const e=Observer.childList(t,()=>{if(t.querySelector(".skeleton")===null){e.stop();this.addCard(t)}})}else{const e=await this.parseCard(t);this.cards.push(e);this.cards.sort((t,e)=>{if(t.id===e.id){return 0}return t.id>e.id?-1:1});const r=new CustomEvent("addCard",{detail:e});this.dispatchEvent(r)}}}async removeCard(t){if(t instanceof HTMLElement&&t.classList.contains("card")){const e=(await this.parseCard(t)).id;const r=this.cards.findIndex(t=>t.id===e);const i=this.cards[r];this.cards.splice(r,1);const n=new CustomEvent("removeCard",{detail:i});this.dispatchEvent(n)}}async parseCard(t){const e=async e=>{const r=await SpinQuery.condition(()=>t.querySelector(e),t=>t!==null);if(r===null){console.warn(t,e);return""}const i=r.innerText.trim();return i};const n=async e=>{if(e===r.bangumi){return""}const i=await SpinQuery.condition(()=>t,t=>Boolean(t.__vue__));if(i===null){console.warn(i);return""}if(e===r.repost){const t=i.__vue__.originCardData.pureText;return i.__vue__.card.item.content+"\n"+t||""}return i.__vue__.originCardData.pureText||""};const a=async t=>{const r=parseInt(await e(t));if(isNaN(r)){return 0}return r};const s={id:t.getAttribute("data-did"),username:await e(".main-content .user-name"),text:"",reposts:await a(".button-bar .single-button:nth-child(1) .text-offset"),comments:await a(".button-bar .single-button:nth-child(2) .text-offset"),likes:await a(".button-bar .single-button:nth-child(3) .text-offset"),element:t,type:i(t),async getText(){const t=await n(this.type);this.text=t;return t}};await s.getText();t.setAttribute("data-type",s.type.id.toString());return s}async startWatching(){const t=await SpinQuery.select(".card-list .content");if(!t){return false}if(this.watching){return true}this.watching=true;const e=[...t.querySelectorAll(".content>.card")];e.forEach(t=>this.addCard(t));Observer.childList(t,t=>{t.forEach(t=>{t.addedNodes.forEach(t=>this.addCard(t));t.removedNodes.forEach(t=>this.removeCard(t))})});return true}}const a=new n;const s=async(t="video")=>{if(!getUID()){return[]}const e=await Ajax.getJsonWithCredentials(`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${getUID()}&type_list=${t==="video"?8:512}`);if(e.code!==0){throw new Error(e.message)}if(t==="video"){return e.data.cards.filter(t=>{return t.desc.orig_dy_id===0}).map(t=>{const e=JSON.parse(t.card);const r=_.get(t,"display.topic_info.topic_details",[]).map(t=>{return{id:t.topic_id,name:t.topic_name}});return{id:t.desc.dynamic_id_str,aid:e.aid,title:e.title,upID:t.desc.user_profile.info.uid,upName:t.desc.user_profile.info.uname,upFaceUrl:t.desc.user_profile.info.face,coverUrl:e.pic,description:e.desc,timestamp:t.timestamp,time:new Date(t.timestamp*1e3),topics:r,dynamic:e.dynamic,like:formatCount(t.desc.like),duration:e.duration,durationText:formatDuration(e.duration,0),playCount:formatCount(e.stat.view),danmakuCount:formatCount(e.stat.danmaku),watchlater:store.state.watchlaterList.includes(e.aid)}})}else if(t==="bangumi"){return e.data.cards.map(t=>{const e=JSON.parse(t.card);return{id:t.desc.dynamic_id_str,aid:e.aid,epID:e.episode_id,title:e.new_desc,upName:e.apiSeasonInfo.title,upFaceUrl:e.apiSeasonInfo.cover,coverUrl:e.cover,description:"",timestamp:t.timestamp,time:new Date(t.timestamp*1e3),like:formatCount(t.desc.like),durationText:"",playCount:formatCount(e.play_count),danmakuCount:formatCount(e.bullet_count),watchlater:false}})}else{return[]}};return{export:{feedsCardsManager:a,feedsCardTypes:r,getVideoFeeds:s}}}})();