Browse Source

daily commit

master
Richard Shih 5 years ago
parent
commit
5df13015ef
2 changed files with 188 additions and 132 deletions
  1. 29
      back_end/bot_app.py
  2. 291
      equip_crawling.py

29
back_end/bot_app.py

@ -1,8 +1,26 @@
import os
from flask import Flask, jsonify, request, json
import threading
import time
import requests
from queue import Queue
app = Flask(__name__)
result = None
@app.route("/short_call",methods=['GET','POST'])
def five_secend_call():
global result
result = None
curr = time.time()
thread = threading.Thread(target=fetch_url,name='query_qa_thread')
thread.start()
while (curr + 4.5) > time.time():
if not result == None:
return jsonify(result.json())
else:
time.sleep(0.3)
return jsonify({"respone":"None"})
@app.route('/qa_bot/fulfillment', methods=['GET', 'POST'])
def index():
@ -13,6 +31,16 @@ def index():
print(request.get_data(as_text=True))
return sample_response()
def fetch_url():
global result
my_headers = {'Authorization': 'EndpointKey 365cdd9c-7af2-48bd-9dfe-031986319115','Content-Type':'application/json'}
res = requests.post('https://whlqakb.azurewebsites.net/qnamaker/knowledgebases/f15e1174-339e-4a81-a95e-747143f77b02/generateAnswer'
,headers=my_headers
,json={"question":"outlook有問題可以找誰?"})
print(res.json())
result = res
return res
def sample_response():
strRes = ''
jsonResp = {
@ -46,6 +74,7 @@ def sample_response():
def main():
port = os.environ.get('FLASK_EXPOSE_PORT')
port = port if port != None else 8080
app.config['JSON_AS_ASCII'] = False
app.run(host='0.0.0.0', port=port, debug=True)

291
equip_crawling.py

@ -1,130 +1,148 @@
#%%
# %%
import requests
from bs4 import BeautifulSoup as bs
base_url='http://family.wanhai.com'
base_url = 'http://family.wanhai.com'
loginURL = base_url + '/Login.jsp'
account='M1933'
password='1933whlM'
payload = {'Account': account,'Password': password}
account = 'M1933'
password = '1933whlM'
payload = {'Account': account, 'Password': password}
meeting_rooms = None
massage_rooms = None
session_req = None
# session_req.post(loginURL,data=payload)
#%%
def login(id,pw):
# %%
def login(id, pw):
global session_req
if session_req == None:
session_req=requests.Session()
res = session_req.post(loginURL,data={'Account': account,'Password': password})
session_req = requests.Session()
res = session_req.post(
loginURL, data={'Account': account, 'Password': password})
print(res.request.headers['Cookie'])
#%%
# %%
def isLogin():
global session_req
if session_req == None:
session_req=requests.Session()
session_req = requests.Session()
route_url = base_url + '/MainPage.jsp'
res = session_req.get(route_url,allow_redirects=False)
res = session_req.get(route_url, allow_redirects=False)
if res.status_code == 200:
print(res.request.headers['Cookie'])
return True
else:
return False
#%%
# %%
def getEquipList(type='MEETING'):
equipList_url = base_url + '/LeaseEquip/equipListOnePage.jsp'
result = session_req.get(equipList_url+'?file_num=61621&account_id='+ account +'&equip_type='+type)
result = session_req.get(
equipList_url+'?file_num=61621&account_id=' + account + '&equip_type='+type)
print(result.request.headers['Cookie'])
soup = bs(result.text,'html.parser')
elements = soup.find_all('input',{'id':'check2','name':'ID_keyD'})
soup = bs(result.text, 'html.parser')
elements = soup.find_all('input', {'id': 'check2', 'name': 'ID_keyD'})
equipDict = dict()
for v1,v2 in [(e['value'],e.find_parent().find_next_sibling().text) for e in elements]:
equipDict[v1] = {'id':v1,'type':type,'name':v2}
for v1, v2 in [(e['value'], e.find_parent().find_next_sibling().text) for e in elements]:
equipDict[v1] = {'id': v1, 'type': type, 'name': v2}
# print(equipDict)
return equipDict
#%%
# %%
def getEquipName(equipId):
if equipId in meeting_rooms.keys():
return meeting_rooms[equipId]['name']
elif equipId in massage_rooms.keys():
return massage_rooms[equipId]['name']
return massage_rooms[equipId]['name']
else:
return None
#%%
# %%
# 查詢設備是否已被占用(by 特定日期/時段)
def isEquipInUsed(b_date,b_time,e_time,equip_type,equip_id):
if equip_type=='MASSAGE':
def isEquipInUsed(b_date, b_time, e_time, equip_type, equip_id):
if equip_type == 'MASSAGE':
print('Not Support Now!!!')
return Fasle;
return False
equipUsageURL = base_url+'/LeaseEquip/equipUsage.jsp'
payload = [('q_from_date', b_date),
('q_from_time',b_time),
('q_to_date',b_date),
('q_to_time',e_time),
('q_equip_type',equip_type),
('ID_keyD',equip_id)]
result = session_req.post(equipUsageURL,data=payload)
soup = bs(result.text,'html.parser')
('q_from_time', b_time),
('q_to_date', b_date),
('q_to_time', e_time),
('q_equip_type', equip_type),
('ID_keyD', equip_id)]
result = session_req.post(equipUsageURL, data=payload)
soup = bs(result.text, 'html.parser')
elements = soup.select('td > b')
if (len(elements) > 1) and (not '目前無人預約' in elements[1].text):
return True
else:
return False;
return False
return False
#%%
# %%
# 查詢設備可用時段(by 特定日期)
def search_available_time(equip_type,equip_id,strDate):
def search_available_time(equip_type, equip_id, strDate):
if equip_type == 'MASSAGE':
print('Not Support Now!!!')
return
from interval import Interval
equipUsageURL = base_url+'/LeaseEquip/equipUsage.jsp'
payload = [('q_from_date', strDate),
('q_from_time',''),
('q_to_date',strDate),
('q_to_time',''),
('q_equip_type',equip_type),
('ID_keyD',equip_id)]
result = session_req.post(equipUsageURL,data=payload)
soup = bs(result.text,'html.parser')
('q_from_time', ''),
('q_to_date', strDate),
('q_to_time', ''),
('q_equip_type', equip_type),
('ID_keyD', equip_id)]
result = session_req.post(equipUsageURL, data=payload)
soup = bs(result.text, 'html.parser')
# print(soup.prettify())
print('{}:\n{}'.format(equip_id, soup.select('td[nowrap]')[0].text))
#%%
# %%
# 查詢可用設備(by 特定日期/時段)
def search_available_equips(equip_type,strDate,b_time,e_time):
def search_available_equips(equip_type, strDate, b_time, e_time):
if equip_type == 'MASSAGE':
print('Not Support Now!!!')
return
from interval import Interval
equipUsageURL = base_url+'/LeaseEquip/equipUsage.jsp'
payload = [('q_from_date', strDate),
('q_from_time',''),
('q_to_date',strDate),
('q_to_time',''),
('q_equip_type',equip_type)]
payload.extend([('ID_keyD',e) for e in meeting_rooms.keys()])
result = session_req.post(equipUsageURL,data=payload)
soup = bs(result.text,'html.parser')
equips = [equip.text.strip() for equip in soup.select('div[id="equips"] td[align="center"]')]
('q_from_time', ''),
('q_to_date', strDate),
('q_to_time', ''),
('q_equip_type', equip_type)]
payload.extend([('ID_keyD', e) for e in meeting_rooms.keys()])
result = session_req.post(equipUsageURL, data=payload)
soup = bs(result.text, 'html.parser')
equips = [equip.text.strip() for equip in soup.select(
'div[id="equips"] td[align="center"]')]
# print(equips)
availList = list()
for index,elem in enumerate(soup.select('td[nowrap]')):
availList.insert(index,1)
for index, elem in enumerate(soup.select('td[nowrap]')):
availList.insert(index, 1)
if '目前無人預約' in elem.text:
continue
target = Interval(int(b_time),int(e_time),closed=False)
target = Interval(int(b_time), int(e_time), closed=False)
periods = [x.text.split('~') for x in elem.select('b')]
periodIntvs = [Interval(x[0],x[1]) for x in list(map(lambda bb:[int(x) for x in bb],periods))]
periodIntvs = [Interval(x[0], x[1]) for x in list(
map(lambda bb:[int(x) for x in bb], periods))]
# print(equips[index])
# for pp in periodIntvs:
@ -132,110 +150,119 @@ def search_available_equips(equip_type,strDate,b_time,e_time):
for periodIntv in periodIntvs:
if target.overlaps(periodIntv):
availList[index] = 0
break;
availList[index] = 0
break
# print(availList)
for index,avail in enumerate(availList):
if avail == 1:
# print(availList)
for index, avail in enumerate(availList):
if avail == 1:
print('{}\n'.format(equips[index]))
#%%
# %%
# 預約設備
def bookingEquip(equip_id,equip_type,strDate,b_time,e_time):
if equip_type=='MASSAGE':
def bookingEquip(equip_id, equip_type, strDate, b_time, e_time):
if equip_type == 'MASSAGE':
print('Not Support Now!!!')
bookingURL = base_url + '/LeaseEquip/equipBooking_db.jsp'
payload ={
'item_choice1': 'F',
'equipment_id1': equip_id,
'lease_action1': 'book',
'str_yymmdd': strDate,
'f_rent_fm1': b_time,
'f_rent_to1': e_time,
'equip_count': '1',
'f_str_remark1': '#7253',
'contactor_mail1': 'x'
# 'lease_time_code_1': '',
# 'term_time_code1': '',
# 'equip_name_c1': '<5F>台北廳 【可容納90人】',
# 'lease_time_code1': 'enter_rent_time',
# 'tea1': '0',
# 'water1': '0',
# 'coffee1': '0',
# 'meeting_type1': 'IN',
# 'selected_year': '2019',
# 'selected_month': '06',
# 'selected_day': '06',
# 'equip_type': 'MEETING',
# 'fm_date': '20190606',
# 'to_date': '20190606',
# 'select_equips': equip_id
}
soup = bs(session_req.post(bookingURL,data=payload).text,'html.parser')
payload = {
'item_choice1': 'F',
'equipment_id1': equip_id,
'lease_action1': 'book',
'str_yymmdd': strDate,
'f_rent_fm1': b_time,
'f_rent_to1': e_time,
'equip_count': '1',
'f_str_remark1': '#7253',
'contactor_mail1': 'x'
# 'lease_time_code_1': '',
# 'term_time_code1': '',
# 'equip_name_c1': '<5F>台北廳 【可容納90人】',
# 'lease_time_code1': 'enter_rent_time',
# 'tea1': '0',
# 'water1': '0',
# 'coffee1': '0',
# 'meeting_type1': 'IN',
# 'selected_year': '2019',
# 'selected_month': '06',
# 'selected_day': '06',
# 'equip_type': 'MEETING',
# 'fm_date': '20190606',
# 'to_date': '20190606',
# 'select_equips': equip_id
}
soup = bs(session_req.post(bookingURL, data=payload).text, 'html.parser')
print(soup.select('table tr:nth-child(2) td:nth-child(5)')[0].text)
# print(soup.prettify())
#%%
# %%
# 取消預約設備
def cancalBookingEquip(equip_type,rent_no):
if equip_type=='MASSAGE':
def cancalBookingEquip(equip_type, rent_no):
if equip_type == 'MASSAGE':
print('Not Support Now!!!')
bookingURL = base_url + '/LeaseEquip/userBooking_db.jsp'
bookingURL = base_url + '/LeaseEquip/userBooking_db.jsp'
payload = {
# 'ID_key': '0u',
# 'action_type_0u': 'U',
'action_type':'D',
'ID_keyDD': rent_no,
# 'i_rent_no_0u': rent_no
# 'ID_key': '1u',
# 'action_type_1u': 'U',
# 'i_rent_no_1u': '350438',
# 'q_equip_id':'',
# 'q_rent_date':'',
# 'q_rent_no':'',
# 'q_su_id':''
}
soup = bs(session_req.post(bookingURL,data=payload).text,'html.parser')
# 'ID_key': '0u',
# 'action_type_0u': 'U',
'action_type': 'D',
'ID_keyDD': rent_no,
# 'i_rent_no_0u': rent_no
# 'ID_key': '1u',
# 'action_type_1u': 'U',
# 'i_rent_no_1u': '350438',
# 'q_equip_id':'',
# 'q_rent_date':'',
# 'q_rent_no':'',
# 'q_su_id':''
}
soup = bs(session_req.post(bookingURL, data=payload).text, 'html.parser')
print(soup.prettify())
#%%
# %%
# 列出個人設備預約紀錄
def listRentedEquips():
equipList_url = base_url + '/LeaseEquip/equipListOnePage.jsp'
result = session_req.get(equipList_url+'?file_num=61621&account_id='+ account +'&equip_type=MEETING')
soup = bs(result.text,'html.parser')
result = session_req.get(
equipList_url+'?file_num=61621&account_id=' + account + '&equip_type=MEETING')
soup = bs(result.text, 'html.parser')
elements = soup.select('form[name="dataForm1"] input[name^="i_rent_no"]')
elements = [x.find_parent().select('td[align="center"]') for x in elements]
rentedList = [(x[0].input['value'],x[1].text,x[2].text,x[3].text) for x in elements]
return rentedList
rentedList = [(x[0].input['value'], x[1].text, x[2].text, x[3].text)
for x in elements]
return rentedList
#%%
# %%
listRentedEquips()
#%%
# %%
equipId = 'CF15-10F-DN-01'
print(getEquipName(equipId))
inUsed = isEquipInUsed('20190606','1900','2000','MEETING',equipId)
print('Equip in used? {}'.format(inUsed))
#%%
search_available_equips('MEETING','20190624','0900','1200')
#%%
search_available_time('MEETING','CF01-9F','20190624')
#%%
inUsed = isEquipInUsed('20190606', '1900', '2000', 'MEETING', equipId)
print('Equip in used? {}'.format(inUsed))
# %%
search_available_equips('MEETING', '20190624', '0900', '1200')
# %%
search_available_time('MEETING', 'CF01-9F', '20190624')
# %%
if not isLogin():
login(account,password)
login(account, password)
meeting_rooms = getEquipList('MEETING')
massage_rooms = getEquipList('MASSAGE')
for x in meeting_rooms:
print(x,meeting_rooms.get(x))
print(x, meeting_rooms.get(x))
print('\n')
for x in massage_rooms:
print(x,massage_rooms.get(x))
print(x, massage_rooms.get(x))
#%%
# %%
if __name__ == '__main__':
pass
pass
Loading…
Cancel
Save