- // ==UserScript==
- // @name BiliBili每日任务
- // @namespace http://tampermonkey.net/
- // @version 0.4
- // @description 自动完成bilibili的每日任务
- // @author maxinimize
- // @match https://account.bilibili.com/account/home
- // @grant none
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- const getRandomInt = (min, max) => {
- min = Math.ceil(min);
- max = Math.floor(max);
- return Math.floor(Math.random() * (max - min)) + min;
- }
-
- const fetchAttentions = async () => {
- try {
- let attentionList = [];
- const uid = document.cookie.split('; ').find(x => x.substr(0,11) === 'DedeUserID=').substr(11);
- const response = await fetch(`https://api.bilibili.com/x/relation/followings?vmid=${uid}&ps=50&order=desc`)
- const data = await response.json();
- if (data.code === 0) {
- let attentionList = data.data.list.map(a => a.mid)
- return attentionList
- } else {
- console.log(data.message);
- }
- } catch (error) {
- console.log('错误', error);
- }
- }
-
- const fetchVideos = async () => {
- try {
- let attentionList = await fetchAttentions();
- let videoList = [];
- for (let a of attentionList) {
- let response = await fetch(`https://space.bilibili.com/ajax/member/getSubmitVideos?mid=${a}&pagesize=100&tid=0`)
- let data = await response.json();
- videoList = videoList.concat(data.data.vlist.map(v => v.aid))
- }
- return videoList
-
- } catch (error) {
- console.log('错误', error);
- }
- }
-
- /*
- const fetchFiveMinsVideos = async () => {
- try {
- let attentionList = await fetchAttentions();
- let videoList = [];
- for (let a of attentionList) {
- let response = await fetch(`https://space.bilibili.com/ajax/member/getSubmitVideos?mid=${a}&pagesize=100&tid=0`)
- let data = await response.json(); // parseInt(data.data.vlist[0].length.split(':'))
- let result = data.data.vlist.filter(v => v.length.split(':').length > 2 || v.length.split(':') = 2 && parseInt(v.length.split(':')[0], 10))
- videoList = videoList.concat(data.data.vlist.map(v => v.aid))
- }
- return videoList
-
- } catch (error) {
- console.log('错误', error);
- }
- }
- */
-
-
- const fetchWatch = async (aid) => {
- try {
- let response = await fetch('https://api.bilibili.com/x/web-interface/view?aid='+aid)
- let data = await response.json();
- if (data.code === 0) {
- const cid = data.data.cid;
- const duration = data.data.duration;
- const sid = document.cookie.split('; ').find(x => x.substr(0,4) === 'sid=').substr(4);
- const uid = document.cookie.split('; ').find(x => x.substr(0,11) === 'DedeUserID=').substr(11);
- const csrf = document.cookie.split('; ').find(x => x.substr(0,9) === 'bili_jct=').substr(9);
- response = await fetch('https://api.bilibili.com/x/report/click/h5', {
- credentials: 'include',
- method: 'post',
- headers: {'Content-type': 'application/x-www-form-urlencoded'},
- body: `aid=${aid}&cid=${cid}&part=1&did=${sid}&ftime=${new Date().getTime()}&jsonp=jsonp&lv=None&mid=${uid}&csrf=${csrf}&stime=${new Date().getTime()}`
- })
- data = await response.json();
- if (data.code === 0) {
- response = await fetch('https://api.bilibili.com/x/report/web/heartbeat', {
- credentials: 'include',
- method: 'post',
- headers: {'Content-type': 'application/x-www-form-urlencoded'},
- body: `aid=${aid}&cid=${cid}&jsonp=jsonp&mid=${uid}&csrf=${csrf}&played_time=0&pause=false&realtime=${duration}&dt=7&play_type=1&start_ts=${new Date().getTime()}`
- })
- data = await response.json();
- if (data.code === 0) {
- const controller = new AbortController();
- const signal = controller.signal;
- const fetchPromise = fetch('https://api.bilibili.com/x/report/web/heartbeat', {
- credentials: 'include',
- method: 'post',
- headers: {'Content-type': 'application/x-www-form-urlencoded'},
- body: `aid=${aid}&cid=${cid}&jsonp=jsonp&mid=${uid}&csrf=${csrf}&played_time=${duration-1}&pause=false&realtime=${duration}&dt=7&play_type=0&start_ts=${new Date().getTime()}`
- })
- const timeoutId = setTimeout(() => controller.abort(), 5000);
- data = await fetchPromise.then(response => response.json());
- if (data.code === 0) {
- console.log('观看成功');
- return true
- } else {
- console.log('观看失败@4: ', data.message);
- return false
- }
- } else {
- console.log('观看失败@3: ', data.message);
- return false
- }
-
- } else {
- console.log('观看失败@2: ', data.message);
- return false
- }
- } else {
- console.log('获取视频信息失败: ', data.message);
- return false
- }
- } catch (error) {
- console.log('错误', error);
- return false
- }
- }
-
- const fetchShare = async (body) => {
- try {
- const response = await fetch('https://api.bilibili.com/x/web-interface/share/add', {
- credentials: 'include',
- method: 'post',
- headers: {'Content-type': 'application/x-www-form-urlencoded'},
- body: body
- })
- const data = await response.json();
- if (data.code === 0) {
- console.log("分享成功");
- return true
- } else {
- console.log(data.message);
- return false
- }
- } catch (error) {
- console.log('错误', error);
- return false
- }
- }
-
- const fetchCoin = async (body) => {
- try {
- const response = await fetch('https://api.bilibili.com/x/web-interface/coin/add', {
- credentials: 'include',
- method: 'post',
- headers: {'Content-type': 'application/x-www-form-urlencoded'},
- body: body
- })
- const data = await response.json()
- if (data.code === 0) {
- console.log("投币成功");
- return true
- } else {
- console.log(data.message);
- return false
- }
- } catch (error) {
- console.log('错误', error);
- return false
- }
- }
-
- const watch = async () => {
- let videoList = await fetchVideos();
- let aid = videoList[getRandomInt(0, videoList.length)];
- return fetchWatch(aid);
- }
-
- const share = async () => {
- let videoList = await fetchVideos();
- let aid = videoList[getRandomInt(0, videoList.length)];
- let csrf = document.cookie.split('; ').find(x => x.substr(0,9) === 'bili_jct=').substr(9);
- let payload = `aid=${aid}&csrf=${csrf}`;
- return fetchShare(payload);
- }
-
- const coin = async () => {
- let videoList = await fetchVideos();
- let aid = videoList[getRandomInt(0, videoList.length)];
- let csrf = document.cookie.split('; ').find(x => x.substr(0,9) === 'bili_jct=').substr(9);
- let payload = `aid=${aid}&multiply=1&csrf=${csrf}`;
- return fetchCoin(payload);
- }
-
- window.setTimeout(() => {
- if (document.querySelector('#app > div > div.security_content > div.security-right > div > div:nth-child(2) > div.home-daily-task-warp > div > div:nth-child(2) > div.home-dialy-exp-icon.position-rest')) {
- watch()
- }
-
- if (document.querySelector('#app > div > div.security_content > div.security-right > div > div:nth-child(2) > div.home-daily-task-warp > div > div:nth-child(3) > div.home-dialy-exp-icon.position-rest')) {
- if (document.querySelector('#app > div > div.security_content > div.security-right > div > div:nth-child(2) > div.home-daily-task-warp > div > div:nth-child(3) > p.re-exp-none').innerHTML === '未完成' || document.querySelector('#app > div > div.security_content > div.security-right > div > div:nth-child(2) > div.home-daily-task-warp > div > div:nth-child(3) > p.re-exp-none').innerHTML === '已获得0/50') {
- if (parseInt(document.querySelector('#app > div > div.security_content > div.security-right > div > div:nth-child(1) > div.index-info > div.home-right > div.home-top-bp > span:nth-child(4)').innerHTML, 10) >= 5) {
- let i = 0;
- let timer = setInterval(() => {
- coin();
- i = i + 1;
- if (i >= 5) {
- clearInterval(timer);
- }
- },2000);
- }
- }
- }
-
- if (document.querySelector('#app > div > div.security_content > div.security-right > div > div:nth-child(2) > div.home-daily-task-warp > div > div:nth-child(4) > div.home-dialy-exp-icon.position-rest')) {
- share()
- }
- }, 5000)
- })();