1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
| yb = YiBan("15656668696", "mima") # FIXME:账号密码 yb.login() yb.getHome() print("登录成功 %s"%yb.name) yb.auth()
import re import requests import util class YiBan: # CSRF = "sui-bian-fang-dian-dong-xi" # 随机值 随便填点东西 # COOKIES = {"csrf_token": CSRF} # 固定cookie 无需更改 client = "android" referer = "http://power.modsdom.com/sccloudV5/LAB1/Index/Index/index" COOKIES = "" yb_uid = 38205498 HEADERS = {"Origin": "https://c.uyiban.com", "User-Agent": "yiban"} # 固定头 无需更改
def __init__(self, account, passwd): self.account = account self.passwd = passwd self.session = requests.session() self.name = "" self.iapp = ""
def request(self, url, method="get", params=None, cookies=None): if method == "get": req = self.session.get(url, params=params, timeout=10, headers=self.HEADERS, cookies=cookies) else: req = self.session.post(url, data=params, timeout=10, headers=self.HEADERS, cookies=cookies) try: return req.json() except: return None def requestgetdata(self, url, method="get", params=id, headers=""): if method == "get": req = self.session.get(url, params=params, timeout=10, headers=self.HEADERS, cookies=self.COOKIES) else: req = self.session.post(url, data=params, timeout=10, headers=self.HEADERS, cookies=self.COOKIES) try: return req.json() except: return None # 已适配 def login(self): params = { "mobile": self.account, "imei": "0", "password": self.passwd } # 最新不需要加密密码直接登录的接口来自原作者looyeageeB站视频评论用户:破损的鞘翅(bilibili_id:45807603) r = self.request(url="https://mobile.yiban.cn/api/v3/passport/login", params=params) if r is not None and str(r["response"]) == "100": self.access_token = r["data"]["user"]["access_token"] return r else: raise Exception("账号或密码错误") # 已适配 def getHome(self): params = { "access_token": self.access_token, } r = self.request(url="https://mobile.yiban.cn/api/v3/home", params=params) self.name = r["data"]["user"]["userName"] for i in r["data"]["hotApps"]: # 动态取得iapp号 20201117更新 if i["name"] == "池院晨午晚检": self.iapp = re.findall(r"(iapp.*)\?", i["url"])[0] return r
def auth(self): params = { "act": self.iapp[0:10], "v": self.access_token } print() location = self.session.get("http://f.yiban.cn/iapp/index",params=params, allow_redirects=False).headers.get("Location") if location is None: raise Exception("该用户可能没进行校方认证,无此APP权限") verifyRequest = re.findall(r"verify_request=(.*?)&", location)[0]
Cookie = self.session.get("http://power.modsdom.com/sccloudV5/LAB1/Index/login/yibanLogin/customer_id/48/role_tag/TEMP_REPORT?verifyRequest=%s&yb_uid=%s" % (verifyRequest, self.yb_uid), allow_redirects=False).headers.get("Set-Cookie") self.COOKIES = {"PHPSESSID": Cookie[10:-8]} self.HEADERS = { "Host": "power.modsdom.com", "Connection": "keep-alive", "Accept": "application/json, text/plain, */*", "User-Agent": "Mozilla/5.0 (Linux; Android 8.1.0; 16 X Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/65.0.3325.110 Mobile Safari/537.36 yiban_android", "Content-Type": "application/x-www-form-urlencoded", "Referer": "http://power.modsdom.com/sccloudV5/LAB1/Index/Index/index", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,en-US;q=0.9", "X-Requested-With": "com.yiban.app", } self.session.headers.update(self.HEADERS) self.session.cookies.update(self.COOKIES)
customer_id = 48 result_auth1 = requests.get( "http://power.modsdom.com/sccloudV5/index.php/LAB1/User/TempAjax/getMyTempInfo?customer_id=%s" % ( customer_id), headers=self.HEADERS, cookies=self.COOKIES) result_auth = self.request( "http://power.modsdom.com/sccloudV5/index.php/LAB1/User/TempAjax/getMyTempInfo?customer_id=%s" % (customer_id),cookies=self.COOKIES) print(result_auth1.text) data_url = result_auth["data"].get("Data") if data_url is not None: # 授权过期 result_html = self.session.get(url=data_url, headers=self.HEADERS, cookies={"loginToken": self.access_token}).text re_result = re.findall(r'input type="hidden" id="(.*?)" value="(.*?)"', result_html) post_data = {"scope": "1,2,3,"} for re_i in re_result: post_data[re_i[0]] = re_i[1] usersure_result = self.session.post(url="https://oauth.yiban.cn/code/usersure", data=post_data, headers=self.HEADERS, cookies={"loginToken": self.access_token}) if usersure_result.json()["code"] == "s200": return self.auth() else: return False else: return True
def getUncompletedList(self): params = { "CSRF": self.CSRF, "StartTime": util.get_today(), "EndTime": util.get_time() } return self.request("https://api.uyiban.com/officeTask/client/index/uncompletedList", params=params, cookies=self.COOKIES)
def getCompletedList(self): params = { "CSRF": self.CSRF, "StartTime": util.get_7_day_ago(), "EndTime": util.get_time() } return self.request("https://api.uyiban.com/officeTask/client/index/completedList", params=params, cookies=self.COOKIES)
def getTaskDetail(self, taskId): return self.request( "https://api.uyiban.com/officeTask/client/index/detail?TaskId=%s&CSRF=%s" % (taskId, self.CSRF), cookies=self.COOKIES)
def submit(self, data, extend, wfid): params = { "data": data, "extend": extend } return self.request( "https://api.uyiban.com/workFlow/c/my/apply/%s?CSRF=%s" % (wfid, self.CSRF), method="post", params=params, cookies=self.COOKIES)
def getShareUrl(self, initiateId): return self.request( "https://api.uyiban.com/workFlow/c/work/share?InitiateId=%s&CSRF=%s" % (initiateId, self.CSRF), cookies=self.COOKIES)
|