Esempio n. 1
0
    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)]
Esempio n. 2
0
    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)]