def run( self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any], ) -> List[Dict[Text, Any]]: place = tracker.get_slot("place") if not place: dispatcher.utter_message(fallback_message) return [SlotSet("place", None)] elif ("인쇄" in place) or ("복사" in place): dispatcher.utter_message(copystore_msg) return [SlotSet("place", None)] cached = redis.StrictRedis(host="127.0.0.1", port=6379, db=3) tg = cached.get(place) if not tg: url_prefix = "http://map.snu.ac.kr/api/search.action?search_word=" url_suffix = "&lang_type=KOR" response = requests.get(url_prefix + place + url_suffix) if response.status_code != 200: dispatcher.ustter_message("mini.snu.ac.kr doesn't reply") return [SlotSet("place", None)] parsed_soup = bs(response.content, "html.parser") targets = [] contents = json.loads(str(parsed_soup))["search_list"] for content in contents: floors = content["floor_info"] for floor in floors: if floor["convin_inst_kor_nm"] == content["name"]: targets.append(content["name"] + ": " + content["vil_dong_nm"] + "동 " + floor["flr_nm"]) response_message = "" if targets == []: response_message = "요청하신 장소를 찾지 못했습니다." else: for target in targets: response_message += target + "<br>" response_message = response_message[:-5] dispatcher.utter_message(response_message) cached.set(place, response_message, 60 * 60) return [SlotSet("place", None)] try: tg = tg.decode("utf-8") except (UnicodeDecodeError, AttributeError): pass dispatcher.utter_message(tg) return [SlotSet("place", None)]
def run( self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any], ) -> List[Dict[Text, Any]]: meal = tracker.get_slot("meal") if not meal: dispatcher.utter_message(fallback_message) return [SlotSet("meal", meal)] meal = self.meal_parser(meal) cached = redis.StrictRedis(host="127.0.0.1", port=6379, db=2) dt = datetime.now() + timedelta(hours=9) tg_str = str(dt.month) + str(dt.day) + meal + "kor" tg = cached.get(tg_str) if not tg: response = requests.get("http://mini.snu.ac.kr/cafe/today") if response.status_code != 200: dispatcher.ustter_message("mini.snu.ac.kr doesn't reply") return [SlotSet("meal", meal)] parsed_soup = bs(response.content, "html.parser") trs = parsed_soup.find_all("tr") targets = [] for tr in trs: for td in tr.td.contents: if meal in td: targets.append(tr) for target in targets: [s.extract() for s in target("span")] k = 0 response_message = "" try: if targets == []: if dt.weekday() > 4: response_message = "주말에는 영업하지 않는 식당입니다." else: response_message = "정확한 식당 이름을 알려주세요." elif meal == "301": for target in targets: response_message = (response_message + engineering[k] + "<br>") k = k + 1 for child in target.contents[2].children: response_message = (response_message + str(child) + "<br>") elif meal == "공깡": for target in targets: response_message = (response_message + eng_ggang[k] + "<br>") k = k + 1 for child in target.contents[2].children: response_message = (response_message + str(child) + "<br>") elif meal == "두레미담": for target in targets: response_message = (response_message + agricultural[k] + "<br>") k = k + 1 for child in target.contents[2].children: response_message = (response_message + str(child) + "<br>") elif meal == "기숙사": for target in targets: response_message = (response_message + dormitory[k] + "<br>") k = k + 1 for child in target.contents[2].children: response_message = (response_message + str(child) + "<br>") else: if not meal == "학생회관": k = 1 if dt.weekday() > 4: k = 1 for target in targets: response_message = response_message + time[k] + "<br>" k = k + 1 for child in target.contents[2].children: response_message = (response_message + str(child) + "<br>") except IndexError as e: dispatcher.utter_message(idxerr_msg) return [SlotSet("meal", meal)] dispatcher.utter_message(response_message) cached.set(tg_str, response_message) return [SlotSet("meal", meal)] try: tg = tg.decode("utf-8") except (UnicodeDecodeError, AttributeError): pass dispatcher.utter_message(tg) return [SlotSet("meal", meal)]