腾讯视频会员自动签到-基于金山在线文档定时任务

博主原创文章,转载请说明出处,但是不说我也管不了你🏳️

前言

不知道从什么时候起,万恶的腾讯视频改了会员成长机制,而后以前躺着就能获得会员成长值任务的时代一去不复返。

腾讯视频会员成长机制改版

现在,作为尊贵的VIP用户,居然只能靠每天手动签到去获得成长值,有时甚至只有几个点,你隔这打发叫花子呢?就这还想让我来给你亲自签到?我二话不说,直接发动CV大招,百度+谷歌+CSDN+github四件套,轻松解决自动签到问题,麻麻再也不用担心我的会员成长值涨得慢啦!

开启自动签到后,轻松升级V7不是梦

注意,本文章中实现的自动签到功能基于js编写(完整代码见附录完整实现代码[1]),并由金山在线文档中的定时任务实现运行(免费、稳定且给力熬),实现原理是利用cookie完成身份验证并访问签到接口,所以需要在cookie过期时手动获取并更新cookie值。

正文

一、快速部署腾讯视频会员自动签到任务

1.1 登录金山在线文档

进入金山文档首页,点击进入网页版后,选择自己所需要的方式登录金山文档。

金山文档首页

1.2 新建一个空白表格并添加一个文档共享脚本

①依次选择新建->表格,创建一个空白表格,右键表格名将表格命名为tencent

新建空白表格
重命名表格名

②创建完成后,鼠标移到表格上方工具栏,依次选择效率->高级开发->AirScript脚本编辑器,并选择创建一个文档共享脚本,命名任意。

创建一个空脚本文件

③将附录完整实现代码复制粘贴到代码编辑区域

复制代码

④点击服务->添加服务,为脚本添加服务。将云文档API、邮件API、网络API服务都添加。

为脚本添加服务
添加三个服务

1.3 添加表格定时任务来定时运行脚本

选择效率->高级开发->定时任务->创造任务,添加定时任务,定时任务执行的脚本选择刚刚创建的脚本。

创建定时任务

1.4 配置执行(代码)任务所需要的参数

①打开电脑浏览器(这里用的是谷歌,其余浏览器基本大差不差),进入腾讯视频官网登录自己的会员账号,右键打开开发者工具栏,切换视图为手机(见电脑上浏览器如何让网页显示成手机模式? ↩︎),并在浏览器地址框输入https://m.v.qq.com/,刷新网页。

②从开发者工具栏中找到login_url与login_cookie信息,如图(第一个红圈为切换为手机模式):

开发者工具栏

依次选择NetWork(网络)->filter(过滤),输入refre,找到auth_refresh?xxx,点击后右侧栏出现详细信息,点击右侧栏详细信息的Headers(头信息)。然后在头信息中找到login_url与login_cookie,如图:

login_url
login_cookie

③将上面所说的login_url与login_cookie的值(值是冒号后面的值)复制到表格中,如图(注意值位置,login_url值在单元格A2,login_cookie值在单元格B2,如需要改变位置需要修改代码):

配置值

⑤邮箱配置为可选,可按照自己的要求配置。若需要发送到自己的邮箱,需要准备一个发送邮箱,一个接收邮箱,并且

在表格中配置完信息后还需要在代码中配置相关信息,若不需要则在相应表格处填否,且不用在代码中修改值。

需要修改的代码如下,该代码块位于完整实现代码的最底部:

JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function send_email(){
// 配置发送邮箱,下面以配置QQ邮箱为例子,XXX为需要修改的地方
let mailer = SMTP.login({
host: "smtp.qq.com", // 邮箱 的SMTP服务器的域名,此处为QQ
port: 465, //端口号
username: "[email protected]", // 邮箱地址,例如[email protected]
password: "xxx", // 邮箱的SMTP密码,非密码,获取方式自行百度
secure: true
});
mailer.send({
from: "腾讯视频签到<[email protected]>", // 发件人
to: email_address, // 收件人
subject: "腾讯视频签到通知-"+local_date, // 主题
text: execute_result, // 文本
})
}

二、代码实现详解与方法总结

2.1 AirScipt中的API

官网写得很清楚[2]。注:本文中的功能实现非常基础,几乎未做任何异常处理,望周知。

2.2 方法总结

发现没啥好总结的,主要就是抓包,能抓到包什么都好说。可以看出来腾讯视频会员签到的接口是没有那种每次都动态加密的,也就是每次请求都要携带一串不同的“密文”(点名批评某B,爬不了一点),所以用Cookie很容易就解决了验证问题。

附录

完整实现代码

注意:代码中除了邮件中的参数必须自己配置外,其余参数都是配置要求都是可选的,或者是在表格文件中完成配置的(因为写死在代码中修改太麻烦了)。

JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//选中特定sheet(表单)
var sheets = Application.Sheets;
var sheet;
for (let i = 1; i <= sheets.Count; i++) {
if((sheets.Item(i).Name)==="tencent"){
sheet = sheets.Item(i);
}
}
//获取当前日期
var myDate = new Date();
var local_date = myDate.toLocaleDateString();
//获取邮件信息
var email_address = sheet.Range("B9").Text;
var email_send_bool = sheet.Range("B8").Text;
//初始化任务执行参数
var login_url_data = sheet.Range("A2").Text;
var login_cookie_data = sheet.Range("B2").Text;
//初始化执行结果
var execute_result = "";

//执行任务
execute_result = tencent_video_sign_in();
//确认是否发送邮件
if(email_send_bool=="是"){
send_email();
}else{
console.log(execute_result);
}


function tencent_video_sign_in(){
//刷新登录状态的url
let login_url = "https://access.video.qq.com/user/auth_refresh?vappid=xxx&vsecret=xxx&type=qq&g_tk=&g_vstk=xxx&g_actk=xxx";//login_url的格式说明
let login_cookie = 'xxx';

login_url = login_url_data;
login_cookie = login_cookie_data;

let auth_cookie = 'app_ver=8.8.10.25828;call_type=1;isDarkMode=1;deviceModel=Unknown iPad;systemVersion=16.2;main_login=qq;vdevice_qimei36=d4641bb8597a7ebaa497cbd900001c916614;';//这个值是网上的其他博主提供的,也可以自己抓包手机端的数据,获取自己的值,但是很麻烦,所以这里直接给出现成的值

//获取签到需要的cookie
let login_resp = HTTP.get(
login_url,{
headers:{
'Referer': 'https://v.qq.com',
'Cookie': login_cookie
}
}
);


if(login_resp.status===200){
//拼装auth_cookie
let cookiesArr_in_resp = login_resp.headers['set-cookie'];//wps给的api不能直接获取cookie,所以从header中获取
let cookie_json_str = "{";
for(let count=0;count<cookiesArr_in_resp.length;count++){
cookie_json_str = cookie_json_str + "\"" +cookiesArr_in_resp[count].split(";")[0].replace("=","\":\"") + "\"";//第零个为cookie名+cookie值
if(count+1<cookiesArr_in_resp.length){
cookie_json_str = cookie_json_str + ",";
}
}
cookie_json_str = cookie_json_str+"}";
let cookie_json = JSON.parse(cookie_json_str);
auth_cookie = auth_cookie+'vqq_vusession='+cookie_json['vqq_vusession']+';'+'vqq_access_token='+cookie_json['vqq_access_token']+';'+'vqq_appid='+cookie_json['vqq_appid']+';'+'vqq_openid='+cookie_json['vqq_openid']+';'+'vqq_refresh_token='+cookie_json['vqq_refresh_token']+';'+'vqq_vuserid='+cookie_json['vqq_vuserid']+';'
//签到
let sign_in_url = "https://vip.video.qq.com/rpc/trpc.new_task_system.task_system.TaskSystem/CheckIn?rpc_data={}"
let referer = 'https://film.video.qq.com/x/grade/?ovscroll=0&ptag=Vgrade.card&source=page_id=default&ztid=default&pgid=page_personal_center&page_type=personal&is_interactive_flag=1&pg_clck_flag=1&styletype=201&mod_id=sp_mycntr_vip&sectiontype=2&business=hollywood&layouttype=1000&section_idx=0&mod_title=会员资产&blocktype=6001&vip_id=userCenter_viplevel_entry&mod_idx=11&item_idx=4&eid=button_mycntr&action_pos=jump&hidetitlebar=1&isFromJump=1&isDarkMode=1&uiType=HUGE';
referer = encodeURI(referer);
let sign_resp = HTTP.get(
sign_in_url,{
headers:{
'Referer': referer,
'Host': 'vip.video.qq.com',
'Origin': 'https://film.video.qq.com',
'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 16_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11A465 QQLiveBrowser/8.8.10 AppType/HD WebKitCore/WKWebView iOS GDTTangramMobSDK/4.370.6 GDTMobSDK/4.370.6 cellPhone/Unknown iPad AppBuild/25828',
'Accept-Encoding': 'gzip, deflate, br',
"Cookie": auth_cookie
}
}
);
//检查签到结果并做出相应处理
let sign_result_json = sign_resp.json();
if(sign_result_json['ret']!=0){
execute_result = execute_result + "签到失败,错误信息:"+sign_result_json['err_msg'];
}else{
execute_result = execute_result + "签到成功,签到积分:"+sign_result_json['check_in_score'];
}
}else{
execute_result = execute_result + "签到请求异常."
}
return execute_result;
}

function send_email(){
// 配置发送邮箱,下面以配置QQ邮箱为例子
let mailer = SMTP.login({
host: "smtp.qq.com", // 邮箱 的SMTP服务器的域名
port: 465,
username: "[email protected]", // 邮箱地址,例如[email protected]
password: "xxxx", // 邮箱的SMTP密码,非密码
secure: true
});
mailer.send({
from: "腾讯视频签到<[email protected]>", // 发件人
to: email_address, // 收件人
subject: "腾讯视频签到通知-"+local_date, // 主题
text: execute_result, // 文本
})
}

参考资料