From 5df13015ef5364b3ac45ccc8b3d2bab9050aaa87 Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 5 Sep 2019 23:41:46 +0800 Subject: [PATCH] daily commit --- back_end/bot_app.py | 29 +++++ equip_crawling.py | 291 ++++++++++++++++++++++++-------------------- 2 files changed, 188 insertions(+), 132 deletions(-) diff --git a/back_end/bot_app.py b/back_end/bot_app.py index 5c695b4..98bab49 100644 --- a/back_end/bot_app.py +++ b/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) diff --git a/equip_crawling.py b/equip_crawling.py index 4463d6f..a27468b 100644 --- a/equip_crawling.py +++ b/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