You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

241 lines
8.1 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. #%%
  2. import requests
  3. from bs4 import BeautifulSoup as bs
  4. base_url='http://family.wanhai.com'
  5. loginURL = base_url + '/Login.jsp'
  6. account='M1933'
  7. password='1933whlM'
  8. payload = {'Account': account,'Password': password}
  9. meeting_rooms = None
  10. massage_rooms = None
  11. session_req = None
  12. # session_req.post(loginURL,data=payload)
  13. #%%
  14. def login(id,pw):
  15. global session_req
  16. if session_req == None:
  17. session_req=requests.Session()
  18. res = session_req.post(loginURL,data={'Account': account,'Password': password})
  19. print(res.request.headers['Cookie'])
  20. #%%
  21. def isLogin():
  22. global session_req
  23. if session_req == None:
  24. session_req=requests.Session()
  25. route_url = base_url + '/MainPage.jsp'
  26. res = session_req.get(route_url,allow_redirects=False)
  27. if res.status_code == 200:
  28. print(res.request.headers['Cookie'])
  29. return True
  30. else:
  31. return False
  32. #%%
  33. def getEquipList(type='MEETING'):
  34. equipList_url = base_url + '/LeaseEquip/equipListOnePage.jsp'
  35. result = session_req.get(equipList_url+'?file_num=61621&account_id='+ account +'&equip_type='+type)
  36. print(result.request.headers['Cookie'])
  37. soup = bs(result.text,'html.parser')
  38. elements = soup.find_all('input',{'id':'check2','name':'ID_keyD'})
  39. equipDict = dict()
  40. for v1,v2 in [(e['value'],e.find_parent().find_next_sibling().text) for e in elements]:
  41. equipDict[v1] = {'id':v1,'type':type,'name':v2}
  42. # print(equipDict)
  43. return equipDict
  44. #%%
  45. def getEquipName(equipId):
  46. if equipId in meeting_rooms.keys():
  47. return meeting_rooms[equipId]['name']
  48. elif equipId in massage_rooms.keys():
  49. return massage_rooms[equipId]['name']
  50. else:
  51. return None
  52. #%%
  53. # 查詢設備是否已被占用(by 特定日期/時段)
  54. def isEquipInUsed(b_date,b_time,e_time,equip_type,equip_id):
  55. if equip_type=='MASSAGE':
  56. print('Not Support Now!!!')
  57. return Fasle;
  58. equipUsageURL = base_url+'/LeaseEquip/equipUsage.jsp'
  59. payload = [('q_from_date', b_date),
  60. ('q_from_time',b_time),
  61. ('q_to_date',b_date),
  62. ('q_to_time',e_time),
  63. ('q_equip_type',equip_type),
  64. ('ID_keyD',equip_id)]
  65. result = session_req.post(equipUsageURL,data=payload)
  66. soup = bs(result.text,'html.parser')
  67. elements = soup.select('td > b')
  68. if (len(elements) > 1) and (not '目前無人預約' in elements[1].text):
  69. return True
  70. else:
  71. return False;
  72. return False
  73. #%%
  74. # 查詢設備可用時段(by 特定日期)
  75. def search_available_time(equip_type,equip_id,strDate):
  76. if equip_type == 'MASSAGE':
  77. print('Not Support Now!!!')
  78. return
  79. from interval import Interval
  80. equipUsageURL = base_url+'/LeaseEquip/equipUsage.jsp'
  81. payload = [('q_from_date', strDate),
  82. ('q_from_time',''),
  83. ('q_to_date',strDate),
  84. ('q_to_time',''),
  85. ('q_equip_type',equip_type),
  86. ('ID_keyD',equip_id)]
  87. result = session_req.post(equipUsageURL,data=payload)
  88. soup = bs(result.text,'html.parser')
  89. # print(soup.prettify())
  90. print('{}:\n{}'.format(equip_id, soup.select('td[nowrap]')[0].text))
  91. #%%
  92. # 查詢可用設備(by 特定日期/時段)
  93. def search_available_equips(equip_type,strDate,b_time,e_time):
  94. if equip_type == 'MASSAGE':
  95. print('Not Support Now!!!')
  96. return
  97. from interval import Interval
  98. equipUsageURL = base_url+'/LeaseEquip/equipUsage.jsp'
  99. payload = [('q_from_date', strDate),
  100. ('q_from_time',''),
  101. ('q_to_date',strDate),
  102. ('q_to_time',''),
  103. ('q_equip_type',equip_type)]
  104. payload.extend([('ID_keyD',e) for e in meeting_rooms.keys()])
  105. result = session_req.post(equipUsageURL,data=payload)
  106. soup = bs(result.text,'html.parser')
  107. equips = [equip.text.strip() for equip in soup.select('div[id="equips"] td[align="center"]')]
  108. # print(equips)
  109. availList = list()
  110. for index,elem in enumerate(soup.select('td[nowrap]')):
  111. availList.insert(index,1)
  112. if '目前無人預約' in elem.text:
  113. continue
  114. target = Interval(int(b_time),int(e_time),closed=False)
  115. periods = [x.text.split('~') for x in elem.select('b')]
  116. periodIntvs = [Interval(x[0],x[1]) for x in list(map(lambda bb:[int(x) for x in bb],periods))]
  117. # print(equips[index])
  118. # for pp in periodIntvs:
  119. # print(pp,'\n')
  120. for periodIntv in periodIntvs:
  121. if target.overlaps(periodIntv):
  122. availList[index] = 0
  123. break;
  124. # print(availList)
  125. for index,avail in enumerate(availList):
  126. if avail == 1:
  127. print('{}\n'.format(equips[index]))
  128. #%%
  129. # 預約設備
  130. def bookingEquip(equip_id,equip_type,strDate,b_time,e_time):
  131. if equip_type=='MASSAGE':
  132. print('Not Support Now!!!')
  133. bookingURL = base_url + '/LeaseEquip/equipBooking_db.jsp'
  134. payload ={
  135. 'item_choice1': 'F',
  136. 'equipment_id1': equip_id,
  137. 'lease_action1': 'book',
  138. 'str_yymmdd': strDate,
  139. 'f_rent_fm1': b_time,
  140. 'f_rent_to1': e_time,
  141. 'equip_count': '1',
  142. 'f_str_remark1': '#7253',
  143. 'contactor_mail1': 'x'
  144. # 'lease_time_code_1': '',
  145. # 'term_time_code1': '',
  146. # 'equip_name_c1': '<5F>台北廳 【可容納90人】',
  147. # 'lease_time_code1': 'enter_rent_time',
  148. # 'tea1': '0',
  149. # 'water1': '0',
  150. # 'coffee1': '0',
  151. # 'meeting_type1': 'IN',
  152. # 'selected_year': '2019',
  153. # 'selected_month': '06',
  154. # 'selected_day': '06',
  155. # 'equip_type': 'MEETING',
  156. # 'fm_date': '20190606',
  157. # 'to_date': '20190606',
  158. # 'select_equips': equip_id
  159. }
  160. soup = bs(session_req.post(bookingURL,data=payload).text,'html.parser')
  161. print(soup.select('table tr:nth-child(2) td:nth-child(5)')[0].text)
  162. # print(soup.prettify())
  163. #%%
  164. # 取消預約設備
  165. def cancalBookingEquip(equip_type,rent_no):
  166. if equip_type=='MASSAGE':
  167. print('Not Support Now!!!')
  168. bookingURL = base_url + '/LeaseEquip/userBooking_db.jsp'
  169. payload = {
  170. # 'ID_key': '0u',
  171. # 'action_type_0u': 'U',
  172. 'action_type':'D',
  173. 'ID_keyDD': rent_no,
  174. # 'i_rent_no_0u': rent_no
  175. # 'ID_key': '1u',
  176. # 'action_type_1u': 'U',
  177. # 'i_rent_no_1u': '350438',
  178. # 'q_equip_id':'',
  179. # 'q_rent_date':'',
  180. # 'q_rent_no':'',
  181. # 'q_su_id':''
  182. }
  183. soup = bs(session_req.post(bookingURL,data=payload).text,'html.parser')
  184. print(soup.prettify())
  185. #%%
  186. # 列出個人設備預約紀錄
  187. def listRentedEquips():
  188. equipList_url = base_url + '/LeaseEquip/equipListOnePage.jsp'
  189. result = session_req.get(equipList_url+'?file_num=61621&account_id='+ account +'&equip_type=MEETING')
  190. soup = bs(result.text,'html.parser')
  191. elements = soup.select('form[name="dataForm1"] input[name^="i_rent_no"]')
  192. elements = [x.find_parent().select('td[align="center"]') for x in elements]
  193. rentedList = [(x[0].input['value'],x[1].text,x[2].text,x[3].text) for x in elements]
  194. return rentedList
  195. #%%
  196. listRentedEquips()
  197. #%%
  198. equipId = 'CF15-10F-DN-01'
  199. print(getEquipName(equipId))
  200. inUsed = isEquipInUsed('20190606','1900','2000','MEETING',equipId)
  201. print('Equip in used? {}'.format(inUsed))
  202. #%%
  203. search_available_equips('MEETING','20190624','0900','1200')
  204. #%%
  205. search_available_time('MEETING','CF01-9F','20190624')
  206. #%%
  207. if not isLogin():
  208. login(account,password)
  209. meeting_rooms = getEquipList('MEETING')
  210. massage_rooms = getEquipList('MASSAGE')
  211. for x in meeting_rooms:
  212. print(x,meeting_rooms.get(x))
  213. print('\n')
  214. for x in massage_rooms:
  215. print(x,massage_rooms.get(x))
  216. #%%
  217. if __name__ == '__main__':
  218. pass