Nolan Pro登录面板如何对接傻妞机器人详细教程

青龙傻妞 · 2023-03-27 · 1323 人浏览
Pro搭建获取token有门槛,大佬关门了,没在群里的请划走。

根据大佬的教程搭建好容器后,配置好配置文件。

教程开始

登录你的傻妞WEB后台
在插件订阅里面添加订阅地址

傻妞后台订阅地址文章底部获取
傻妞后台订阅地址文章底部获取

1.png

然后点击插件市场,多刷新几遍,搜索京东,安装这个京东登录

2.png

然后继续搜qinglong与something模块,把这两都安装了

微信截图_20230327152717.png

给傻妞发下面两条命令配置下就可以使用了

设置nolan Pro面板地址

例:set jd_cookie nolanPro_addr http://192.168.1.65:1234 (注意后面一定不要有/)

set jd_cookie nolanPro_addr ?

设置nolan Pro对接机器人的token

这个在Pro后台自己设置,设置好后复制到命令后面发给机器人配置即可
微信截图_20230327153031.png
例:set jd_cookie nolanPro_token hdiuoahiohq4156

set jd_cookie nolanPro_token ?

然后去给傻妞发登录试试吧!扫码登录先得发一个“打开扫码”。
注意的是,nolan面板地址后面一定不要加 /

更新方法

禁容器-->运行更新命令

docker run --rm     -v /var/run/docker.sock:/var/run/docker.sock     containrrr/watchtower -c     --run-once     pro

上面命令无法更新?
来,禁Pro容器,删掉之前的Pro镜像
CD到Pro目录

cd /root/pro    

在Pro容器里面配置好信息拉库,这样就拉的最新的了

sudo docker run -id \
--name pro -p 5016:5016 \
-v "$(pwd)":/app/Data \
-e Prolic=第2步获取的 \
-e User=自定义管理帐号 \
-e Pwd=自定义管理密码(八位以上包含大小写字母、数字或特殊字符) \
--privileged=true \
nolanhzy/pro

Pro首页样式代码分享:

复制代码到这里修改了保存即可

微信截图_20230327153804.png

样式一:

微信截图_20230327153631.png

样式二:

微信截图_20230327154047.png

样式三
微信截图_20230327173025.png

傻妞订阅(三选一自己测试)以及模板代码获取

{tabs}
{tabs-pane label="傻妞国外机订阅地址一"}

sub://T4EywWN46ztYBhHNdOl6Tk+4LnA5YNOgqmfJbjgPviVQIpORRGZeGJ5YUDg0ZW1H4/faKbq2RwQ2J1f50NbvUIiD/axharg92phr6DLh3NsPKpEy3VV/2cveR4YawmWhI0ewXrtaMHiPcOfNiWED/1d3g+szZYXiSO5OBrbKuy0=

{/tabs-pane}
{tabs-pane label="傻妞国外机订阅地址二"}

sub://T4EywWN46ztYBhHNdOl6Tr9gtAYiz3SRzcdeEobLHz90DHlvStJfWnrrkIBsmkj7IOvMl+lbwQYbGyZbUsPNftcvldmoonfat85juJ9oMGbGCLDzmpmxQs2V3/KTovRrgZRYrm6/8fNKHIglNorss7TzByd3Xhq8vDXtqDGZP1A=

{/tabs-pane}
{tabs-pane label="傻妞国内订阅地址"}

sub://T4EywWN46ztYBhHNdOl6Tkzap0mlmGqEMtMXHYFK3RePfCNugQWCjNHPpLZ8JoasT4VDcT9qG9TQFsqfbcA+SPnJAv0s+kH/KO/AX57Cx5vfJ8VDSI7d5JKehw8dp+GFnMbh2Gt1Dr/SSB304QDL/KPXvBfLvxc0USzCgHYjzVk=

{/tabs-pane}
{tabs-pane label="样式一代码"}

<!DOCTYPE html>
<html>
<head>
 <title>首页</title>
 <style>
body {
  margin: 0;
  padding: 0;
  font-family: Arial, sans-serif;
  background-color: #f0f0f0;
}
.container {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
  background-color: #fff;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  border-radius: 5px;
  text-align: center;
}
h1, p {
  margin: 0;
  padding: 0;
  color: #555;
}
h1 {
  font-size: 36px;
  margin-bottom: 20px;
}
p {
  font-size: 20px;
  margin-bottom: 30px;
}
button {
  display: inline-block;
  padding: 10px 20px;
  border-radius: 5px;
  border: none;
  color: #fff;
  font-size: 18px;
  font-weight: bold;
  text-align: center;
  text-decoration: none;
  background-color: #10a0d8;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
  cursor: pointer;
  margin-right: 10px;
  margin-bottom: 10px; /* 新增间距 */
}
button:hover {
  background-color: #0c7cac;
}
.popup-btn {
  background-color: #f0ad4e;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
  margin-left: 10px;
  margin-bottom: 10px; /* 新增间距 */
}
.popup-btn:hover {
  background-color: #ee9f2d;
}
 </style>
 <script>
  // 弹出提示框函数
  function popUp() {
   alert("这是提示框内容!");
  }
 </script>
</head>
<body>
 <div class="container">
  <h1> 季春便民</h1>
  <p>如果官方不动手<br> 扫码登录:有效期6个月<br> 手机登录:有效期3个月</p >

 <!-- 公众号 -->
  <button onclick="window.open(' 跳转地址链接放这里')">季春便民公众号</button>
 </div>
</body>
</html>

{/tabs-pane}

{tabs-pane label="样式二代码"}

<style>
    .deng{
    color: white;
    text-shadow: 0px 0px 15px #00FFFF,0px 0px 15px #00FFFF,0px 0px 15px #00FFFF;
}
</style>

<h1 align="center" class="deng"> 特别提醒 </h1>
<p align="center">本项目脚本收集自互联,为了保障您账号的<strong style="color: red;">财产</strong>安全,请设置支付密码并<strong style="color: red;">关闭免密支付</strong>!<br><h5 align="center">(东东-设置-支付设置-支付验证设置)</h5></p >
<marquee width="100%" behavior="scroll" style="color: #00f;">登录后可以扫码关注公众号,每天获取资产推送~</marquee>

{/tabs-pane}
{tabs-pane label="样式三代码"}

<!DOCTYPE HTML>
<html>
  
  <head>

  <style type="text/css">
      .aspect-ratio {
          position: relative;
          width: 100%;
          height: 0;
          padding-bottom: 75%;
      }
  
  .aspect-ratio iframe {
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top: 0;
  }
  </style>
  
      
  </head>
  
  <body>
      
      
      <div class="aspect-ratio" >
          <iframe src="https://player.bilibili.com/player.html?aid=513937568&bvid=BV18g41117HB&page=1danmaku=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
      </div>
      
  </body>
</html>

{/tabs-pane}
{/tabs}

部分人无法订阅到库

直接复制内容去傻妞插件那新建吧

{tabs}
{tabs-pane label="京东登录"}

https://raw.githubusercontent.com/LevenYi/sillyGirl_Plugins/master/download/16dbd882-32f7-11ed-89fb-fc7c02eb3d87.js

{/tabs-pane}
{tabs-pane label="qinglong"}

/*
* @author https://t.me/sillyGirl_Plugin
* @rule qinglong
* @origin 
* @module true
* @create_at 2021-09-09 16:30:33
* @description 青龙模块(可能仅支持部分版本青龙)
* @version v1.0.4
* @public false
* @title qinglong
*/



