2020-05-12 15:44:00 +08:00
/ *
百度贴吧签到脚本
脚本修改自 : https : //github.com/sazs34/TaskConfig
兼容 : QuantumultX , Surge4 , Loon
获取Cookie说明 :
打开百度贴吧App后 ( AppStore中国区 , 非内部版 ) , 点击 "我的" , 如通知成功获取cookie , 则可以使用此签到脚本 .
获取Cookie后 , 请将Cookie脚本禁用并移除主机名 , 以免产生不必要的MITM .
脚本将在每天上午9 : 00 执行 , 您可以修改执行时间 。
* * * * * * * * * * * * * * * * * * * * * * * *
Surge 4.2 . 0 + 脚本配置 :
* * * * * * * * * * * * * * * * * * * * * * * *
[ Script ]
贴吧签到 = type = cron , cronexp = 0 9 * * * , script - path = https : //raw.githubusercontent.com/NobyDa/Script/master/BDTieBa-DailyBonus/TieBa.js
2020-07-21 13:41:00 +08:00
贴吧获取Cookie = type = http - request , pattern = https ? : \ / \ / ( c \ . tieba \ . baidu \ . com | 180 \ . 97 \ . \ d + \ . \ d + ) \ / c \ / s \ / login , script - path = https : //raw.githubusercontent.com/NobyDa/Script/master/BDTieBa-DailyBonus/TieBa.js
2020-05-12 15:44:00 +08:00
[ MITM ]
hostname = c . tieba . baidu . com
* * * * * * * * * * * * * * * * * * * * * * * *
QuantumultX 本地脚本配置 :
* * * * * * * * * * * * * * * * * * * * * * * *
[ task _local ]
# 贴吧签到
0 9 * * * TieBa . js
[ rewrite _local ]
# 获取Cookie
2020-07-21 13:41:00 +08:00
https ? : \ / \ / ( c \ . tieba \ . baidu \ . com | 180 \ . 97 \ . \ d + \ . \ d + ) \ / c \ / s \ / login url script - request - header TieBa . js
2020-05-12 15:44:00 +08:00
[ mitm ]
hostname = c . tieba . baidu . com
* * * * * * * * * * * * * * * * * * * * * * * *
Loon 2.1 . 0 + 脚本配置 :
* * * * * * * * * * * * * * * * * * * * * * * *
[ Script ]
# 贴吧签到
cron "0 9 * * *" script - path = https : //raw.githubusercontent.com/NobyDa/Script/master/BDTieBa-DailyBonus/TieBa.js
# 获取Cookie
2020-07-21 13:41:00 +08:00
http - request https ? : \ / \ / ( c \ . tieba \ . baidu \ . com | 180 \ . 97 \ . \ d + \ . \ d + ) \ / c \ / s \ / login script - path = https : //raw.githubusercontent.com/NobyDa/Script/master/BDTieBa-DailyBonus/TieBa.js
2020-05-12 15:44:00 +08:00
[ Mitm ]
hostname = c . tieba . baidu . com
* /
var $nobyda = nobyda ( ) ;
var cookieVal = $nobyda . read ( "CookieTB" ) ;
var useParallel = 0 ; //0自动切换,1串行,2并行(当贴吧数量大于30个以后,并行可能会导致QX崩溃,所以您可以自动切换)
var singleNotifyCount = 20 ; //想签到几个汇总到一个通知里,这里就填几个(比如我有13个要签到的,这里填了5,就会分三次消息通知过去)
var process = {
total : 0 ,
result : [
// {
// bar:'',
// level:0,
// exp:0,
// errorCode:0,
// errorMsg:''
// }
]
} ;
var url _fetch _sign = {
url : "https://tieba.baidu.com/mo/q/newmoindex" ,
headers : {
"Content-Type" : "application/octet-stream" ,
Referer : "https://tieba.baidu.com/index/tbwise/forum" ,
Cookie : cookieVal ,
"User-Agent" : "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366"
}
} ;
var url _fetch _add = {
url : "https://tieba.baidu.com/sign/add" ,
method : "POST" ,
headers : {
"Content-Type" : "application/x-www-form-urlencoded" ,
Cookie : cookieVal ,
"User-Agent" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/14B100 UCBrowser/10.7.5.650 Mobile"
} ,
body : ""
} ;
if ( $nobyda . isRequest ) {
GetCookie ( )
} else {
signTieBa ( )
}
function signTieBa ( ) {
2020-07-27 15:48:12 +08:00
useParallel = $nobyda . read ( "BDTB_DailyBonus_Mode" ) || useParallel
singleNotifyCount = $nobyda . read ( "BDTB_DailyBonus_notify" ) || singleNotifyCount
2020-05-12 15:44:00 +08:00
if ( ! cookieVal ) {
$nobyda . notify ( "贴吧签到" , "签到失败" , "未获取到cookie" ) ;
2020-07-27 15:48:12 +08:00
return $nobyda . done ( )
2020-05-12 15:44:00 +08:00
}
$nobyda . get ( url _fetch _sign , function ( error , response , data ) {
if ( error ) {
$nobyda . notify ( "贴吧签到" , "签到失败" , "未获取到签到列表" ) ;
2020-07-27 15:48:12 +08:00
$nobyda . done ( )
2020-05-12 15:44:00 +08:00
} else {
// $nobyda.notify("贴吧签到", "贴吧列表", response.body);
2020-05-12 16:18:14 +08:00
var body = JSON . parse ( data ) ;
2020-05-12 15:44:00 +08:00
var isSuccessResponse = body && body . no == 0 && body . error == "success" && body . data . tbs ;
if ( ! isSuccessResponse ) {
$nobyda . notify ( "贴吧签到" , "签到失败" , ( body && body . error ) ? body . error : "接口数据获取失败" ) ;
2020-07-27 15:48:12 +08:00
return $nobyda . done ( )
2020-05-12 15:44:00 +08:00
}
process . total = body . data . like _forum . length ;
if ( body . data . like _forum && body . data . like _forum . length > 0 ) {
if ( useParallel == 1 || ( useParallel == 0 && body . data . like _forum . length >= 30 ) ) {
signBars ( body . data . like _forum , body . data . tbs , 0 ) ;
} else {
for ( const bar of body . data . like _forum ) {
signBar ( bar , body . data . tbs ) ;
}
}
} else {
$nobyda . notify ( "贴吧签到" , "签到失败" , "请确认您有关注的贴吧" ) ;
2020-07-27 15:48:12 +08:00
return $nobyda . done ( )
2020-05-12 15:44:00 +08:00
}
}
} )
}
function signBar ( bar , tbs ) {
if ( bar . is _sign == 1 ) { //已签到的,直接不请求接口了
process . result . push ( {
bar : ` ${ bar . forum _name } ` ,
level : bar . user _level ,
exp : bar . user _exp ,
errorCode : 9999 ,
errorMsg : "已签到"
} ) ;
checkIsAllProcessed ( ) ;
} else {
url _fetch _add . body = ` tbs= ${ tbs } &kw= ${ bar . forum _name } &ie=utf-8 ` ;
$nobyda . post ( url _fetch _add , function ( error , response , data ) {
if ( error ) {
process . result . push ( {
bar : bar . forum _name ,
errorCode : 999 ,
errorMsg : '接口错误'
} ) ;
checkIsAllProcessed ( ) ;
} else {
try {
2020-05-12 16:18:14 +08:00
var addResult = JSON . parse ( data ) ;
2020-05-12 15:44:00 +08:00
if ( addResult . no == 0 ) {
process . result . push ( {
bar : bar . forum _name ,
errorCode : 0 ,
errorMsg : ` 获得 ${ addResult . data . uinfo . cont _sign _num } 积分,第 ${ addResult . data . uinfo . user _sign _rank } 个签到 `
} ) ;
} else {
process . result . push ( {
bar : bar . forum _name ,
errorCode : addResult . no ,
errorMsg : addResult . error
} ) ;
}
} catch ( e ) {
$nobyda . notify ( "贴吧签到" , "贴吧签到数据处理异常" , JSON . stringify ( e ) ) ;
2020-07-27 15:48:12 +08:00
$nobyda . done ( )
2020-05-12 15:44:00 +08:00
}
checkIsAllProcessed ( ) ;
}
} )
}
}
function signBars ( bars , tbs , index ) {
//$nobyda.notify("贴吧签到", `进度${index}/${bars.length}`, "");
if ( index >= bars . length ) {
//$nobyda.notify("贴吧签到", "签到已满", `${process.result.length}`);
checkIsAllProcessed ( ) ;
} else {
var bar = bars [ index ] ;
if ( bar . is _sign == 1 ) { //已签到的,直接不请求接口了
process . result . push ( {
bar : ` ${ bar . forum _name } ` ,
level : bar . user _level ,
exp : bar . user _exp ,
errorCode : 9999 ,
errorMsg : "已签到"
} ) ;
signBars ( bars , tbs , ++ index ) ;
} else {
url _fetch _add . body = ` tbs= ${ tbs } &kw= ${ bar . forum _name } &ie=utf-8 ` ;
$nobyda . post ( url _fetch _add , function ( error , response , data ) {
if ( error ) {
process . result . push ( {
bar : bar . forum _name ,
errorCode : 999 ,
errorMsg : '接口错误'
} ) ;
signBars ( bars , tbs , ++ index ) ;
} else {
try {
2020-05-12 16:18:14 +08:00
var addResult = JSON . parse ( data ) ;
2020-05-12 15:44:00 +08:00
if ( addResult . no == 0 ) {
process . result . push ( {
bar : bar . forum _name ,
errorCode : 0 ,
errorMsg : ` 获得 ${ addResult . data . uinfo . cont _sign _num } 积分,第 ${ addResult . data . uinfo . user _sign _rank } 个签到 `
} ) ;
} else {
process . result . push ( {
bar : bar . forum _name ,
errorCode : addResult . no ,
errorMsg : addResult . error
} ) ;
}
} catch ( e ) {
$nobyda . notify ( "贴吧签到" , "贴吧签到数据处理异常" , JSON . stringify ( e ) ) ;
2020-07-27 15:48:12 +08:00
$nobyda . done ( )
2020-05-12 15:44:00 +08:00
}
signBars ( bars , tbs , ++ index )
}
} )
}
}
}
function checkIsAllProcessed ( ) {
//$nobyda.notify("贴吧签到", `最终进度${process.result.length}/${process.total}`, "");
if ( process . result . length != process . total ) return ;
for ( var i = 0 ; i < Math . ceil ( process . total / singleNotifyCount ) ; i ++ ) {
var notify = "" ;
var spliceArr = process . result . splice ( 0 , singleNotifyCount ) ;
var notifySuccessCount = 0 ;
for ( const res of spliceArr ) {
if ( res . errorCode == 0 || res . errorCode == 9999 ) {
notifySuccessCount ++ ;
}
if ( res . errorCode == 9999 ) {
notify += ` 【 ${ res . bar } 】已经签到,当前等级 ${ res . level } ,经验 ${ res . exp }
` ;
} else {
notify += ` 【 ${ res . bar } 】 ${ res . errorCode == 0 ? '签到成功' : '签到失败' } , ${ res . errorCode == 0 ? res . errorMsg : ( '原因:' + res . errorMsg ) }
` ;
}
}
$nobyda . notify ( "贴吧签到" , ` 签到 ${ spliceArr . length } 个,成功 ${ notifySuccessCount } 个 ` , notify ) ;
2020-07-27 15:48:12 +08:00
$nobyda . done ( )
2020-05-12 15:44:00 +08:00
}
}
function GetCookie ( ) {
var headerCookie = $request . headers [ "Cookie" ] ;
if ( headerCookie ) {
if ( $nobyda . read ( "CookieTB" ) != undefined ) {
if ( $nobyda . read ( "CookieTB" ) != headerCookie ) {
if ( headerCookie . indexOf ( "BDUSS" ) != - 1 ) {
var cookie = $nobyda . write ( headerCookie , "CookieTB" ) ;
if ( ! cookie ) {
$nobyda . notify ( "更新贴吧Cookie失败‼️ " , "" , "" ) ;
} else {
$nobyda . notify ( "更新贴吧Cookie成功 🎉" , "" , "" ) ;
}
}
}
} else {
if ( headerCookie . indexOf ( "BDUSS" ) != - 1 ) {
var cookie = $nobyda . write ( headerCookie , "CookieTB" ) ;
if ( ! cookie ) {
$nobyda . notify ( "首次写入贴吧Cookie失败‼️ " , "" , "" ) ;
} else {
$nobyda . notify ( "首次写入贴吧Cookie成功 🎉" , "" , "" ) ;
}
}
}
}
2020-07-27 15:48:12 +08:00
$nobyda . done ( )
2020-05-12 15:44:00 +08:00
}
function nobyda ( ) {
const isRequest = typeof $request != "undefined"
const isSurge = typeof $httpClient != "undefined"
const isQuanX = typeof $task != "undefined"
const notify = ( title , subtitle , message ) => {
if ( isQuanX ) $notify ( title , subtitle , message )
if ( isSurge ) $notification . post ( title , subtitle , message )
}
const write = ( value , key ) => {
if ( isQuanX ) return $prefs . setValueForKey ( value , key )
if ( isSurge ) return $persistentStore . write ( value , key )
}
const read = ( key ) => {
if ( isQuanX ) return $prefs . valueForKey ( key )
if ( isSurge ) return $persistentStore . read ( key )
}
const adapterStatus = ( response ) => {
if ( response ) {
if ( response . status ) {
response [ "statusCode" ] = response . status
} else if ( response . statusCode ) {
response [ "status" ] = response . statusCode
}
}
return response
}
const get = ( options , callback ) => {
if ( isQuanX ) {
if ( typeof options == "string" ) options = {
url : options
}
options [ "method" ] = "GET"
$task . fetch ( options ) . then ( response => {
callback ( null , adapterStatus ( response ) , response . body )
} , reason => callback ( reason . error , null , null ) )
}
if ( isSurge ) $httpClient . get ( options , ( error , response , body ) => {
callback ( error , adapterStatus ( response ) , body )
} )
}
const post = ( options , callback ) => {
if ( isQuanX ) {
if ( typeof options == "string" ) options = {
url : options
}
options [ "method" ] = "POST"
$task . fetch ( options ) . then ( response => {
callback ( null , adapterStatus ( response ) , response . body )
} , reason => callback ( reason . error , null , null ) )
}
if ( isSurge ) {
$httpClient . post ( options , ( error , response , body ) => {
callback ( error , adapterStatus ( response ) , body )
} )
}
}
const done = ( value = { } ) => {
2020-08-21 22:19:48 +08:00
if ( isQuanX ) return $done ( value )
2020-05-12 15:44:00 +08:00
if ( isSurge ) isRequest ? $done ( value ) : $done ( )
}
return {
isRequest ,
notify ,
write ,
read ,
get ,
post ,
done
}
} ;