import os import requests import dotenv from urllib import parse def get_token(username, password): """ 利用网页端获取 token :param username: 用户名 :param password: 密码 :return: token """ url = "https://api.winrobot360.com/oauth/token" data = { "username": username, "password": password, "grant_type": "password", "scope": "all", } payload = parse.urlencode(data) headers = { "accept": "application/json", "authorization": "Basic Y29uc29sZTpzVVdpeTZzTmlYZDBlNUxo", "content-type": "application/x-www-form-urlencoded;charset=UTF-8", } response = requests.request("POST", url, headers=headers, data=payload).json() if response.get("success") == "false": raise ValueError(response.get("msg")) return response.get("access_token") def get_activity_info(token, page=1, size=200): """ 获取活动信息列表 :param token: 认证用的 token :param page: 分页页码,默认为 1 :param size: 分页大小,默认为 10 :return: 所有页的数据列表 """ url = "https://api.winrobot360.com/api/v1/robot/activity/package/list" all_data = [] while True: payload = { "source": "market", "page": page, "size": size, "groupInfoUuid": "22222222-2222-2222-2222-222222222222", "marketUiTag": "", "uiaType": "pc", "order": "desc", } headers = { "Authorization": f"bearer {token}", "Accept": "application/json", "Accept-Encoding": "json", } response = requests.get(url, headers=headers, params=payload) response_json = response.json() if not response.ok or not response_json.get("success"): raise ValueError(response_json.get("msg")) data = response_json.get("data") all_data.extend(data) if not data or len(data) < size: break page += 1 return all_data def get_activity_detail(token, package_name, package_version): """ 获取自定义指令的相关信息 :param token: token :param sdk: 自定义指令 :return: package_name, package_url """ url = f"https://api.winrobot360.com/api/v1/robot/use/activity/package/detail?packageName={package_name}&version={package_version}" payload = {} headers = { "Authorization": f"bearer {token}", "Accept": "application/json", "Accept-Encoding": "json", } response = requests.request("GET", url, headers=headers, data=payload) return response.json().get("data") def get_office_app_uuids() -> list: """ 获取官方应用的 uuid, :return: list, 官方应用 uuid """ uuids = [] tmp_list = [] page = 1 url = "https://api.winrobot360.com/api/noauth/v1/group/official/queryOfficialRobotList?page=%s&size=200" page_response = requests.request("GET", url % page) page_info = page_response.json().get("page").get("pages") for item in range(1, page_info + 1): response = requests.request("GET", url % item) for item in response.json().get("data"): # if item.get("robotGradeName") == "简单应用": # continue if item.get("uiTags") == "极速": continue print(item.get("name"), item.get("robotGradeName")) uuids.append(item.get("uuid")) name = item.get("name") uuid = item.get("uuid") return uuids if __name__ == "__main__": dotenv.load_dotenv() xbot_username = os.environ["XBOT_USERNAME"] xbot_password = os.environ["XBOT_PASSWORD"] token = get_token(xbot_username, xbot_password) office_activity_uuids: list = get_activity_info(token) for item in office_activity_uuids: print(item.get("packageViewName"), item.get("uuid"))