module.exports = {
   //认证
   Get_QL_Token,
   //订阅
   Get_QL_Subs,
   Start_QL_Subs,
   //环境变量
   Get_QL_Envs,
   Get_QL_Env,
   Add_QL_Envs,
   Update_QL_Env,
   Delete_QL_Envs,
   Move_QL_Env,
   Disable_QL_Envs,
   Enable_QL_Envs,
   //配置文件
   Get_QL_Config,
   Get_QL_Configs,
   Update_QL_Config,
   //日志
   Get_QL_Logs,
   Get_QL_Log,
   //定时任务
   Get_QL_Crons,
   Add_QL_Cron,
   Update_QL_Cron,
   Delete_QL_Crons,
   Disable_QL_Crons,
   Enable_QL_Crons,
   Get_QL_CronLog,
   Pin_QL_Crons,
   Unpin_QL_Crons,
   Start_QL_Crons,
   Stop_QL_Crons,
   //脚本
   Get_QL_Scripts,
   Get_QL_Script,
   Add_QL_Script,
   Update_QL_Script,
   Delete_QL_Script,
   Task_QL_Script,
   //自定义
   QLS,
   Sync_QL_Envs,  
   Modify_QL_Config
}

//使用样例
function Sample(){
   let data=null
   let QL=QLS()[0]
   let host=QL.host
   let client_id=QL.client_id
   let client_secret=QLS.client_secret
   let token=QL.token


   // let token=Get_QL_Token(host,client_id,client_secret)
   // data=Get_QL_Version(host,token)
   // let login=QL_Login(host,"username","passsword")
   
   // data=Get_QL_SeqLogClear(host,token)
   

   // data=Get_QL_Scripts(host,token)[2].children[0]
   // data=Get_QL_Script(host,token,"KingRan_KR","root.json")
   // data=Add_QL_Script(host,token,"测试.js","","hello word","")
   // data=Update_QL_Script(host,token,"测试.js","","你好")
   // data=Delete_QL_Script(host,token,"测试.js","")
   // data=Task_QL_Script(host,token,"jd_CheckCK.js","KingRan_KR")
   // data=Stop_QL_Script(host,token,"jd_CheckCK.js","KingRan_KR")
   
   // let envs=Get_QL_Envs(host,token)
   // data=envs[0]    
   // data=Add_QL_Envs(host,token,[{"name":"Test","value":"值","remarks":"备注1"}])
   // data=Update_QL_Env(host,token,"9gDpadTPLRM1rBoK","Test2","value2","remark2")
   // data=Move_QL_Env(host,token,"9gDpadTPLRM1rBoK",65,60)
   // data=Get_QL_Env(host,token,"9gDpadTPLRM1rBoK")
   // data=Delete_QL_Envs(host,token,["9gDpadTPLRM1rBoK"])
   // data=Disable_QL_Envs(host,token,["NVgvoIAzhPhPwU8n"])
   // data=Enable_QL_Envs(host,token,["NVgvoIAzhPhPwU8n"])

   // data=Get_QL_Configs(host,token)
   // data=Get_QL_Config(host,token,"extra.sh")
   // data=Update_QL_Config(host,token,"extra.sh","Hello")

   // let logs=Get_QL_Logs(host,token)
   // data=logs[1].files
   // data=Get_QL_Log(host,token,logs[1].name,logs[1].files[0])
       
   // data=Get_QL_Crons(host,token)[30]
   // data=Add_QL_Cron(host,token,"测试任务","task hello.py","1 2 1 1 1")
   // data=Update_QL_Cron(host,token,"iBKdVkntztpWOJmZ","测试任务","task hello.py2","1 4 1 1 1")

   // data=Disable_QL_Crons(host,token,["DBPOktsB6d4S6RUn"])
   // data=Enable_QL_Crons(host,token,["DBPOktsB6d4S6RUn"])
   // data=Pin_QL_Crons(host,token,["DBPOktsB6d4S6RUn"])
   // data=Unpin_QL_Crons(host,token,["DBPOktsB6d4S6RUn"])
   // data=Get_QL_CronImport(host.token)
   // data=Start_QL_Crons(host,token,["aZTfc0tRFD2jvPR5"])
   // data=Stop_QL_Crons(host,token,["aZTfc0tRFD2jvPR5"])
   // data=Delete_QL_Crons(host,token,["tAEzGQX9Vtgk262O"])
   // data=Get_QL_CronLog(host,token,"h08xz5tLf34v6Sgl")
   
   console.log(data)
   console.log(JSON.stringify(data))
}

//青龙变量name同步
//function Sync_QL_Envs(from_host,from_token,to_host,to_token,name,value_keyword){
function Sync_QL_Envs(ql1,ql2,name,value_keyword){
   let from_envs=Get_QL_Envs(from_host,from_token)
   let to_envs=Get_QL_Envs(to_host,to_token)
   if(!from_envs || !to_envs)
       return false
   if(name){
       from_envs=from_envs.filter(env=>env.name==name)
       to_envs=to_envs.filter(env=>env.name==name)
   }
   for(let i=0;i<from_envs.length;i++){
       let keyword=""
       let index=0
       if(value_keyword){
           keyword=from_envs[i].value.match(value_keyword)
           if(!keyword)
               return false
           else
               keyword=keyword[0]
           index=to_envs.findIndex(env=>{
               let kt=env.match(keyword)
               if(kt && kt[0]==keyword)
                   return true
               else
                   return false
           })
       }
       else
           index=to_envs.findIndex(env=>env.name==from_envs[i].name)
       if(index!=-1){
           let id=to_envs[index]._id?to_envs[index]._id:to_envs[index].id
           to_envs[index].value=from_envs[i].value
           if(!Update_QL_Env(to_host,to_token,id,from_envs[i].name,from_envs[i].value,from_envs[i].remarks))
               console.log(from_envs[i].name+"\n"+from_envs[i].value+"sync update failed")
       }
       else{
           if(!Add_QL_Envs(to_host,to_token,from_envs[i].name,[from_envs[i]]))
               console.log(from_envs[i].name+"\n"+from_envs[i].value+"sync add failed")
       }
   }
}


//修改青龙配置文件变量
function Modify_QL_Config(host, token, envs) {
   //s.reply(JSON.stringify(envs))
   let Config = Get_QL_Config(host, token, "config.sh")
   if (Config != null) {
       for (let i = 0; i < envs.length; i++) {
           let reg = new RegExp("(?<=export[ ]+" + envs[i].name + "[ ]*=[ ]*(\"|\'))[^\"\']*")
           if (Config.search(reg) == -1)
               Config += "\nexport " + envs[i].name + "=\"" + envs[i].value + "\""
           else
               Config =Config.replace(reg, envs[i].value)
       }
       return Update_QL_Config(host, token, "config.sh", Config)
   }
   else return false
}


//修改配置文件变量envs:[{name:变量名,value:变量值}]并执行含关键词keywords:[]的任务
function Spy_QL_Task (host,token, envs, keywords) {
   if (!Modify_QL_Config(host, token, envs)) {
       return false
   }
   let crons = Search_QL_Crons(host, token, keywords)
   if(!crons)
       return false
   else
       return Start_QL_Crons(host, token, crons[0].id?[crons[0].id]:crons[0]._id)
}


//获取容器信息
function QLS(){
   let updated=false
   let db=new Bucket("qinglong")
   let data=db.get("QLS")
   if(!data)
       return null
   else
       QLS=JSON.parse(data)
   QLS.forEach((ql,i)=>{
       if(ql.token){
           let envs=Get_QL_Envs(ql.host,ql.token)    //检测token是否失效
           if(!envs){
               console.log(ql.name+"token疑似失效,重新获取")
               QLS[i]["token"]=Get_QL_Token(ql.host,ql.client_id,ql.client_secret)
               updated=true
           }
       }
       else{
           console.log("获取"+ql.name+"token")
           QLS[i]["token"]=Get_QL_Token(ql.host,ql.client_id,ql.client_secret)
           updated=true
       }
       if(!QLS[i].token){
           console.log(ql.name+"token获取失败,青龙管理容器配置错误或者青龙已挂掉\n")
           return null
       }
   })
   if(updated)
       db.set("QLS",JSON.stringify(QLS))
   return QLS
}


