Fujj 发表于 2022-4-6 08:56

青龙面板一些公用方法的封装……

本帖最后由 Fujj 于 2022-4-6 09:03 编辑


封装了青龙版面的一些方法:

get_token():获取token;
match_ck():比对ck进行更新,如果未启用,进行启用;
get_all_ck():获取青龙面板的所有变量(ck);
update_ck():更新青龙面板的单个变量(ck);
add_ck():添加变量(ck);
start_ck():启用变量(ck);

#更新到青龙面板

import requests
import json
import re
import time
import configparser

class Update():

    def __init__(self,ck=None,phone=None):
      #青龙面板地址、账号密码
      conf = configparser.ConfigParser()
      conf.read("./config.ini", encoding='UTF-8')
      self.host = conf["ql"].get('host')
      self.client_id = conf["ql"].get('client_id')
      self.client_secret = conf["ql"].get('client_secret')
      self.ck = ck
      self.token = self.get_token()
      self.phone = phone


    def get_token(self):
      url = self.host + "open/auth/token?client_id={}&client_secret={}".format(self.client_id,self.client_secret)
      response = requests.request("GET", url).json()
      print("获取青龙面板的token:",response)
      return response["data"]["token"]

    # 比对ck进行更新,如果未启用,进行启用
    def match_ck(self):
      pt_pin = str(re.findall(r"pt_pin=(.+?);", self.ck))
      print("手机号码{}的pt_pin:".format(self.phone),pt_pin)
      cklist = self.get_all_ck()
      for i in cklist:
            if pt_pin in str(i["value"]):
                print("匹配成功,匹配到当前变量:",i)
                id = i["_id"]
                remark = i["remarks"]
                print("-------------------")
                print("开始更新{}的ck".format(remark))
                self.update_ck(remark,id)
                if i["status"] == 1:
                  print("{}启用成功".format(remark))
                  self.start_ck(id)
                return
      self.add_ck()
      print("新增{}手机号码的ck".format(self.phone))
      return

    # 获取所有的变量
    def get_all_ck(self):
      t = int(round(time.time() * 1000))
      url = self.host + "open/envs?searchValue=&t="+str(t)
      payload = ""
      headers = {
            'Authorization': 'Bearer '+self.token
      }
      response = requests.request("GET", url, headers=headers, data=payload).json()
      print("获取青龙面板所有的变量进行比对")
      return response["data"]

    # 更新变量
    def update_ck(self,remark=None,id=None):
      t = int(round(time.time() * 1000))
      url = self.host+"open/envs?t="+str(t)
      payload = json.dumps({
            "name": "JD_COOKIE",
            "value": self.ck,
            "remarks": remark,
            "_id": id
      })
      headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer '+self.token
      }
      print("更新变量")
      response = requests.request("PUT", url, headers=headers, data=payload)
      return


    def add_ck(self):
      t = int(round(time.time() * 1000))
      url = self.host+"open/envs?t="+str(t)
      payload = json.dumps([
            {
                "value": self.ck,
                "name": "JD_COOKIE",
                "remarks": self.phone
            }
                ])
      headers = {
            'Authorization': 'Bearer '+self.token,
            'Content-Type': 'application/json'
      }
      print("添加变量")
      response = requests.request("POST", url, headers=headers, data=payload)
      return


    def start_ck(self,id):
      t = int(round(time.time() * 1000))
      url = self.host+"open/envs/enable?t="+str(t)
      print(id)
      list=[]
      list.append(id)
      payload = json.dumps(
            list
      )
      headers = {
            'Authorization': 'Bearer '+self.token,
            'Content-Type': 'application/json'
      }
      print("启用ck:",payload)
      response = requests.request("PUT", url, headers=headers, data=payload)
      return






使用方法:
if __name__ == '__main__':

    ck = 'pt_key=33JiC5lOADBAJIqAX8UDhNHkh_qypfyAyQkqWu5ADdZgHkudbNtdlSkBEOIMxO73oT_npf__Hvc;pt_pin=jd_67r828540e7yd;'   

    如果知道手机号码,可以传phone作为标记,不然账号太多会比较乱
    Update(ck=ck).match_ck()




kissboss 发表于 2022-4-6 09:38

我青龙就跑了个京东 现在豆子一天才十几二十个

Fujj 发表于 2022-4-6 13:19

山河破碎风飘絮i 发表于 2022-4-6 12:58
请问一下这些接口是从哪里得知的呢? 青龙的官方那边有文档提供吗?还是其他什么东西,最近需要用到一些这 ...

接口都是自己抓包的,但是青龙介绍了接口的使用方法:

OpenApi使用指南

1. 在系统设置 -> 应用设置 -> 添加应用,权限目前支持5个模块,可以选择多个模块。选择一个模块之后,可读写此模块的所有接口。
2. 使用生成的 client_id 和 client_secret 请求获取token接口 http://localhost:5700/open/auth/token?client_id=xxxxxx&client_secret=xxxxxxxx
3. 上面接口返回的token有效期为30天,可用于请求青龙的接口 curl 'http://localhost:5700/open/envs?searchValue=&t=1630032278171' -H 'Authorization: Bearer 接口返回的token'
4. openapi的接口与系统正常接口的区别就是青龙里的是/api/envs,openapi是/open/envs,即就是青龙接口中的api换成open
6. 此功能支持青龙2.9+,更新时需要执行一次ql check

大大连连 发表于 2022-4-6 09:06

eskyboy 发表于 2022-4-6 09:22

学习下,很厉害的样子

laycher 发表于 2022-4-6 09:22

通过命令行操作青龙面板?

cn449712926 发表于 2022-4-6 09:35

谢谢分享 可以学习下

向大佬学习 发表于 2022-4-6 09:42

感谢楼主分享,学习学习

AiChiShuCai 发表于 2022-4-6 09:45

感谢分享。

yx159247 发表于 2022-4-6 09:56

谢谢大佬分享, 来学习下

AE86august 发表于 2022-4-6 10:28

最近一天就二三十豆,没玩的欲望了
页: [1] 2 3
查看完整版本: 青龙面板一些公用方法的封装……