网站内页做友链,wordpress 菜单添加图标,长春网络建设公司,开发一个网站需要多少人作者 | 阿文来源 | 程序人生(ID: coder_life)我什么要做这个事情去年单位体检查出问题来#xff0c;经过穿刺手术确诊是个慢性肾脏病2期#xff0c; IGA 肾病三期#xff0c;可能大家对于这个病并不是很了解#xff0c;但是另外一个词可能大家都听过#xff0c;叫尿… 作者 | 阿文来源 | 程序人生(ID: coder_life)我什么要做这个事情去年单位体检查出问题来经过穿刺手术确诊是个慢性肾脏病2期 IGA 肾病三期可能大家对于这个病并不是很了解但是另外一个词可能大家都听过叫尿毒症。慢性肾脏病分五期终末期就是尿毒症。慢性肾脏病非常隐秘并且病情进展缓慢一般到尿毒症需要0-20年时间如果不是体检化验尿液看里面的隐血和尿蛋白指标根本没任何感觉。三甲医院人满为患挂号跟春运买火车票一样的很麻烦。所以我打算用程序员的方式来解决挂号这件事。实现自动挂号代码于是就自己通过 Charles 抓包分析了医院的 App 的请求这里是分析浙江大学第一附属医院的 App然后用 Python 写了个脚本去模拟登录医院的 App 然后去挂号具体代码如下import requestsimport jsonimport timeimport datetimefrom dateutil.relativedelta import relativedelta# 登录获取session_iddef login(username,password): url https://zyyy.zwjk.com/api/exec.htm data {api_Channel:1,client_version:3.6.6,app_id:zyyy_android,app_key:xxxx,user_type:0,client_mobile:863008041030718,api_name:api.user.user.login.info,params:{phone:username, # 账号psw:password}, # 密码 } headers {Content-Type: application/x-www-form-urlencoded,User-Agent: health,Host: zyyy.zwjk.com,Connection: Keep-Alive,Accept: application/xml,application/xhtmlxml,text/html;q0.9,text/plain;q0.8,image/png,*/*;q0.5,cache-control: no-cache, } response requests_session.post( url, data{requestData:json.dumps(data)}, headersheaders)if response.status_code ! 200:return False resp_json response.json() session_id resp_json[return_params][user_model][session_id]return session_id# 获取挂号信息def get_doctor_info(session_id,appointment_date): url https://zyyy.zwjk.com/api/exec.htm payload {api_Channel:1,client_version:3.6.6,app_id:zyyy_android,app_key:xxxx,user_type:0,client_mobile:863008041030718,api_name:api.yygh.expert.schedule.list,params:{type_id:1,source_id:12,dept_id:26,page_no:1,page_size:2147483647 },session_id:session_id} headers {Content-Type: application/x-www-form-urlencoded,User-Agent: health,Host: zyyy.zwjk.com,Connection: Keep-Alive,Accept: application/xml,application/xhtmlxml,text/html;q0.9,text/plain;q0.8,image/png,*/*;q0.5,cache-control: no-cache, } response requests_session.post(url, data{requestData:json.dumps(payload)}, headersheaders)if response.status_code ! 200:return False resp_json response.json() return_params resp_json[return_params][list]for key in return_params:if int(key[date]) int(appointment_date): doctor_info key[doctor]for i in doctor_info:if i[id] 1960 and i[schedulList][0][am_pm_flag] 1:return Truedef get_time(session_id): pre_date (time_now datetime.timedelta(days7)).strftime(%Y-%m-%d) url https://zyyy.zwjk.com/api/exec.htm payload {api_Channel: 1,client_version: 3.6.6,app_id: zyyy_android,app_key: xxxx,user_type: 0,client_mobile: 863008041030718,api_name: api.yygh.remain.num,params: {sourceId: 12,planId: 9759,orderDate: str(pre_date),ampmFlag: 1 },session_id: session_id } headers {Content-Type: application/x-www-form-urlencoded,User-Agent: health,Host: zyyy.zwjk.com,Connection: Keep-Alive,Accept: application/xml,application/xhtmlxml,text/html;q0.9,text/plain;q0.8,image/png,*/*;q0.5,cache-control: no-cache, } response requests_session.post(url, data{requestData: json.dumps(payload)}, headersheaders)if response.status_code ! 200:return False resp_json response.json() regno resp_json[return_params][list][0][regno] timespan resp_json[return_params][list][0][timespan]return [regno,timespan]# 在指定时间挂号def set_doctor_number(session_id,pre_date,reg_no,timeregion): url https://zyyy.zwjk.com/api/exec.htm payload {api_Channel: 1,client_version: 3.6.6,app_id: zyyy_android,app_key: Zxxxx,user_type: 0,client_mobile: 863008041030718,api_name: api.yygh.expert.reservation,params: {card_no: xxxx, # 社保卡号doct_name: 华佗, # 专家名称user_name: xxx, # 你的姓名id_card: xxxxx, # 身份证号phone: xxxx, # 电话reg_id: xxxx,reg_no: reg_no, # 预约号dept_name: 科室,yuanqu_type: 1,type: 1,dept_id: 103060302,pre_date: str(pre_date), #预约日期week_day: 3, # 预约日期是星期几plan_id: 9759,fee: 14,pre_time_type: 1,doct_id: 1960,clinic_fee: ,clinic_time:timeregion },session_id: str(session_id) } headers {Content-Type: application/x-www-form-urlencoded,User-Agent: health,Host: zyyy.zwjk.com,Connection: Keep-Alive,Accept: application/xml,application/xhtmlxml,text/html;q0.9,text/plain;q0.8,image/png,*/*;q0.5,cache-control: no-cache, } response requests_session.post(url, data{requestData: json.dumps(payload)}, headersheaders)if response.status_code ! 200:return False resp_json response.json() ret_info resp_json[return_params][ret_info] send_message_wchat(浙一预约挂号结果,ret_info)# 发送消息到微信def send_message_wchat(title, content): loging_datetime time.strftime(%Y-%m-%d %H:%M:%S, time.localtime()) url https://sc.ftqq.com/SCU9051Tc94a746xxxf1d559xxx5a545ff.send querystring {text: title, desp: str(loging_datetime) str(content)} response requests.request(GET, url, paramsquerystring)if response ! 200:returnreturn Trueif __name__ __main__: requests_session requests.Session() time_now datetime.datetime.now() pre_date (time_nowdatetime.timedelta(days7)).strftime(%Y%m%d) session_id login(xxxx,xxxxxx)if get_doctor_info(session_id,pre_date): regno get_time(session_id)[0] timespan get_time(session_id)[1] set_doctor_number(session_id,pre_date,regno,timespan)else: send_message_wchat(浙一预约挂号结果,获取列表失败,可能原因:医生不在预约列表中或者医生门诊不在上午)然后写个计划任务每个月的第一个周三去执行脚本0 15 1-7 * * if [ date %w 3 ]; then /usr/bin/python3 /opt/hospital/zheyi.py;fi执行脚本后结果命令行式输出化验单到 markdown 文件中我觉得查询化验报告的功能不好用每次都要登录App 然后输入姓名和医嘱号才能查询。我希望对自己的病情做个管理把每次的化验结果都保存起来进行分析于是就实现只要输入医嘱号就自动输出 markdown 格式的文档里面包含一张表格如图所示代码如下import requestsimport jsonrequests_session requests.Session()def login(username,password): url https://zyyy.zwjk.com/api/exec.htm data {api_Channel:1,client_version:3.6.6,app_id:zyyy_android,app_key:ZW5sNWVWOWhibVJ5YjJsaw,user_type:0,client_mobile:863008041030718,api_name:api.user.user.login.info,params:{phone:username, # 账号psw:password}, # 密码 } headers {Content-Type: application/x-www-form-urlencoded,User-Agent: health,Host: zyyy.zwjk.com,Connection: Keep-Alive,Accept: application/xml,application/xhtmlxml,text/html;q0.9,text/plain;q0.8,image/png,*/*;q0.5,cache-control: no-cache, } response requests_session.post( url, data{requestData:json.dumps(data)}, headersheaders)if response.status_code ! 200:return False resp_json response.json() session_id resp_json[return_params][user_model][session_id]return session_iddef get_huayan_save(session_id,username, barcode): url https://zyyy.zwjk.com/api/exec.htm payload {api_Channel: 1,client_version: 3.6.6,app_id: zyyy_android,app_key: ZW5sNWVWOWhibVJ5YjJsaw,user_type: 0,client_mobile: 863008041030718,api_name: api.assay.report.socket,params: {name: username,barcode: barcode},session_id: session_id } headers {Content-Type: application/x-www-form-urlencoded,User-Agent: health,Host: zyyy.zwjk.com,Connection: Keep-Alive,Accept: application/xml,application/xhtmlxml,text/html;q0.9,text/plain;q0.8,image/png,*/*;q0.5,cache-control: no-cache, } response requests_session.post(url, data{requestData: json.dumps(payload)}, headersheaders)if response.status_code ! 200:return False resp_json response.json()if resp_json[return_params][ret_code] -1:return resp_json[return_params][ret_info] file_name resp_json[return_params][assayreport][test_name] username resp_json[return_params][assayreport][name] sample_type resp_json[return_params][assayreport][sample_type] report_barcode resp_json[return_params][assayreport][report_barcode] send_time resp_json[return_params][assayreport][send_time] send_name resp_json[return_params][assayreport][send_name] assayreportdetail resp_json[return_params][assayreportdetail] entry_time resp_json[return_params][assayreport][entry_time] entry_name resp_json[return_params][assayreport][entry_name] audit_name resp_json[return_params][assayreport][audit_name]with open(usernamefile_namereport_barcode.md,at) as f: f.write(|项目||||\n) f.write(|---|---|---|---|\n) f.write(|化验项目|sample_type|file_name||\n) f.write(|接收时间|send_time|||\n) f.write(|报告时间|entry_time|||\n) f.write(|送检医生|send_name|||\n) f.write(|报告医生|entry_name|||\n) f.write(|审计医生|audit_name|||\n) f.write(|医嘱号|report_barcode|||\n) f.write(\n) f.write(|项目|单位|结果|参考范围|\n) f.write(|---|---|---|---|\n)for i in assayreportdetail: item_name_info i[item_name]try: result_unit_info i[result_unit] result_data_info i[result_data] ref_range_low_info i[ref_range_low]except KeyError:passif result_unit_info: f.write(|item_name_info|str(result_unit_info)|result_data_info|ref_range_low_info|\n)else: f.write(|item_name_info||result_data_info|ref_range_low_info|\n)if __name__ __main__: session_id login(xxxx,xxx) report_barcode input(请输入医嘱号:) print(get_huayan_save(session_id,阿文,report_barcode))后面我可以把这些数据都导入Excel 之类的表格里面进行统计分析每次的指标变化。最后年纪越大身体经不起体检希望新的一年里能够早日康复也希望所有人都能够健康。现在我改掉了很多坏习惯比如熬夜、喝饮料不吃辣、不烧烤、不饮酒、不吃高盐油腻食品等命比这些重要。最后提醒大家为了自己也为了家人一定要定期体检。(本文为 AI科技大本营转载文章转载请联系原作者)征稿推荐阅读近900000条if-then关系图谱让神经网络“懂”常识推理你的红包狂欢夜互联网巨头们的流量争夺战程序员给银行植入病毒分 1300 次盗取 718 万被判 10 年半大厂必问的分布式究竟是什么鬼ProgPow以太坊上浮世绘这4门AI网课极具人气逆天好评(附代码答疑)给AI开发者的新年礼物技术公开课大放送(附演讲PPT)如何用最强模型BERT做NLP迁移学习“百练”成钢NumPy 100练