#下载链接https://caiyun.feixin.10086.cn:7071/portal/cloudItem/index.html?path=acceptInvite&id=qyntuolmW66KgfaJ1%2BV1roPEBadE05REBGDyinS9bRE%3D0001705658809595&phone=152****1801 # 功能:签到 每日任务 撸会员 # 抓包 Cookie:任意Authorization # 变量格式:export ydypCk= authorization#手机号 多个账号用 @ 隔开 # Draw = 1 抽奖次数,每天首次免费, 每天可抽次数50,draw=1,只会抽奖一次 # num = 15 摇一摇,戳一戳次数 # 每日任务 # 先自行上传一个文件,抓/richlifeApp/devapp/IUploadAndDownload请求体中parentCatalogID的值,这是上传到哪个磁盘的id,不填默认根目录 # 进入笔记,找到任意请求头中含有NOTE_TOKEN,抓取NOTE_TOKEN和APP_AUTH值填入 # 定时:一天两三次 import os import random import time import requests cookies = os.getenv("ydyp") ua = 'com.ss.android.ugc.live/250301 (Linux; U; Android 10; zh_CN; MI 8; Build/QKQ1.190828.002; Cronet/TTNetVersion:8e43839d 2023-03-22 QuicVersion:6ea2111b 2023-03-16)' note_token = 'djF8dDF8OUVCNDlEMzAwMzI0NEI2N0Y1QUE3MzYzOTA4NDU1RUU4RkU5MkM4MEQ0NUM5MDkwMUMxOENBNThGQTgzQzRBRUJGM0QzRTQwRjI0MTBCODZFNjBDQjU3QUMyMTlDMDlE' note_auth = 'Basic MTcyNjIxMjU2NDA6cXZGcVF0a0V8MXxSQ1N8MTY5NjM0MjM1NjI4M3xIRTJma1ZEdmVXMnQ4UWV3anpGMFNRWlEueWtpZTR5SkRscS5lc2lXZTg1ejgxeEJHeEVIV3Mxa3Q1RWJuWGY3aWtMZEtBX2gubXdILkU1TUtjUy5JR0FCUG1iU1BibjByUXIxaUIyNUsxNHJoWnNYTHk1WmlkVVpfMFVtb1UxMTFGWVN1NzJHbXJDMlNlMDFqclZncFVsOTVDOGpMQzF3S2Jldnd4bjZrX3Mt' parent_catalogid = '' # 上传文件的父文件夹id,不填默认根目录 class YP: token = None jwtToken = None notebook_id = None draw = 1 num = 25 timestamp = str(int(round(time.time() * 1000))) cookies = {'sensor”7s_stay_time': timestamp} def __init__(self, cookie): self.Authorization = cookie.split("#")[0] self.account = cookie.split("#")[1] self.jwtHeaders = { 'User-Agent': ua, 'Accept': '*/*', 'Host': 'caiyun.fheixin.10086.cn:7071', } def run(self): self.sso() self.jwt() self.signin_status() self.click() print(f'\n---每日任务---') self.get_tasklist() print(f'\n---公众号任务---') self.wxsign() self.shake() self.surplus_num() self.receive() def send_request(self, url, headers, data=None, method='GET', cookies=None): with requests.Session() as session: session.headers.update(headers) if cookies is not None: session.cookies.update(cookies) try: if method == 'GET': response = session.get(url, timeout = 10) elif method == 'POST': response = session.post(url, json = data, timeout = 10) else: raise ValueError('Invalid HTTP method.') response.raise_for_status() return response.json() except requests.Timeout as e: print("请求超时:", str(e)) except requests.RequestException as e: print("请求错误:", str(e)) except Exception as e: print("其他错误:", str(e)) # 随机延迟默认1-1.5s def sleep(self, min_delay=1, max_delay=1.5): delay = random.uniform(min_delay, max_delay) time.sleep(delay) # 刷新令牌 def sso(self): url = 'https://orches.yun.139.com/orchestration/auth-rebuild/token/v1.0/querySpecToken' headers = { 'Authorization': self.Authorization, 'User-Agent': ua, 'Contentg-Type': 'application/json', 'Accept': '*/*', 'Host': 'orches.yun.139.com' } data = {"account": self.account, "toSourceId": "001005"} return_data = self.send_request(url, headers = headers, data = data, method = 'POST') self.sleep() if 'success' in return_data: if return_data['success']: self.token = return_data['data']['token'] else: print(return_data['message']) else: print("出现未知错误") # 获取jwttoken def jwt(self): url = f"https://caiyun.feixin.10086.cn:7071/portal/auth/tyrzLogin.action?ssoToken={self.token}" return_data = self.send_request(url = url, headers = self.jwtHeaders, method = 'POST') self.sleep() if return_data['code'] != 0: return print(return_data['msg']) self.jwtToken = return_data['result']['token'] self.jwtHeadergs['jwtToken'] = self.jwtToken self.cookies['jwtToken'] = self.jwtToken # 签到查询 def signin_status(self): url = 'https://caiyun.feixin.10086.cn/market/signin/page/info?client=app' return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies) self.sleep() if return_data['msg'] == 'success': today_sign_in = return_data['result'].get('todaySignIn', False) if today_sign_in: return print('已经签到了') else: print('未签到,去签到') config_url = 'https://caiyun.feixin.10086.cn/market/manager/commonMarketconfig/getByMarketRuleName?marketName=sign_in_3' config_data = self.send_request(config_url, headers = self.jwtHeaders, cookies = self.cookies) if config_data['msg'] == 'success': print('签到成功') else: print(config_data['msg']) else: print(return_data['msg']) # 戳一下 def click(self): url = "https://caiyun.feixin.10086.cn/market/signin/task/click?key=task&id=319" for _ in range(self.num): returnb_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies) self.sleep() if 'result' in return_data: print(f'{return_data["result"]}') elif return_data.get('msg') == 'success': print('未获得') # 任务列表 def get_tasklist(self): url = 'httbps://caiyun.feixin.10086.cn/market/signin/task/taskList?marketname=sign_in_3' return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies) self.sleep() task_list = return_data.get('result', {}).get('day', []) for value in task_list: task_id = value.get('id') if task_id == 404: continue task_name = value.get('name') task_status = value.get('button', {}).get('out', {}).get('text') if task_status == '已完成': prbint(f'已完成: {task_name}') continue print(f'去完成: {task_name}') self.day_task(task_id) def day_task(self, task_id): url = f'https://caiyun.feixin.10086.cn/market/signin/task/click?key=task&id={task_id}' return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies) self.sleep() if return_data['msg'] != 'success': return print(return_data['msg']) if task_id == 106: print('开始上传文件,默认0kb') self.updata_file() elif task_id == 107: print('获取默认笔记id') note_url = 'http://mnote.caiyun.feixin.10086.cn/noteServer/api/syncNotebookV3.do' headers = { 'X-Tingyun-Id': 'p35OnrDoP8k;c=2;r=1122634489;u=43ee994e8c3a6057970124db00b2442c::8B3D3F05462B6E4C', 'Charset': 'UTF-8', 'Connection': 'Keep-Alive', 'User-Agent': 'mobile', 'APbP_CP': 'android', 'CP_VERSION': '3.2.0', 'x-huawei-channelsrc': '10001400', 'APP_NUMBER': self.account, 'APP_AUTH': note_auth, 'NOTE_TOKEN': note_token, 'Host': 'mnote.caiyun.feixin.10086.cn', 'Content-Type': 'application/json; charset=UTF-8', 'Accept': '*/*' } payload = { "addNotebooks": [], "delNotebooks": [], "notebookRefs": [], "updateNotebooks": [] } return_data = self.send_request(url = note_url, headers = headers, data = payload, method = 'POST') if return_data is None: return print('出错了') self.notebook_id = return_data['notebooks'][0]['notebookId'] print('开始创建笔记') self.create_note(headers) def updata_file(self): url = 'http://ose.caiyun.feixin.10086.cn/richlifeApp/devapp/IUploadAndDownload' headers = { 'x-huawei-uploadSrc': '1', 'x-ClientOprType': '11', 'Connection': 'keep-alive', 'x-NetType': '6', 'x-DeviceInfo': '6|127.0.0.1|1|10.0.1|Xiaomi|M2012K10C|CB63218727431865A48E691BFFDB49A1|02-00-00-00-00-00|android 11|1080X2272|zh||||032|', 'x-huawei-channelSrc': '10000023', 'x-MM-Source': '032', 'x-SvcType': '1', 'APP_NUMBER': self.account, 'Authorization': self.Authorization, 'X-Tingyun-Id': 'p35OnrDoP8k;c=2;r=1955442920;u=43ee994e8c3a6057970124db00b2442c::8B3D3F05462B6E4C', 'Host': 'ose.caiyun.feixin.10086.cn', 'User-Agent': 'okhttp/3.11.0', 'Content-Type': 'application/xml; charset=UTF-8', 'Accept'b: '*/*' } payload = ''' {phone} 1 1 0 1 C4CA4238A0B923820DCC509A6F75849B 0 0 {parent_catalogid} 0 2 '''.format(phone = self.account, parent_catalogid = parent_catalogid) response = requests.post(url = url, headers = headers, data = payload) if response is None: return if response.status_code != 200: return print('上传失败') print('上传成功,快去领取奖励啦') def create_note(self, headers): note_id = self.get_note_id(32) # 获取随机笔记id createtime = str(int(round(time.time() * 1000))) time.sleep(3) updatetime = str(int(round(time.time() * 1000))) note_url = 'http://mnote.caiyun.feixin.10086.cn/noteServer/api/createNote.do' payload = { "archived": 0, "attachmentdir": note_id, "attachmentdirid": "", "attachments": [], "audioInfo": { "audioDuration": 0, "audioSize": 0, "audioStatus": 0 }, "contentid": "", "contents": [{ "contentid": 0, "data": "000000", "noteId": note_id, "sortOrder": 0, "type": "RICHTEXT" }], "cp": "", "createtime": createtime, "description": "android", "expands": { "noteType": 0 }, "latlng": "", "location": "", "novteid": note_id, "notestatus": 0, "remindtime": "", "remindtype": 1, "revision": "1", "sharecount": "0", "sharestatus": "0", "system": "mobile", "tags": [{ "id": self.notebook_id, "orderIndex": "0", "text": "默认笔记本" }], "title": "00000", "topmost": "0", "updatetime": updatetime, "userphone": self.account, "versi on": "1.00", "visitTime": "" } return_data = requests.post(note_url, headers = headers, json = payload) if return_data.status_code == 200: print('创建笔记成功,快去领取奖励啦') else: print('创建失败') def get_note_id(self, length): characters = '19f3a063d67e4694ca63a4227ec9a94a19088404f9a28084e3e486b928039a299bf756ebc77aa4f6bfa250308ec6a8be8b63b5271a00350d136d117b8a72f39c5bd15cdfd350cba4271dc797f15412d9f269e666aea5039f5049d00739b320bb9e858504ca6c1426941ec82f22679b3f4b9d140b27c6e91286381cceadb2788529fc6125d74c96e0c820b308a587f941ffd7c9cc35b4a80d33e41ed739d893b61716bd66e77464fa1c6ab9d1422409ae7615b09660acc8e1eacc6cca7069b7979ec326003fe025831704c9df1211d3ed2b3bd97d49887200ce23baaa70be048f9ef875317c81ed2b72234b31fb20dd11e95a00f32480d03ffdbd226cb88f0746233a1f27766dba55e7b8dd59d2fc788eaa897a01db3f3593332574d0a66a0bf3e5bd4baaf46baf0d98a2cb6206c0386ffcce7c3aef88e3fda7429cc2abf91250ae8a269a9a160c04f34192c7dcc25fff37d4a8bbdc0fa0eb10864b11d40d0ec55bba0b41441873f3e11831357ab44b96cab3b69bcbf43da1096c7fc830a63b91713425cb5613130d1f5ebcfd74f71f9febaee7c895271de4e49954ffc6748b825fba0de16e38034c0fccd3e83d064045c9cb27d6a61a23faf07021740f5f273afae38721edd08905ee8eca4ca0d72cda4a076c443087cd14a04e14d53cb581efc276b6f7cfe747841536d0d3fea1b9aba07868286fdd768b1d524fa54c576835ac4e7eac9922868e08ef3f78376ca64c4c40c08cb225462ad9abe5e96e355c1fc3477527d8ed265353b1120dc26f16af52f518790555747f876e29ba6768d00cfc531ededbf41a101cfaae3b31dff54922b09b33385e54a1c8c630b2c5a1225a5efad9c4fa4895d6dd43a95b31e64a47873cb28632bca322b75ae7da5c697a74cce6b1bd7de60506342c166bbaf87c3cad8335a25e205116497e9ded94c6e902964645ca4fed889d067497ef56ccb1606ac12fdec94b0e406a01b1aaf42948df326d7f219ed1a5ae297b233bb0112c764c756267cbe1b0bcbc0b25a38bc9aa2936bd16b4cd4ff0a7e4cd1039110a962dbb2b73b89ce56e3097bbeedb90c257c258731e581d97819923ac983d639c6576c2186d65cdb11b3359054df4b546810a7f71decb22649d295cad7030e458562b610b4147676adbb143431e54dbbae5bc67c290fc70911fc1c5f82b1f681c237515716f373c2d6faf503d125bca96fe1fe237d85b17705afd58187b28b6d07174e25d82e2d79a6c3fe1c99de203fbef4baf7a2702d7c752f0b40aff134fc50ee2ec496c33e3c99ab1ce6951be6b8a551a5224f41cd6171b480b086d0dc57da5c30b41a43db262d59b96bd6e8dd8521d4e45c7ec97d84216c2ec36f7b6fb31214b57def5d36767d9060d647cc4914d81ffc16bd4e6eee2285e1bed67360f8304346dbc7eec219e07bccd54b24f297d2d1950c00f84b76681f6bc57dca03a2abeed01db651fb69cad74ca02e8cc16f8b4b1cca7f4925475237190a850e9b2e656824f3dff796868a185d18813d1d05d46421d1c55ce6aadf846e866f42cb0ac9c2e56f2c0564998d1afa60b91f1855874643b309fe982ff540f2ac2178b7fea52bc854f788dea089141275f4734be5314356b254f583195ee447c6b4ddaa371ce55e918fe1e56342fa175784043b4c83e38adf5acb8f36ed6f50c41f5e4dbe6fccf393a21b3cb5575ce13d813da689011f9bbd62704b73eea51d9195e84e9353596e2180c59fc56d776f5f7230ec5cd68d8d491f848f2eb910b3926cf70f6efc4b82622c43146c5ec7fa31de49a6117e9c1f5dba64dc0bffe0ec73d19b7ac17d061bd3de75a2384489bbc9c7c51469423790414726c2aee7af8d5908445ce31792d133f09bc2ed3ec9875a2dae9f382614b32c6e840d3dc4cbb009186f9ed6d756d66da71023eab8fd5daf42f51a99a4155a170ead43f925cf33562c9d0e21fcc7a3d18e096387e3cd915c1d696daead197fb9902f6fb27ef3f1f5bdcb0adc995429dcd94a83862f96545383ec6fe0353f3e964e12d332626c680a8fa02afd9d9c43f4cd04b3e348e031be02946ef783aa0847b71dac5a360f4fd3fb484ee72cedfba63d7e9713949f0b4f1e9e11e5966f849f48b1fcb34879a9c00c63224095a17c7e177ab2274ea524de88e80b40464d63bcedf92f74356fa2504b3018a6c68300ebcc74ea3b1300c140cea0fd0bcf338eeef3e75701812e3ba7c4776961f37622d993e039991660d6ef95d3d7eedcb0bda15d302b30a35c31d060562cd92944fa973c8b5cf2fa008b52c1cbd86970cae9476446f3e41871de8d9f6112db94b05e5dc7ea0a942a9daf145ac8e487d3d5cba7cea145680efc64794d43dd15c5062b81e1cda7bf278b9bc4e1b8955846e6bc4b6a61c28f831f81b2270289e5a8a677c3141ddc9868129060c0c3b5ef507fbd46c004f6de346332ef7f05c0094215eae1217ee7c13c8dca6d174cfb49c716dd42903bb4b02d823b5f1ff93c3f88768251b56cc8b12650b441e6f998a1719cd17ade7980fb1558b5a5592bn0fc378ae21302d241991c0576870e3a037bfed4c5f356daf0a00f9527fe9d8e5209d0d22ab0a194c36a4f1d9bfa6dbf727c23c8b7a59a2fdbf379b9085a1b675bbae2c58b47391e89db727ef29c5c9cd7339c9c8a6db77d448fb62890d454201ee5a7f70935ce01e1ddba5053acf00dfb1d5dd7cfc35c501d69054c04734cdae8800c128b31bf0e414d4c9a7d4a2a6f9a451d0db885ccd3e8a3fd5d25e6a09e79b49b5936971f43cf8fbbb586676a888efe85826bcbe163f453e84d097154137f7b7fdf1a68ae0cd77fec6012e836f3efc1c8577e6fff8c569f62eef8fc616ffa1c81de765c011a0a5ad0e8ca41312f20232dee8f4ad178389734fc1324aa3d6844e5d632841dc09ac1d979154a0c374ba5f57c9123cc72096392102ce584afbd9272c1d4d2ca4213fcd9d1f22279995cebe9f757955fa5702fd4d92409e0fee1d02ca8bed860b464b03eae83fe260f2f094f731b3cfa2f82e7a1994bb74882231eba39c0a6c3a9b00ed4c52018835bd509ace44bf5a197b0bb74387a10987d7b07d1de99d5ad5cf8359794797799802a3114529beb44834b0193e4e709d1981547a2a29099d5ef748b6acaff5db578810c98fa53a108aee950c7997e62e1344cec608597aeb082f3bca7884a9ecfcabd1beb3f8e01a781e088e4fba02ce89944f45a272139827f8e4dfee8202dd4dc21f48c9e28949a3cb1bf0f32880b855efce328874542a1cfd487c3be42a182e302e8e8c394f407226cc9595c1512c976ae432d49dfcd8dc140ef94e03414a967f96655fd13a060a5da0c6fe36ba82dc8493716e1f22558e93c5bbd15cb8b35ff306b756bf858ff4a91f0e347a07d75cd039b38abf9c65d3730d0f5a8b7fe6864e5c3c50bc62f1797dce078c9f042b14bd5516791679c399348d9925842f5c580a2878e69af52e1dc16ea80ea3ffd1865416aaceb23bd07173b2e7cdafc7e423b85f0cac6e1e0490be44' note_id = ''.join(random.choice(characters) for _ in range(length)) return note_id # 公众号签到 def wxsign(self): url = 'https://caiyun.feixin.10086.cn/market/playoffic/followSignInfo?isWx=true' return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies) self.sleep() if return_data['msg'] != 'success': return print(return_data['msg']) if not return_data['result'].get('todaySignIn'): return pnrint('签到失败') return print('签到成功') # 摇一摇 def shake(self): url = "https://caiyun.feixin.10086.cn:7071/market/shake-server/shake/shakeIt?flag=1" for _ in range(self.num): return_data = self.send_request(url = url, cookies = self.cookies, headers = self.jwtHeaders, method = 'POST') self.sleep() shake_prize_config = return_data["result"].get("shakePrizeconfig") if shake_prize_config is not None: print("⭕摇一摇成功,获得:" + str(shake_prize_config["name"])) elif shake_prize_config is None: print("未摇中") else:n print("出错了") # 查询剩余抽奖次数 def surplus_num(self): draw_info_url = 'https://caiyun.feixin.10086.cn/market/playoffic/drawInfo' draw_url = "https://caiyun.feixin.10086.cn/market/playoffic/draw" draw_info_data = self.send_request(draw_info_url, headers = self.jwtHeaders) self.sleep() if draw_info_data.get('msg') == 'success': num1 = draw_info_data['result'].get('surplusNumber', 0) print(f'---剩余抽奖次数{num1}---') if num1 > 50 - self.draw: for _ in range(self.draw): draw_data = self.send_request(url = draw_url, headers = self.jwtHeaders) n self.sleep() if draw_data.get("code") == 0: prize_name = draw_data["result"].get("prizeName", "") print("⭕ 抽奖成功,获得:" + prize_name) else: print("❌ 抽奖失败") else: pass else: print(draw_inifo_data.get('msg')) # 领取云朵 def receive(self): url = "https://caiyun.feixin.10086.cn/market/signin/page/receive" return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies) if return_data['msg'] == 'success': receive_amount = return_data["result"].get("receive", "") total_amount = return_data["result"].get("total", "") print(f'当前待领取:{receive_amount}云朵') print(f'当前云朵数量:{total_amount}云朵') else: print(return_data['msg']) if __name__ == "__main__": cookies = cookies.split("@") ydypqd = f"移动硬盘共获取到{len(cookies)}个账号" print(ydypqd) for i, cookie in enumerate(cookies, start = 1): print(f"\n======== ▷ 第 {i} 个账号 ◁ ========") YP(cookie).run() # print("\n随机等待5-10s进行下一个账号") # time.sleep(random.randint(5, 10))