通过 Charles 抓包分析了医院的 App 的请求,然后用 脚本模拟登录医院的 App 挂号,具体代码如下:

import requests
import json
import time
import  datetime
from dateutil.relativedelta import relativedelta# 登录获取session_id
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":"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/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",'cache-control': "no-cache",}response = requests_session.post( url, data={"requestData":json.dumps(data)}, headers=headers)if response.status_code != 200:return Falseresp_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/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",'cache-control': "no-cache",}response = requests_session.post(url, data={"requestData":json.dumps(payload)}, headers=headers)if response.status_code != 200:return Falseresp_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(days=7)).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/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",'cache-control': "no-cache",}response = requests_session.post(url, data={"requestData": json.dumps(payload)}, headers=headers)if response.status_code != 200:return Falseresp_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": "x'x'x'x", # 社保卡号"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/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",'cache-control': "no-cache",}response = requests_session.post(url, data={"requestData": json.dumps(payload)}, headers=headers)if response.status_code != 200:return Falseresp_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, params=querystring)if response != 200:returnreturn Trueif __name__ == '__main__':requests_session = requests.Session()time_now = datetime.datetime.now()pre_date = (time_now+datetime.timedelta(days=7)).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'` = "5" ]; then /usr/bin/python3 /opt/hospital/zheyi.py;fi

【数据分析师自学系列——python】python实现自动挂号代码相关推荐

  1. 【数据分析师自学系列-MySQL】创建新表create table、create table as、create table like的区别

    [数据分析师自学系列-MySQL]创建新表create table.create table as.create table like的区别 1.create table:基本创建新表方式 格式如下: ...

  2. 史上最全数据分析师资料免费下载[Python]

    史上最全数据分析师资料免费下载[Python]!整理不易! 以下资料仅供自我学习使用,禁商用,侵删 这几年数据分心被炒得热火朝天,其原因之一是上手容易,之二数据暴增,提取有用信息,分析,预测用户行为, ...

  3. python数据分析师工作内容_小白入行数据分析师3年-工作内容复盘分享含代码(一)-Python篇介绍...

    前言 个人作为互联网行业数据分析师工作已有3年之久,日常工作中碰到过问题,也在解决的问题过程中学到了很多.作为组内技术较为资深的组员,也经常在周会中安排环节给组内人员进行知识分享,以及日常帮助同事解决 ...

  4. 数据分析师招聘情况之python分析

    项目简介: 通过此次数据分析解决转行数据分析师是否合适的问题 目的: 1.不同城市数据分析师需求量: 2.总体薪酬分布: 3.不同城市薪酬分布情况: 4.数据分析师对经验的要求: 5.经验对薪酬的影响 ...

  5. tableau 实战练习数据源分享_小白入行数据分析师3年-工作内容复盘分享含代码(二)-数据库及Tableau篇介绍...

    前言 本文是对使用的数据库以及Tableau的内容进行介绍,方便学习者了解数据库方向有哪些内容是需要有所了解以及可以注意的,分享内容基于个人对这些技能的理解,如有错误请及时指出,我会立马改进. 数据库 ...

  6. python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码

    1. 前言 最近,微软开源了一款非常强大的 Python 自动化依赖库:playwright-python,它支持主流的浏览器,包含:Chrome.Firefox.Safari.Microsoft E ...

  7. Python+PEP8 | VSCode自动格式化代码

    PEP8 是针对 python 代码格式而编订的风格指南,它可以使代码更加易读易懂.记住 PEP8 的每一条规范略有难度,幸运的是 VSCode 已经为我们准备好一切了. 打开设置,搜索 python ...

  8. Python使用exec自动生成代码并执行,同时得到返回的变量

    我们使用exec构造代码,并用两种方法打印出来: 构造代码 code = "a = 6" 执行代码: exec(code) 在程序中得到a的值: #方法一: exec(print( ...

  9. 优达学城数据分析师纳米学位——P3项目知识点整理及代码分析 xml文件解析

    The ElementTree XML API 在廖雪峰的博客中提到: start_element  char_data  end_element 的处理思路,关注起始点,数据内容,终止点. 操作XM ...

最新文章

  1. 直播预告 | 旷视研究院王毅:用于条件图像生成的注意力归一化
  2. webpack + react
  3. 检查容器内的磁盘占用shell(check_container_disk.sh)
  4. 我做过的本职之外的事情
  5. windows 下vscode coderunner+bash 编程
  6. 80 - 抓取豆瓣音乐排行榜
  7. java微信刷卡支付demo,微信刷卡支付API详解
  8. Vue 不睡觉教程3 - 来点实在的:自动计算剩余时间的任务列表
  9. 正则验证车牌号码(包括新能源车牌)
  10. C++ 小游戏 视频及资料集(四)
  11. 计算机网络的看法,浅谈计算机网络的发展趋势,你有什么看法吗?
  12. Bluetooth DUN 蓝牙拨号网络 (http://blog.sina.com.cn/s/blog_59b22a2e0100ildk.html)
  13. FFmpeg之抽帧抓图
  14. Flutter项目错误解决:/.pub-cache/hosted/pub.dartlang.org/flutter_advanced_networkimage-0.5.0
  15. 图像传感器c语言,『评测』DxOMark公布索尼A7C相机图像传感器评测结果
  16. php field as key,php – $_POST as $key =gt; $value使用复选框
  17. Redis(七) - 封装Redis工具类
  18. 达梦单机DMHS搭建(dm8-dm8)
  19. 《上瘾》01| 如何让用户养成习惯和行动及案例分析
  20. 两行配置解决github官网访问速度慢的问题(速度贼快!)

热门文章

  1. iTerm 2 关闭每日提示
  2. monty python and the holy grail_电影 蒙迪佩登与圣杯 Monty Python and the Holy Grail 英文剧本.doc...
  3. bzoj3028 食物 生成函数+广义二项式定理
  4. 开放式WEP和共享式WEP的区别
  5. 树莓派 FM 发送机小电台背后的原理解析
  6. python中单斜杆和双斜杠的区别
  7. [Android] 安卓特殊文字生成器v2.0.1
  8. 城市大脑入选国家新一代人工智能开放创新平台,阿里iDST副院长华先胜技术解读...
  9. 实战笔记:利用pandas提升分词后过滤停用词的效率
  10. 认识计算机网络参考模型