/****************用户*******************/
//获取青龙token
function Get_QL_Token(host,client_id,client_secret){
   let resp=request(host+"/open/auth/token?client_id="+client_id+"&client_secret="+client_secret)
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//获取青龙登陆信息,未知错误
function QL_Login(host,name,password){
   let resp=request({
       url:host+"/open/user/login",
       method:"post",
       headers:{
           "accept": "application/json"
       },
       body:{"name": name,"password": password}
   })
   try{
       s.reply("login---"+data)
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//****************青龙订阅***************** */
/*{
           "id": 4,
           "name": "KR",
           "url": "https://github.com/KingRan/KR.git",
           "schedule": "2 23 * * *",
           "interval_schedule": null,
           "type": "public-repo",
           "whitelist": "jd_|jx_|jdCookie",
           "blacklist": "activity|backUp|XAY|FLP|MN|AJ|YSLD|qbyq",
           "status": 1,
           "dependences": "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR",
           "extensions": null,
           "sub_before": null,
           "sub_after": null,
           "branch": null,
           "pull_type": null,
           "pull_option": null,
           "pid": 12934,
           "is_disabled": null,
           "log_path": "KingRan_KR/2023-01-18-23-02-00.log",
           "schedule_type": "crontab",
           "alias": "KingRan_KR",
           "proxy": null,
           "createdAt": "2023-01-16T15:52:19.105Z",
           "updatedAt": "2023-01-18T15:02:03.896Z"
}*/
//获取青龙订阅,无searchValue返回所有订阅
function Get_QL_Subs(host,token,searchValue){
   let option={
       url:host+"/open/subscriptions",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   }
   if(searchValue)
       option.url+="?searchValue="+encodeURI(searchValue)
   
   let resp=request(option)
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}
//立即执行订阅id,id为数组
function Start_QL_Subs(host,token,id){
   let resp=request({
       url:host+"/open/subscriptions/run",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }    
}


/****************青龙变量*******************/
/*环境变量对象
[{
   "value": "",    //值
   "_id": "",        //青龙2.11版本开始为id,自测
   "created": ,
   "status": 0,    //状态,是否禁用
   "timestamp": "Wed Jun 22 2022 17:55:12 GMT+0800 (中国标准时间)",
   "position": ,
   "name": "",            //变量名
   "remarks": ""        //变量备注
}]*/

//获取青龙环境变量,无searchValue返回所有环境变量对象
function Get_QL_Envs(host,token,searchValue){
   let option={
       url:host+"/open/envs",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   }
   if(searchValue)
       option.url+="?searchValue="+encodeURI(searchValue)
   let resp=request(option)
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//根据id获取青龙环境变量详细信息,成功返回环境变量对象
function Get_QL_Env(host,token,id){
   let resp=request({
       url:host+"/open/envs/"+id,
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//添加青龙变量envs:[{name:变量名,value:变量值,remarks:变量备注}]数组
//成功返回环境变量对象
function Add_QL_Envs(host,token,envs){
   let resp=request({
       url:host+"/open/envs",
       method:"post",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:envs
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//修改青龙变量id:变量id,修改为name:变量名,value:变量值,remark:变量备注
//成功返回修改后的环境变量对象
function Update_QL_Env(host,token,id,name,value,remark){
   let body=null
   if(typeof(id)=="string")
       body={"value": value,"name": name,"remarks": remark,"_id":id}
   else
       body={"value": value,"name": name,"remarks": remark,"id":id}
   let resp=request({
       url:host+"/open/envs",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:body
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//删除青龙变量id,id为数组,提交成功即成功,    
function Delete_QL_Envs(host,token,id){
   let resp=request({
       url:host+"/open/envs",
       method:"delete",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//移动青龙变量_id从位置from至位置to,from与to为数组下标
function Move_QL_Env(host,token,id,from,to){
   let resp=request({
       url:host+"/open/envs/"+id+"/move",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:{"fromIndex": from,"toIndex": to}
   })    
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//禁用青龙变量id,id为数组    
function Disable_QL_Envs(host,token,id){
   let resp=request({
       url:host+"/open/envs/disable",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//启用青龙变量id,id为数组    
function Enable_QL_Envs(host,token,id){
   let resp=request({
       url:host+"/open/envs/enable",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}



/****************青龙配置文件*******************/

//获取青龙配置文件列表,成功返回[{title:filename,value:filename}]对象
function Get_QL_Configs(host,token){
   let resp=request({
       url:host+"/open/configs/files",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//获取青龙配置文件内容
function Get_QL_Config(host,token,filename){
   let resp=request({
       url:host+"/open/configs/"+filename,
       method:"get",
       headers:{
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}


//修改配置文件
function Update_QL_Config(host,token,filename,content){
   let resp=request({
       url:host+"/open/configs/save",
       method:"post",
       headers:{
           "Authorization":token.token_type+" "+token.token,
           "content-Type":"application/json"
       },
       body:{"name":filename,"content":content}
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}


/****************青龙日志*******************/
//获取青龙日志件列表,成功返回[{ "name": "","isDir": true, "files": []}]对象数组
function Get_QL_Logs(host,token){
   let resp=request({
       url:host+"/open/logs",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).dirs    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//获取青龙日志内容,成功返回string内容
function Get_QL_Log(host,token,name,logfile){
   let resp=request({
       url:host+"/open/logs/"+name+"/"+logfile,
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}


/****************青龙任务*******************/
//获取青龙定时任务,无searchValue返回所有任务
function Get_QL_Crons(host,token,searchValue){
   let option={
       url:host+"/open/crons",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   }
   if(searchValue)
       option.url+="?searchValue="+encodeURI(searchValue)
   let resp=request(option)
   try{
       let data=JSON.parse(resp.body).data
       return data.data?data.data:data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
   }
}


//添加任务
function Add_QL_Cron(host,token,name,task,cron){
   let resp=request({
       url:host+"/open/crons",
       method:"post",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:{
           "command": task,
           "schedule": cron,
           "name": name
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }    
}

//修改任务
function Update_QL_Cron(host,token,id,name,task,cron){
   let body=null
   if(typeof(id)=="string")
       body={"command": task,"name": name,"schedule": cron,"_id":id}
   else
       body={"command": task,"name": name,"schedule": cron,"id":id}
   let resp=request({
       url:host+"/open/crons",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:body
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//删除任务数组
function Delete_QL_Crons(host,token,id){
   let resp=request({
       url:host+"/open/crons",
       method:"delete",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//禁用任务id,id为数组    
function Disable_QL_Crons(host,token,id){
   let resp=request({
       url:host+"/open/crons/disable",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//启用任务id,id为数组    
function Enable_QL_Crons(host,token,id){
   let resp=request({
       url:host+"/open/crons/enable",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//获取任务日志
function Get_QL_CronLog(host,token,id){
   let resp=request({
       url:host+"/open/crons/"+id+"/log",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }    
}

//置顶任务id,id为数组    
function Pin_QL_Crons(host,token,id){
   let resp=request({
       url:host+"/open/crons/pin",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//取消置顶任务id,id为数组    
function Unpin_QL_Crons(host,token,id){
   let resp=request({
       url:host+"/open/crons/unpin",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//立即执行任务id,id为数组
function Start_QL_Crons(host,token,id){
   let resp=request({
       url:host+"/open/crons/run",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }    
}

//停止任务id,id为数组
function Stop_QL_Crons(host,token,id){
   let resp=request({
       url:host+"/open/crons/stop",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:id
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }    
}

//未知
function Get_QL_CronImport(host,token){
   let resp=request({
       url:host+"/open/crons/import",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       return null
   }    
}


/****************青龙脚本*******************/
//本部分所有路径均指/ql/scripts/的相对路径

//获取所有脚本,成功返回脚本信息对象
function Get_QL_Scripts(host,token){
   let resp=request({
       url:host+"/open/scripts/files",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//获取脚本内容,parent为路径
function Get_QL_Script(host,token,filename,parent){
   let resp=request({
       url:host+"/open/scripts/"+filename+"?path="+parent,
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//添加脚本,文件名,路径,脚本内容,原始文件名(?)
function Add_QL_Script(host,token,filename,path,content,originFilename){
   let resp=request({
       url:host+"/open/scripts",
       method:"post",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:{
           "filename": filename,
           "path": path,
           "content": content,
           "originFilename": originFilename
       }
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }        
}

//修改脚本文件
function Update_QL_Script(host,token,filename,path,content){
   let resp=request({
       url:host+"/open/scripts",
       method:"post",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:{
           "path":path,
           "filename":filename,
           "content":content
       }
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//删除脚本
function Delete_QL_Script(host,token,filename,path){
   let resp=request({
       url:host+"/open/scripts",
       method:"delete",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:{
           "filename": filename,
           "path": path
       }
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }    
}

//执行脚本
function Task_QL_Script(host,token,filename,path){
   let resp=request({
       url:host+"/open/scripts/run",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:{
           "filename": filename,
           "path": path
       }
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}

//停止执行脚本,未知错误
function Stop_QL_Script(host,token,filename,path){
   let resp=request({
       url:host+"/open/scripts/stop",
       method:"put",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       },
       body:{
           "filename": filename,
           "path": path
       }
   })
   try{    
       if(JSON.parse(resp.body).code==200)
           return true
       else{
           console.log(resp.body)
           return false
       }
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return false
   }
}


/****************系统管理*******************/
//获取青龙版本,未知错误,获取失败
function Get_QL_Version(host,token){
   let resp=request({
       url:host+"/open/system",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }
}

//获取青龙日志删除频率,未知错误,获取失败
function Get_QL_SeqLogClear(host,token){
   let resp=request({
       url:host+"/open/system/log/remove",
       method:"get",
       headers:{
           "accept": "application/json",
           "Authorization":token.token_type+" "+token.token
       }
   })
   try{
       return JSON.parse(resp.body).data    
   }
   catch(err){
       console.log(JSON.stringify(resp))
       return null
   }    
}

{/tabs-pane}
{tabs-pane label="something"}

/*
* @author https://t.me/sillyGirl_Plugin
 * @rule something
 * @origin 
* @module true
* @create_at 2021-09-09 16:30:33
* @description 一些通用函数和网络接口以及数据
* @version v1.0.6
* @title something
 * @public false
*/

module.exports={
    NotifyPinInGroup,
    NotifyPin,
    NotifyMainKey,
    NotifyMasters,
    GetBind,
    ToHyperLink,
    ToEasyCopy,
    CQ_Image,

    USER_AGENT,
    JD_UserInfo,
    JD_BeanInfo,
    JD_ExpireBean,
    JD_RedPacket,
    JD_isLogin,

    WallDecode,
    WindfggDecode,
    NolanDecode,

    SendToTG,
    GetFile
}


function formatStringLen(strVal, len,padChar){
    if (!strVal) {
        return null
     } 
    let pad=padChar||" "
      let count=0
    for(let i=0;i<strVal.length;i++){
        if(strVal.charCodeAt(i)>255)
            count=count+2
        else
            count=count+1
    }
  //console.log(count)
    for(i=0;i<len-count;i++)
    strVal+=padChar
    return strVal
}

function CQ_Image(url){
    return "[CQ:image,cache=0,file="+url+"]"
}

//tg快捷复制
function ToEasyCopy(imtype,title,msg){
    if(imtype=="pgm")
        return "【**"+title+"**】`"+msg+"`"
    else if(imtype=="tg")
        return "【*"+title+"*】`"+msg+"`"
    // else if(imtype=="qq")
    //     return 
    else
        return  "【" + title + "】"+msg
}

//获取imtype平台用户uid所绑定的京东账号pin
function GetBind(imtype,uid){
    let db=new Bucket("pin"+imtype.toUpperCase())
    let allpins=db.keys();
    let pin=[]
    for(let i=0;i<allpins.length;i++)
        if(db.get(allpins[i])==uid)
            pin.push(allpins[i])
    return pin
}

//管理员通知
function NotifyMasters(msg){
    const sillyGirl=new SillyGirl()
    let types=["qq","tg","wx"]
    types.forEach(type=>{
        let matsers=(new Bucket(type).get("masters"))
        matsers.split("&").forEach(id=>
            sillyGirl.push({
                platform: type,
                 userId: id,
                 content: msg
            })
        )
    })
}

//在totype平台的群cid中向绑定京东账号pin的用户通知msg
function NotifyPinInGroup(totype,cid,pin,msg){ 
    let uid=(new Bucket("pin"+totype.toUpperCase())).get(pin)
    if(uid){
        sillyGirl.push({
            platform:totype,
            userID:uid,
            groupCode:cid,
            content:msg
        })
        return true    
    }
    else
        return false
}

//向绑定pin的用户全平台推送msg,返回该用户所绑定的所有平台
function NotifyPin(pin,msg){
    const sillyGirl=new SillyGirl()
    let types=["qq","tg","wx","sxg","wxmp"]
    let to=[]
    types.forEach(type=>{
        let uid=(new Bucket("pin"+type.toUpperCase())).get(pin)
        if(uid)
            to.push({type:type,id:uid})
    })        
    for(let i=0;i<to.length;i++)
        sillyGirl.push({
            platform:to[i].type,
            userID:to[i].id,
            content:msg,
        })
    return to
}


//获取傻妞数据库mainkey下设置的通知渠道发送msg消息
function NotifyMainKey(mainKey, isGroup, msg,token) {
    const sillyGirl=new SillyGirl()
    let record = []    //记录已通知[{imType:qq/tg/wx,id:ID}]
    let NotifyTo = {
        platform: "",
        userID: "",
        groupCode: "",
        content: msg
    }
    let dbn = new Bucket(mainKey)
    let toType = dbn.keys()
    for (let i = 0; i < toType.length; i++) {
        let ids = dbn.get(toType[i]).split("&")
        if(toType[i]=="tg"){
            ids.forEach(id=>{
                SendToTG(id,msg,null,token)
                record.push({ imType: toType[i], id: id })
            })
        }
        else{
            NotifyTo.platform = toType[i]
            for (let j = 0; j < ids.length; j++) {
                if (isGroup)
                    NotifyTo.groupCode = ids[j]
                else
                    NotifyTo.userID = ids[j]
                sillyGirl.push(NotifyTo)
                record.push({ imType: toType[i], id: ids[j] })
            }
        }
    }
    return record
}
//转各平台超链接
function ToHyperLink(type,url,title){
    if(type=="tg"||type=="pgm")
        return "["+title+"]("+url+")"
    else if(type=="qq")
        return "[CQ:share,url="+url+",title="+title+"]"
    else
        return "【"+title+"】\n"+url
}

//***************京东api********************/
//用户登陆状态
function JD_isLogin(ck){
    try{
        return Number(JSON.parse(request({
                url:"https://plogin.m.jd.com/cgi-bin/ml/islogin",
                headers:{
                    "Cookie": ck,
                    "User-Agent":  USER_AGENT()
                }
            }).body).islogin)
    }
    catch(err){
        return null
    }
}

//获取ck对应账号的信息
function JD_UserInfo(ck){
    let resp=request({
      url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion",
      method:"get",
//      dataType:"json",
      headers: {
        "User-Agent": USER_AGENT(),
        "Cookie": ck
      }
    })
    try{
        return JSON.parse(resp.body).data
    }
    catch(err){
        return null
    }
}

//获取ck对应账号最近days天的每一项收入
//各项收入详情[{eventMassage:活动名,amount:获得京豆数量,date:获得时间,...}]
function JD_BeanInfo(ck,days){
    let data=JD_BeanInfo2(ck,days)
//    return data?data:JD_BeanInfo1(ck,days)
    if(data)
        return data
    else{
        console.log("切换查询接口")
        return JD_BeanInfo1(ck,days)
    }
}

function JD_BeanInfo1(ck,days){
    let ua= USER_AGENT()
    let page=1    //京豆收入页
    let info=[]  //每一项收入活动详情记录
    let limit=100 //死循环保险
    let day=""  //记录前一项收入的日期,以统计记录天数
    let count=0    //天数统计
    while(limit-->0){
        let body=encodeURI(JSON.stringify({
            "pageSize": "200", 
            "page": page.toString()
        }))
        let data=request({
            url: "https://api.m.jd.com/client.action?functionId=getJingBeanBalanceDetail",
            method:"post",
            dataType:"json",
            body: "body="+body+"&appid=ld",
            headers: {
                "User-Agent": ua,
                "Host": "api.m.jd.com",
                "Content-Type": "application/x-www-form-urlencoded",
                "Cookie": ck
            }
        })
        if(data.status==200 && data.body.code==0){
            for(let i=0;i<data.body.detailList.length;i++){
                let infoday=data.body.detailList[i].date.match(/\d+(?= )/)[0]    //收入项时间-天
                if(day!=infoday){
                    day=infoday
                    if(count==days)
                        return info
                    count++
                }
                info.push(data.body.detailList[i])
            }
        }
        else
            return null
        sleep(500)
        page++
    }
}


function JD_BeanInfo2(ck,days){
    let ua= USER_AGENT()
    let page=1    //京豆收入页
    let info=[]  //每一项收入活动详情记录
    let limit=100 //死循环保险
    let day=""  //记录前一项收入的日期,以统计记录天数
    let count=0    //天数统计
    while(limit-->0){
        let data=request({
            url:"https://bean.m.jd.com/beanDetail/detail.json?page="+page,
            dataType:"json",
            headers:{
                "Cookie":ck,
                "User-Agent":ua
            }
        })
        if(data.status==200 && data.body.success){
            for(let i=0;i<data.body.jingDetailList.length;i++){
                let infoday=data.body.jingDetailList[i].date.match(/\d+(?= )/)[0]    //收入项时间-天
                if(day!=infoday){
                    day=infoday
                    if(count==days)
                        return info
                    count++
                }
                info.push(data.body.jingDetailList[i])
            }
        }
        else
            return null
        sleep(500)
        page++
    }
}

//获取ck对应账号7天内过期京豆
function JD_ExpireBean(ck){
    let resp=request({
        url:`https://wq.jd.com/activep3/singjd/queryexpirejingdou?_=${Date.now()}&g_login_type=1&sceneval=2`,
        headers:{
                "Cookie": ck,
                "Referer":"https://wqs.jd.com/promote/201801/bean/mybean.html",
                "User-Agent": USER_AGENT()  
        }
    })
    try{
        return JSON.parse(resp.body.slice(23, -13)).expirejingdou
    }
    catch(err){
        return null
    }    
}


//获取ck对应账号红包数据
function JD_RedPacket(ck){
    let resp=request({
        url:`https://m.jingxi.com/user/info/QueryUserRedEnvelopesV2?type=1&orgFlag=JD_PinGou_New&page=1&cashRedType=1&redBalanceFlag=1&channel=1&_=${+new Date()}&sceneval=2&g_login_type=1&g_ty=ls`,
        headers:{
                "Cookie": ck,
                "Referer":"https://st.jingxi.com/my/redpacket.shtml?newPg=App&jxsid=16156262265849285961",
                "User-Agent": USER_AGENT()     
        }
    })
    try{
        let data=JSON.parse(resp.body)
        if(data.msg=="success")
            return data.data
        else
            return null
    }
    catch(err){
        return null
    }
}


const USER_AGENTS = [
  'jdltapp;iPad;3.7.0;14.4;network/wifi;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;2346663656561603-4353564623932316;network/wifi;model/ONEPLUS A5010;addressid/0;aid/2dfceea045ed292a;oaid/;osVer/29;appBuild/1436;psn/BS6Y9SAiw0IpJ4ro7rjSOkCRZTgR3z2K|10;psq/5;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/10.5;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/oppo;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.1;59d6ae6e8387bd09fe046d5b8918ead51614e80a;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,1;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/1.26;apprpd/;ref/JDLTSubMainPageViewController;psq/0;ads/;psn/59d6ae6e8387bd09fe046d5b8918ead51614e80a|3;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;13.5;22d679c006bf9c087abf362cf1d2e0020ebb8798;network/wifi;ADID/10857A57-DDF8-4A0D-A548-7B8F43AC77EE;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone12,1;addressid/2378947694;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/15.7;apprpd/Allowance_Registered;ref/JDLTTaskCenterViewController;psq/6;ads/;psn/22d679c006bf9c087abf362cf1d2e0020ebb8798|22;jdv/0|kong|t_1000170135|tuiguang|notset|1614153044558|1614153044;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;2616935633265383-5333463636261326;network/UNKNOWN;model/M2007J3SC;addressid/1840745247;aid/ba9e3b5853dccb1b;oaid/371d8af7dd71e8d5;osVer/29;appBuild/1436;psn/t7JmxZUXGkimd4f9Jdul2jEeuYLwxPrm|8;psq/6;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/5.6;jdv/;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/xiaomi;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 10; M2007J3SC Build/QKQ1.200419.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045135 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.3;d7beab54ae7758fa896c193b49470204fbb8fce9;network/4g;ADID/97AD46C9-6D49-4642-BF6F-689256673906;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;9;D246836333735-3264353430393;network/4g;model/MIX 2;addressid/138678023;aid/bf8bcf1214b3832a;oaid/308540d1f1feb2f5;osVer/28;appBuild/1436;psn/Z/rGqfWBY/h5gcGFnVIsRw==|16;psq/3;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 9;osv/9;pv/13.7;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/xiaomi;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 9; MIX 2 Build/PKQ1.190118.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045135 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;eb5a9e7e596e262b4ffb3b6b5c830984c8a5c0d5;network/wifi;ADID/5603541B-30C1-4B5C-A782-20D0B569D810;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,2;addressid/1041002757;hasOCPay/0;appBuild/101;supportBestPay/0;pv/34.6;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/5;ads/;psn/eb5a9e7e596e262b4ffb3b6b5c830984c8a5c0d5|44;jdv/0|androidapp|t_335139774|appshare|CopyURL|1612612940307|1612612944;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;21631ed983b3e854a3154b0336413825ad0d6783;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,4;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.47;apprpd/;ref/JDLTSubMainPageViewController;psq/8;ads/;psn/21631ed983b3e854a3154b0336413825ad0d6783|9;jdv/0|direct|-|none|-|1614150725100|1614225882;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;13.5;500a795cb2abae60b877ee4a1930557a800bef1c;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone8,1;addressid/669949466;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/9.11;apprpd/;ref/JDLTSubMainPageViewController;psq/10;ads/;psn/500a795cb2abae60b877ee4a1930557a800bef1c|11;jdv/;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPad;3.7.0;14.4;f5e7b7980fb50efc9c294ac38653c1584846c3db;network/wifi;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPad6,3;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/231.11;pap/JA2020_3112531|3.7.0|IOS 14.4;apprpd/;psn/f5e7b7980fb50efc9c294ac38653c1584846c3db|305;usc/kong;jdv/0|kong|t_1000170135|tuiguang|notset|1613606450668|1613606450;umd/tuiguang;psq/2;ucp/t_1000170135;app_device/IOS;utr/notset;ref/JDLTRedPacketViewController;adk/;ads/;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;19fef5419f88076c43f5317eabe20121d52c6a61;network/wifi;ADID/00000000-0000-0000-0000-000000000000;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,8;addressid/3430850943;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/10.4;apprpd/;ref/JDLTSubMainPageViewController;psq/3;ads/;psn/19fef5419f88076c43f5317eabe20121d52c6a61|16;jdv/0|kong|t_1001327829_|jingfen|f51febe09dd64b20b06bc6ef4c1ad790#/|1614096460311|1614096511;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
  'jdltapp;iPhone;3.7.0;12.2;f995bc883282f7c7ea9d7f32da3f658127aa36c7;network/4g;ADID/9F40F4CA-EA7C-4F2E-8E09-97A66901D83E;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,4;addressid/525064695;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/11.11;apprpd/;ref/JDLTSubMainPageViewController;psq/2;ads/;psn/f995bc883282f7c7ea9d7f32da3f658127aa36c7|22;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 12.2;Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;5366566313931326-6633931643233693;network/wifi;model/Mi9 Pro 5G;addressid/0;aid/5fe6191bf39a42c9;oaid/e3a9473ef6699f75;osVer/29;appBuild/1436;psn/b3rJlGi AwLqa9AqX7Vp0jv4T7XPMa0o|5;psq/4;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/5.4;jdv/;ref/HomeFragment;partner/xiaomi;apprpd/Home_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; Mi9 Pro 5G Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045135 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;4e6b46913a2e18dd06d6d69843ee4cdd8e033bc1;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/666624049;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/54.11;apprpd/MessageCenter_MessageMerge;ref/MessageCenterController;psq/10;ads/;psn/4e6b46913a2e18dd06d6d69843ee4cdd8e033bc1|101;jdv/0|kong|t_2010804675_|jingfen|810dab1ba2c04b8588c5aa5a0d44c4bd|1614183499;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.2;c71b599e9a0bcbd8d1ad924d85b5715530efad06;network/wifi;ADID/751C6E92-FD10-4323-B37C-187FD0CF0551;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,8;addressid/4053561885;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/263.8;apprpd/;ref/JDLTSubMainPageViewController;psq/2;ads/;psn/c71b599e9a0bcbd8d1ad924d85b5715530efad06|481;jdv/0|kong|t_1001610202_|jingfen|3911bea7ee2f4fcf8d11fdf663192bbe|1614157052210|1614157056;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.2;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;2d306ee3cacd2c02560627a5113817ebea20a2c9;network/4g;ADID/A346F099-3182-4889-9A62-2B3C28AB861E;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,3;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/1.35;apprpd/Allowance_Registered;ref/JDLTTaskCenterViewController;psq/0;ads/;psn/2d306ee3cacd2c02560627a5113817ebea20a2c9|2;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;28355aff16cec8bcf3e5728dbbc9725656d8c2c2;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,2;addressid/833058617;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.10;apprpd/;ref/JDLTWebViewController;psq/9;ads/;psn/28355aff16cec8bcf3e5728dbbc9725656d8c2c2|5;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;13.5;24ddac73a3de1b91816b7aedef53e97c4c313733;network/4g;ADID/598C6841-76AC-4512-AA97-CBA940548D70;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone11,6;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/12.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/24ddac73a3de1b91816b7aedef53e97c4c313733|23;jdv/0|kong|t_1000170135|tuiguang|notset|1614126110904|1614126110;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;d7732ba60c8ff73cc3f5ba7290a3aa9551f73a1b;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,1;addressid/25239372;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/8.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/d7732ba60c8ff73cc3f5ba7290a3aa9551f73a1b|14;jdv/0|kong|t_1001226363_|jingfen|5713234d1e1e4893b92b2de2cb32484d|1614182989528|1614182992;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;ca1a32afca36bc9fb37fd03f18e653bce53eaca5;network/wifi;ADID/3AF380AB-CB74-4FE6-9E7C-967693863CA3;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone8,1;addressid/138323416;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/72.12;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/ca1a32afca36bc9fb37fd03f18e653bce53eaca5|109;jdv/0|kong|t_1000536212_|jingfen|c82bfa19e33a4269a5884ffc614790f4|1614141246;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;7346933333666353-8333366646039373;network/wifi;model/ONEPLUS A5010;addressid/138117973;aid/7d933f6583cfd097;oaid/;osVer/29;appBuild/1436;psn/T/eqfRSwp8VKEvvXyEunq09Cg2MUkiQ5|17;psq/4;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/11.4;jdv/0|kong|t_1001849073_|jingfen|495a47f6c0b8431c9d460f61ad2304dc|1614084403978|1614084407;ref/HomeFragment;partner/oppo;apprpd/Home_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;11;4626269356736353-5353236346334673;network/wifi;model/M2006J10C;addressid/0;aid/dbb9e7655526d3d7;oaid/66a7af49362987b0;osVer/30;appBuild/1436;psn/rQRQgJ 4 S3qkq8YDl28y6jkUHmI/rlX|3;psq/4;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 11;osv/11;pv/3.4;jdv/;ref/HomeFragment;partner/xiaomi;apprpd/Home_Main;eufv/1;Mozilla/5.0 (Linux; Android 11; M2006J10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045513 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;78fc1d919de0c8c2de15725eff508d8ab14f9c82;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,1;addressid/137829713;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/23.11;apprpd/;ref/JDLTSubMainPageViewController;psq/10;ads/;psn/78fc1d919de0c8c2de15725eff508d8ab14f9c82|34;jdv/0|iosapp|t_335139774|appshare|Wxfriends|1612508702380|1612534293;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;0373263343266633-5663030363465326;network/wifi;model/Redmi Note 7;addressid/590846082;aid/07b34bf3e6006d5b;oaid/17975a142e67ec92;osVer/29;appBuild/1436;psn/OHNqtdhQKv1okyh7rB3HxjwI00ixJMNG|4;psq/3;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/2.3;jdv/;ref/activityId=8a8fabf3cccb417f8e691b6774938bc2;partner/xiaomi;apprpd/jsbqd_home;eufv/1;Mozilla/5.0 (Linux; Android 10; Redmi Note 7 Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.152 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;10;3636566623663623-1693635613166646;network/wifi;model/ASUS_I001DA;addressid/1397761133;aid/ccef2fc2a96e1afd;oaid/;osVer/29;appBuild/1436;psn/T8087T0D82PHzJ4VUMGFrfB9dw4gUnKG|76;psq/5;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/73.5;jdv/0|kong|t_1002354188_|jingfen|2335e043b3344107a2750a781fde9a2e#/|1614097081426|1614097087;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/yingyongbao;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ASUS_I001DA Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,2;addressid/138419019;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/5.7;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/6;ads/;psn/4ee6af0db48fd605adb69b63f00fcbb51c2fc3f0|9;jdv/0|direct|-|none|-|1613705981655|1613823229;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/wifi;ADID/F9FD7728-2956-4DD1-8EDD-58B07950864C;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/1346909722;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/30.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/40d4d4323eb3987226cae367d6b0d8be50f2c7b3|39;jdv/0|kong|t_1000252057_0|tuiguang|eba7648a0f4445aa9cfa6f35c6f36e15|1613995717959|1613995723;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;ADID/5D306F0D-A131-4B26-947E-166CCB9BFFFF;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPad;3.7.0;14.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPad8,9;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/1.20;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/5;ads/;psn/d9f5ddaa0160a20f32fb2c8bfd174fae7993c1b4|3;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.5;Mozilla/5.0 (iPad; CPU OS 14_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/wifi;ADID/31548A9C-8A01-469A-B148-E7D841C91FD0;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/10.5;apprpd/;ref/JDLTSubMainPageViewController;psq/4;ads/;psn/a858fb4b40e432ea32f80729916e6c3e910bb922|12;jdv/0|direct|-|none|-|1613898710373|1613898712;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;13.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,2;addressid/2237496805;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/13.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/48e495dcf5dc398b4d46b27e9f15a2b427a154aa|15;jdv/0|direct|-|none|-|1613354874698|1613952828;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;3346332626262353-1666434336539336;network/wifi;model/ONEPLUS A6000;addressid/0;aid/3d3bbb25af44c59c;oaid/;osVer/29;appBuild/1436;psn/ECbc2EqmdSa7mDF1PS1GSrV/Tn7R1LS1|6;psq/8;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/2.67;jdv/0|direct|-|none|-|1613822479379|1613991194;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/oppo;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A6000 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;8.1.0;8363834353530333132333132373-43D2930366035323639333662383;network/wifi;model/16th Plus;addressid/0;aid/f909e5f2c464c7c6;oaid/;osVer/27;appBuild/1436;psn/c21YWvVr77Hn6 pOZfxXGY4TZrre1 UOL5hcPbCEDMo=|3;psq/10;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 8.1.0;osv/8.1.0;pv/2.15;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/jsxdlyqj09;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 8.1.0; 16th Plus Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045514 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;11;1343467336264693-3343562673463613;network/wifi;model/Mi 10 Pro;addressid/0;aid/14d7cbd934eb7dc1;oaid/335f198546eb3141;osVer/30;appBuild/1436;psn/ZcQh/Wov sNYfZ6JUjTIUBu28 KT0T3u|1;psq/24;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 11;osv/11;pv/1.24;jdv/;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/xiaomi;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 11; Mi 10 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.181 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;10;8353636393732346-6646931673935346;network/wifi;model/MI 8;addressid/1969998059;aid/8566972dfd9a795d;oaid/4a8b773c3e307386;osVer/29;appBuild/1436;psn/PhYbUtCsCJo r 1b8hwxjnY8rEv5S8XC|383;psq/14;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/374.14;jdv/0|iosapp|t_335139774|liteshare|CopyURL|1609306590175|1609306596;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/jsxdlyqj09;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;6d343c58764a908d4fa56609da4cb3a5cc1396d3;network/wifi;ADID/4965D884-3E61-4C4E-AEA7-9A8CE3742DA7;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;13.6.1;4606ddccdfe8f343f8137de7fea7f91fc4aef3a3;network/4g;ADID/C6FB6E20-D334-45FA-818A-7A4C58305202;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone10,1;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/5.9;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/8;ads/;psn/4606ddccdfe8f343f8137de7fea7f91fc4aef3a3|5;jdv/0|iosapp|t_335139774|liteshare|Qqfriends|1614206359106|1614206366;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 13.6.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;3b6e79334551fc6f31952d338b996789d157c4e8;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/138051400;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/14.34;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/12;ads/;psn/3b6e79334551fc6f31952d338b996789d157c4e8|46;jdv/0|kong|t_1001707023_|jingfen|e80d7173a4264f4c9a3addcac7da8b5d|1613837384708|1613858760;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;1346235693831363-2373837393932673;network/wifi;model/LYA-AL00;addressid/3321567203;aid/1d2e9816278799b7;oaid/00000000-0000-0000-0000-000000000000;osVer/29;appBuild/1436;psn/45VUZFTZJkhP5fAXbeBoQ0   O2GCB I|7;psq/5;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/5.8;jdv/0|iosapp|t_335139774|liteshare|CopyURL|1614066210320|1614066219;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/huawei;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; LYA-AL00 Build/HUAWEILYA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.3;c2a8854e622a1b17a6c56c789f832f9d78ef1ba7;network/wifi;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone12,5;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.9;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/8;ads/;psn/c2a8854e622a1b17a6c56c789f832f9d78ef1ba7|6;jdv/0|direct|-|none|-|1613541016735|1613823566;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;9;;network/wifi;model/MIX 2S;addressid/;aid/f87efed6d9ed3c65;oaid/94739128ef9dd245;osVer/28;appBuild/1436;psn/R7wD/OWkQjYWxax1pDV6kTIDFPJCUid7C/nl2hHnUuI=|3;psq/13;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 9;osv/9;pv/1.42;jdv/;ref/activityId=8a8fabf3cccb417f8e691b6774938bc2;partner/xiaomi;apprpd/jsbqd_home;eufv/1;Mozilla/5.0 (Linux; Android 9; MIX 2S Build/PKQ1.180729.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.181 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;network/wifi;Mozilla/5.0 (Linux; Android 10; Redmi Note 7 Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.152 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;network/3g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
  'jdltapp;iPad;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPad6,3;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/231.11;pap/JA2020_3112531|3.7.0|IOS 14.4;apprpd/;psn/f5e7b7980fb50efc9c294ac38653c1584846c3db|305;usc/kong;jdv/0|kong|t_1000170135|tuiguang|notset|1613606450668|1613606450;umd/tuiguang;psq/2;ucp/t_1000170135;app_device/IOS;utr/notset;ref/JDLTRedPacketViewController;adk/;ads/;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;13.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone8,1;addressid/669949466;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/9.11;apprpd/;ref/JDLTSubMainPageViewController;psq/10;ads/;psn/500a795cb2abae60b877ee4a1930557a800bef1c|11;jdv/;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,4;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.47;apprpd/;ref/JDLTSubMainPageViewController;psq/8;ads/;psn/21631ed983b3e854a3154b0336413825ad0d6783|9;jdv/0|direct|-|none|-|1614150725100|1614225882;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,4;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.47;apprpd/;ref/JDLTSubMainPageViewController;psq/8;ads/;psn/21631ed983b3e854a3154b0336413825ad0d6783|9;jdv/0|direct|-|none|-|1614150725100|1614225882;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.15;apprpd/;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fchat%2Findex.action%3Fentry%3Djd_m_JiSuCommodity%26pid%3D7763388%26lng%3D118.159665%26lat%3D24.504633%26sid%3D31cddc2d58f6e36bf2c31c4e8a79767w%26un_area%3D16_1315_3486_0;psq/12;ads/;psn/c10e0db6f15dec57a94637365f4c3d43e05bbd48|4;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.15;apprpd/;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fchat%2Findex.action%3Fentry%3Djd_m_JiSuCommodity%26pid%3D7763388%26lng%3D118.159665%26lat%3D24.504633%26sid%3D31cddc2d58f6e36bf2c31c4e8a79767w%26un_area%3D16_1315_3486_0;psq/12;ads/;psn/c10e0db6f15dec57a94637365f4c3d43e05bbd48|4;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.15;apprpd/;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fchat%2Findex.action%3Fentry%3Djd_m_JiSuCommodity%26pid%3D7763388%26lng%3D118.159665%26lat%3D24.504633%26sid%3D31cddc2d58f6e36bf2c31c4e8a79767w%26un_area%3D16_1315_3486_0;psq/12;ads/;psn/c10e0db6f15dec57a94637365f4c3d43e05bbd48|4;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/2813715704;pv/67.38;apprpd/MyJD_Main;ref/https%3A%2F%2Fh5.m.jd.com%2FbabelDiy%2FZeus%2F2ynE8QDtc2svd36VowmYWBzzDdK6%2Findex.html%3Flng%3D103.957532%26lat%3D30.626962%26sid%3D4fe8ef4283b24723a7bb30ee87c18b2w%26un_area%3D22_1930_49324_52512;psq/4;ads/;psn/5aef178f95931bdbbde849ea9e2fc62b18bc5829|127;jdv/0|direct|-|none|-|1612588090667|1613822580;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,1;addressid/3104834020;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/c633e62b5a4ad0fdd93d9862bdcacfa8f3ecef63|6;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/1346909722;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/30.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/40d4d4323eb3987226cae367d6b0d8be50f2c7b3|39;jdv/0|kong|t_1000252057_0|tuiguang|eba7648a0f4445aa9cfa6f35c6f36e15|1613995717959|1613995723;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.3;network/wifi;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/1346909722;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/30.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/40d4d4323eb3987226cae367d6b0d8be50f2c7b3|39;jdv/0|kong|t_1000252057_0|tuiguang|eba7648a0f4445aa9cfa6f35c6f36e15|1613995717959|1613995723;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;13.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,2;addressid/2237496805;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/13.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/48e495dcf5dc398b4d46b27e9f15a2b427a154aa|15;jdv/0|direct|-|none|-|1613354874698|1613952828;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;android;3.7.0;10;network/wifi;model/ONEPLUS A6000;addressid/0;aid/3d3bbb25af44c59c;oaid/;osVer/29;appBuild/1436;psn/ECbc2EqmdSa7mDF1PS1GSrV/Tn7R1LS1|6;psq/8;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/2.67;jdv/0|direct|-|none|-|1613822479379|1613991194;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/oppo;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A6000 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;8.1.0;network/wifi;model/16th Plus;addressid/0;aid/f909e5f2c464c7c6;oaid/;osVer/27;appBuild/1436;psn/c21YWvVr77Hn6 pOZfxXGY4TZrre1 UOL5hcPbCEDMo=|3;psq/10;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 8.1.0;osv/8.1.0;pv/2.15;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/jsxdlyqj09;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 8.1.0; 16th Plus Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045514 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;11;network/wifi;model/Mi 10 Pro;addressid/0;aid/14d7cbd934eb7dc1;oaid/335f198546eb3141;osVer/30;appBuild/1436;psn/ZcQh/Wov sNYfZ6JUjTIUBu28 KT0T3u|1;psq/24;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 11;osv/11;pv/1.24;jdv/;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/xiaomi;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 11; Mi 10 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.181 Mobile Safari/537.36',
  'jdltapp;android;3.7.0;10;network/wifi;model/MI 8;addressid/1969998059;aid/8566972dfd9a795d;oaid/4a8b773c3e307386;osVer/29;appBuild/1436;psn/PhYbUtCsCJo r 1b8hwxjnY8rEv5S8XC|383;psq/14;adk/;ads/;pap/JA2020_3112531|3.7.0|ANDROID 10;osv/10;pv/374.14;jdv/0|iosapp|t_335139774|liteshare|CopyURL|1609306590175|1609306596;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/jsxdlyqj09;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone8,4;addressid/1477231693;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/21.15;apprpd/MyJD_Main;ref/https%3A%2F%2Fgold.jd.com%2F%3Flng%3D0.000000%26lat%3D0.000000%26sid%3D4584eb84dc00141b0d58e000583a338w%26un_area%3D19_1607_3155_62114;psq/0;ads/;psn/2c822e59db319590266cc83b78c4a943783d0077|46;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPhone;3.7.0;14.4;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,3;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/3.49;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/7;ads/;psn/9e0e0ea9c6801dfd53f2e50ffaa7f84c7b40cd15|6;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
  'jdltapp;iPad;3.7.0;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPad7,5;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.14;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/3;ads/;psn/956c074c769cd2eeab2e36fca24ad4c9e469751a|8;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|3.7.0|IOS 14.4;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
]

function USER_AGENT(){
    return USER_AGENTS[Math.floor(Math.random()*USER_AGENTS.length)]
}


/*************第三方私人api******************/
//京东口令解析-wall
function WallDecode(code) {
    let resp = request({
        url: "http://ailoveu.eu.org:19840/jCommand",
        headers: {
            "User-Agent": "Mozilla/5.0 (Linux; U; Android 11; zh-cn; KB2000 Build/RP1A.201005.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 HeyTapBrowser/40.7.19.3 uuid/cddaa248eaf1933ddbe92e9bf4d72cb3",
            "Content-Type": "application/json;charset=utf-8",
            "token": (new Bucket("otto")).get("WALL")
        },
        method: "post",
        dataType: "json",
        body: { "code": code }
    })
    try {
        let data = resp.body
        if (data.code == 200 && typeof(data.data) != "string")
            return data.data
        else
            return null
    }
    catch (err) {
        return null
    }
}

//京东口令解析-Windfgg
function WindfggDecode(code) {
    let data = request({
        url: "http://api.windfgg.cf/jd/code",
        headers: {
            "User-Agent":
                "Mozilla/5.0 (Linux; U; Android 11; zh-cn; KB2000 Build/RP1A.201005.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 HeyTapBrowser/40.7.19.3 uuid/cddaa248eaf1933ddbe92e9bf4d72cb3",
            "Content-Type": "application/json;charset=utf-8",
            "Authorization": "Bearer " + (new Bucket("otto")).get("WindfggToken")
        },
        method: "post",
        dataType: "json",
        body: { "code": code }
    })
    try {
        if (data.code == 200)
            return data.data
        else
            return null
    }
    catch (err) {
        return null
    }
}

//京东口令解析-nolan
function NolanDecode(code) {
    let resp = request({
        url: "https://api.nolanstore.top/JComExchange",
        method: "post",
        body: { "code": code }
    })
    try {
        let data = JSON.parse(resp.body)
        if (data.code == 0)
            return data.data
        else
            return null
    }
    catch (err) {
        return null
    }
}


/****************tg bot API*********************/

const tg_url = (new Bucket("tg")).get("url", "https://api.telegram.org")// ?设置代理地址指令:set tg url ? 默认直连官方服务器

//让tg机器人给在对话id中发送msg(markdown,markdown语法错误会导致发送失败),reply_markup为高级功能,见tg官方文档,无token时使用傻妞所对接的机器人发送
function SendToTG(id, msg,reply_markup,token) {
    let bot_token=token?token:(new Bucket("tg")).get("token")
    let option={
        url: tg_url+"/bot" + bot_token + "/sendMessage",
        method: "post",
        body: {
            "chat_id": id,
            "parse_mode": "Markdown",
            "text": msg
        }
    }
    if(reply_markup)
        option.body["reply_markup"]=reply_markup
    try{
        let resp=request(option)
        if(JSON.parse(resp.body).ok)
            return true
        else{
            console.log("SendToTG failed\n"+resp.body+"\n"+msg)
            delete option.body["parse_mode"]
            return JSON.parse(request(option).body).ok
        }
    }
    catch(err){
        return false
    }
}

function GetFile(id,token){
    let bot_token=token?token:(new Bucket("tg")).get("token")
    let resp=request({
        url: tg_url+"/bot"  + bot_token + "/getFile",
        method: "post",
        body: {
            "file_id": id
        }
    })
    console.log(id+"\n"+bot_token)
    try{
        let temp=JSON.parse(resp.body)
        console.log(resp.body)
        if(temp.ok){
            resp=request(tg_url+"/file/bot" + bot_token + temp.result.file_path)
            return resp.body
        }
    }
    catch(err){
        return false
    }
}

{/tabs-pane}
{/tabs}

Nolan Pro
【免责声明】 本网站大部分软件和资源收集于网络,只做自己私下学习备份使用。所有资源和软件均来自互联网的优秀作者们,版权归原作者或企业所有。