Beispiel #1
0
 def on_enter_hsr_end_station(self, event=None):
     contents = get_replay_flex('train_date')
     contents['header']['contents'][0]['contents'][1][
         'text'] = self.user.hsr_start_station
     contents['header']['contents'][1]['contents'][1][
         'text'] = self.user.hsr_end_station
     send_flex_message(event.reply_token, contents)
Beispiel #2
0
 def on_enter_index_chart(self, event):
     global index_chart_range, index
     reply_token = event.reply_token
     flex_message.index_chart["body"]["contents"][1]["text"] = index_chart_range
     flex_message.index_chart["body"]["contents"][0]["text"] = index
     other_function.get_index_chart(index, index_chart_range)
     send_flex_message(reply_token,"指數圖表",flex_message.index_chart)
Beispiel #3
0
 def on_enter_menu(self, event):
     print("I'm entering menu")
     self.last_state = self.state
     user_id = event.source.user_id
     self.in_pixiv = False
     self.in_artist = False
     reply_token = event.reply_token
     send_flex_message(reply_token, f"menu", menu)
Beispiel #4
0
 def on_enter_bus_by_stop2(self, event=None):
     contents = get_replay_flex('bus_route_by_stops')  # input
     routes_list = natsorted(
         self.bus_info.stops_to_route[self.user.bus_stops])
     contents['body']['contents'][0]['text'] = self.user.bus_stops
     for route in routes_list:
         template = copy.deepcopy(button_template)
         template['action']['label'] = template['action']['text'] = route
         contents['footer']['contents'].append(template)
     send_flex_message(event.reply_token, contents)
Beispiel #5
0
 def is_going_to_bus_end(self, event=None):
     if event.message.type == 'text':
         if event.message.text in ['去程', '回程']:
             self.user.bus_direction = event.message.text
             estimates = self.bus_info.calculate(self.user.bus_route,
                                                 self.user.bus_stops,
                                                 self.user.bus_direction)
             contents = get_replay_flex('show_bus_time')
             contents['header']['contents'][0]['text'] = self.user.bus_route
             contents['header']['contents'][1][
                 'text'] = self.user.bus_direction
             i = 1
             # contents['body']['contents'][0]['contents'][1]['contents'][1]['borderColor'] = '#00FF00'
             # contents['body']['contents'][0]['contents'][1]['contents'][1]['backgroundColor'] = '#00FF00'
             real_time = 0
             for key, value in estimates.items():
                 if i == 3:
                     real_time = value[0]
                 contents['body']['contents'][i]['contents'][2][
                     'text'] = key
                 if value[1] == 0:
                     # 末班車已過 or 交管
                     contents['body']['contents'][i]['contents'][0][
                         'text'] = f'{(timedelta(seconds =  value[0])).seconds // 60} 分' if value[
                             0] != None else '不停靠'
                 elif value[1] == 1:
                     contents['body']['contents'][i]['contents'][0][
                         'text'] = f'{(timedelta(seconds =  value[0])).seconds // 60} 分' if value[
                             0] != None else '未發車'
                 elif value[1] == 2:
                     contents['body']['contents'][i]['contents'][0][
                         'text'] = '交管不停靠'
                 elif value[1] == 3:
                     contents['body']['contents'][i]['contents'][0][
                         'text'] = '末班車已過'
                 elif value[1] == 4:
                     contents['body']['contents'][i]['contents'][0][
                         'text'] = '今日未營運'
                 else:
                     # 末班車已過 or 交管
                     contents['body']['contents'][i]['contents'][0][
                         'text'] = '不停靠'
                 i += 2
             contents['header']['contents'][1][
                 'text'] = self.user.bus_direction
             contents['body']['contents'][0][
                 'text'] = f'預計到達時間: {int(real_time / 60)} 分鐘' if real_time != None else ' '
             send_flex_message(event.reply_token, contents)
             return True
         else:
             push_text_message(self.user.user_id, '請輸入正確的方向')
             return False
     else:
         push_text_message(self.user.user_id, '請輸入正確的方向')
         return False
Beispiel #6
0
    def going_train_time(self, event=None):
        if event.type == 'postback':
            self.user.train_date = event.postback.params['datetime']
            times = self.train_info.calculate(self.user.train_start_station,
                                              self.user.train_end_station,
                                              self.user.train_date)
            contents = get_replay_flex('show_train_time')

            for t in times:
                copy_template = copy.deepcopy(train_time_template)
                copy_template['header']['contents'][0]['contents'][0][
                    'contents'][1]['text'] = self.user.train_start_station
                copy_template['header']['contents'][0]['contents'][1][
                    'contents'][1]['text'] = self.user.train_end_station
                copy_template['header']['contents'][1]['contents'][0][
                    'text'] = f'車號 {t[2]}'
                # too long
                copy_template['header']['contents'][1]['contents'][1][
                    'text'] = f'{t[3][:2]}'
                delay = self.train_info.delay(t[2])
                if delay != 0:
                    copy_template['body']['contents'][0]['contents'][1][
                        'contents'][1]['borderColor'] = '#EF4520'
                    copy_template['body']['contents'][0]['contents'][1][
                        'contents'][1]['backgroundColor'] = '#EF4520'
                    copy_template['body']['contents'][0]['contents'][2][
                        'text'] = f'誤點 {int(delay / 60)} 分鐘'
                else:
                    copy_template['body']['contents'][0]['contents'][2][
                        'text'] = f'正常'
                td = datetime.strptime(t[1], "%H:%M") - \
                    datetime.strptime(t[0], "%H:%M")
                copy_template['body']['contents'][2][
                    'text'] = f'Total: {td.seconds // 3600} hours {(td.seconds // 60) % 60} minutes'
                copy_template['body']['contents'][3]['contents'][0][
                    'text'] = t[0]
                copy_template['body']['contents'][3]['contents'][2][
                    'text'] = self.user.train_start_station
                copy_template['body']['contents'][5]['contents'][0][
                    'text'] = t[1]
                copy_template['body']['contents'][5]['contents'][2][
                    'text'] = self.user.train_end_station

                contents['contents'].append(copy_template)

            if len(times) == 0:
                send_text_message(event.reply_token,
                                  f"{self.user.train_date} 之後沒有可以搭乘的列車")
            else:
                send_flex_message(event.reply_token, contents)
            return True
        else:
            push_text_message(self.user.user_id, '請輸入正確的日期')
            return False
Beispiel #7
0
    def going_hsr_time(self, event=None):
        if event.type == 'postback':
            self.user.hsr_date = event.postback.params['datetime']
            times = self.hsr_info.calculate(self.user.hsr_start_station,
                                            self.user.hsr_end_station,
                                            self.user.hsr_date)
            contents = get_replay_flex('show_hsr_time')

            for t in times:
                copy_template = copy.deepcopy(rail_time_template)
                copy_template['header']['contents'][0]['contents'][0][
                    'contents'][1]['text'] = self.user.hsr_start_station
                copy_template['header']['contents'][0]['contents'][1][
                    'contents'][1]['text'] = self.user.hsr_end_station
                copy_template['header']['contents'][1]['contents'][0][
                    'text'] = f'{t[2]}'
                available = self.hsr_info.available_seats(
                    t[2], t[3], self.user.hsr_date,
                    self.user.hsr_start_station)
                if not available:
                    copy_template['body']['contents'][0]['contents'][1][
                        'contents'][1]['borderColor'] = '#EF4520'
                    copy_template['body']['contents'][0]['contents'][1][
                        'contents'][1]['backgroundColor'] = '#EF4520'
                    copy_template['body']['contents'][0]['contents'][2][
                        'text'] = '沒有空位'
                td = datetime.strptime(t[1], "%H:%M") - \
                    datetime.strptime(t[0], "%H:%M")
                copy_template['body']['contents'][2][
                    'text'] = f'Total: {td.seconds // 3600} hours {(td.seconds // 60) % 60} minutes'
                copy_template['body']['contents'][3]['contents'][0][
                    'text'] = t[0]
                copy_template['body']['contents'][3]['contents'][2][
                    'text'] = self.user.hsr_start_station
                copy_template['body']['contents'][5]['contents'][0][
                    'text'] = t[1]
                copy_template['body']['contents'][5]['contents'][2][
                    'text'] = self.user.hsr_end_station
                contents['contents'].append(copy_template)

            if len(times) == 0:
                send_text_message(event.reply_token,
                                  f'{self.user.hsr_date} 之後沒有可以搭乘的列車')
            else:
                send_flex_message(event.reply_token, contents)
            return True
        else:
            push_text_message(self.user.user_id, '請輸入正確的日期')
            return False
Beispiel #8
0
 def on_enter_bus_by_route2(self, event=None):
     contents = get_replay_flex('bus_stops_by_route')  # input
     stops_list = self.bus_info.route_to_stops[self.user.bus_route]
     template = copy.deepcopy(bubble_template)
     template['body']['contents'][0]['text'] = self.user.bus_route
     for i, stop in enumerate(stops_list):
         if i >= 72:  # line can not sent message which exceed 12 bubble
             break
         if i % 6 == 0:
             contents['contents'].append(copy.deepcopy(template))
         dict_template = copy.deepcopy(button_template)
         dict_template['action']['label'] = dict_template['action'][
             'text'] = stop
         contents['contents'][-1]['footer']['contents'].append(
             dict_template)
     send_flex_message(event.reply_token, contents)
Beispiel #9
0
 def on_enter_start(self, event):
     reply_token = event.reply_token
     send_flex_message(reply_token,"start",flex_message.start)
Beispiel #10
0
 def on_enter_USA_index(self, event):
     reply_token = event.reply_token
     send_flex_message(reply_token,"美股指數",flex_message.index_USA)
Beispiel #11
0
 def on_enter_stock_recommend(self, event):
     reply_token = event.reply_token
     flex_message.stock_recommend["body"]["contents"][0]["text"] = stock[1]
     other_function.change_stock_recommend(stock[0])
     send_flex_message(reply_token,"stock_list",flex_message.stock_recommend)
Beispiel #12
0
 def on_enter_begin(self, event):
     reply_token = event.reply_token
     send_flex_message(reply_token,"begin",flex_message.begin)
Beispiel #13
0
 def on_enter_stock_list(self, event):
     global stock
     reply_token = event.reply_token
     flex_message.stock_list["body"]["contents"][0]["text"] = stock[1]
     flex_message.stock_list["body"]["contents"][1]["text"] = ("代碼:"+stock[0])
     send_flex_message(reply_token,"stock_list",flex_message.stock_list)
Beispiel #14
0
 def on_enter_stock_now(self, event):
     reply_token = event.reply_token
     other_function.change_stock_now(stock[0])
     flex_message.stock_now["body"]["contents"][0]["contents"][0]["text"] = stock[1]
     flex_message.stock_now["body"]["contents"][0]["contents"][1]["text"] = stock[0]
     send_flex_message(reply_token,"stock_list",flex_message.stock_now)
Beispiel #15
0
 def on_enter_hsr_start(self, event=None):
     self.train_info.start_station = None
     self.train_info.end_station = None
     contents = get_replay_flex('hsr_start')
     send_flex_message(event.reply_token, contents)
Beispiel #16
0
 def on_enter_TW_history(self, event):
     reply_token = event.reply_token
     other_function.change_TW_history()
     send_flex_message(reply_token,"index_TW_history",flex_message.index_TW_history)
Beispiel #17
0
 def on_enter_index_search(self, event):
     reply_token = event.reply_token
     send_flex_message(reply_token,"指數查詢",flex_message.index_search)
Beispiel #18
0
 def on_enter_intro(self, event):
     reply_token = event.reply_token
     flex_msg = flex_msg_intro
     send_flex_message(reply_token, flex_msg)
     self.go_back()
Beispiel #19
0
    def on_enter_find_pixiv_id(self, event):
        print("I'm entering find_pixiv_id")
        self.last_state = self.state
        if (not self.in_artist):
            url = "https://www.pixiv.net/" + event.message.text.lower(
            ).replace(" ", "/")
            print(url)
            reply_token = event.reply_token
            if (not IsConnection(url)):
                send_text_message(reply_token, "此id不存在")
                self.back_pixiv(event)
                return
            self.driver.get(url)
            time.sleep(3)
            if (self.stay):  #找作者
                find_user_id = {
                    "type": "bubble",
                    "size": "giga",
                    "header": {
                        "type":
                        "box",
                        "layout":
                        "horizontal",
                        "contents": [{
                            "type": "image",
                            "url":
                            "https://i.pixiv.cat/img-master/img/2020/12/13/15/32/26/86274118_p0_master1200.jpg",
                            "size": "full",
                            "aspectMode": "cover"
                        }, {
                            "type":
                            "box",
                            "layout":
                            "vertical",
                            "contents": [{
                                "type": "image",
                                "url":
                                "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png",
                                "size": "full",
                                "aspectMode": "cover"
                            }],
                            "width":
                            "100px",
                            "height":
                            "100px",
                            "cornerRadius":
                            "100px",
                            "offsetStart":
                            "35%",
                            "position":
                            "absolute",
                            "paddingAll":
                            "none",
                            "offsetTop":
                            "10%"
                        }],
                        "spacing":
                        "none",
                        "position":
                        "relative",
                        "width":
                        "400px",
                        "height":
                        "150px",
                        "paddingAll":
                        "0px"
                    },
                    "body": {
                        "type":
                        "box",
                        "layout":
                        "vertical",
                        "contents": [{
                            "type": "text",
                            "text": "作者名稱",
                            "weight": "bold",
                            "style": "normal"
                        }],
                        "alignItems":
                        "center"
                    },
                    "footer": {
                        "type":
                        "box",
                        "layout":
                        "vertical",
                        "contents": [{
                            "type":
                            "box",
                            "layout":
                            "vertical",
                            "contents": [{
                                "type": "button",
                                "action": {
                                    "type": "uri",
                                    "label": "Pixiv",
                                    "uri": "http://linecorp.com/"
                                },
                                "color": "#111111"
                            }],
                            "cornerRadius":
                            "10px",
                            "borderColor":
                            "#6C6C6C",
                            "borderWidth":
                            "normal"
                        }, {
                            "type":
                            "box",
                            "layout":
                            "vertical",
                            "contents": [{
                                "type": "button",
                                "action": {
                                    "type": "uri",
                                    "label": "Twitter",
                                    "uri": "http://linecorp.com/"
                                },
                                "color": "#111111"
                            }],
                            "borderWidth":
                            "normal",
                            "borderColor":
                            "#6C6C6C",
                            "cornerRadius":
                            "10px",
                            "margin":
                            "10px"
                        }]
                    }
                }
                twitter, picture = True, True
                tmp = self.driver.find_element_by_class_name("_2AOtfl9")
                twitter_url = ""
                try:
                    tmp_twitter_url = tmp.find_elements_by_tag_name("a")
                    for i in range(len(tmp_twitter_url)):
                        tmp_twitter_url[i] = tmp_twitter_url[i].get_attribute(
                            "href")
                        if (tmp_twitter_url[i].find("twitter") != -1):
                            twitter_url = tmp_twitter_url[i]
                            twitter_url = "https://twitter.com/" + twitter_url[
                                twitter_url.find(".com%2" + "F") + 7:]
                            break
                except:
                    twitter = False
                if (twitter_url == ""):
                    twitter = False
                tmp = self.driver.find_element_by_class_name(
                    "sc-1asno00-0.ihWmWP")
                artist_name = tmp.get_attribute("title")
                icon_url = tmp.find_element_by_tag_name("img").get_attribute(
                    "src")
                if (icon_url !=
                        "https://s.pximg.net/common/images/no_profile.png"):
                    icon_url = "https://i.pixiv.cat" + icon_url[
                        icon_url.find("/user-profile/"):]
                try:
                    picture_url = self.driver.find_element_by_class_name(
                        "rp5asc-10.leQnFG").get_attribute("src")
                    picture_url = "https://i.pixiv.cat/img-master" + picture_url[
                        picture_url.find("/img/"):picture_url.
                        rfind("_p0_")] + "_p0_master1200" + picture_url[-4:]
                except:
                    picture = False
                find_user_id["header"]["contents"][1]["contents"][0][
                    "url"] = icon_url
                find_user_id["body"]["contents"][0]["text"] = artist_name
                find_user_id["footer"]["contents"][0]["contents"][0]["action"][
                    "uri"] = url
                if (twitter):
                    find_user_id["footer"]["contents"][1]["contents"][0][
                        "action"]["uri"] = twitter_url
                else:
                    del find_user_id["footer"]["contents"][1]
                if (picture):
                    find_user_id["header"]["contents"][0]["url"] = picture_url
                else:
                    del find_user_id["header"]["contents"][0]
                send_flex_message(reply_token, f"find_pixiv_id", find_user_id)
                self.in_artist = True
            else:  #找作品
                picture_url = self.driver.find_element_by_class_name(
                    "sc-1qpw8k9-1.fvHoJ").get_attribute("src")
                picture_url = "https://i.pixiv.cat/img-master" + picture_url[
                    picture_url.find("/img/"):picture_url.
                    rfind("_p0_")] + "_p0_master1200" + picture_url[-4:]
                tmp = self.driver.find_element_by_class_name("f30yhg-2.iKmMAb")
                artist_name = tmp.find_element_by_tag_name(
                    "div").get_attribute("title")
                icon_url = tmp.find_element_by_tag_name("img").get_attribute(
                    "src")
                if (icon_url !=
                        "https://s.pximg.net/common/images/no_profile_s.png"):
                    icon_url = "https://i.pixiv.cat" + icon_url[
                        icon_url.find("/user-profile/"):icon_url.
                        rfind("_50")] + "_170" + icon_url[-4:]
                artist_page = tmp.find_element_by_tag_name("a").get_attribute(
                    "href")
                title_page = url
                title_name = self.driver.find_element_by_class_name(
                    "sc-1u8nu73-3.feoVvS").text

                find_artwork_id["hero"]["url"] = picture_url
                find_artwork_id["hero"]["action"]["uri"] = picture_url
                find_artwork_id["body"]["contents"][0]["text"] = title_name
                find_artwork_id["body"]["contents"][0]["action"][
                    "uri"] = title_page
                find_artwork_id["footer"]["contents"][0]["contents"][0][
                    "url"] = icon_url
                find_artwork_id["footer"]["contents"][0]["contents"][0][
                    "action"]["uri"] = artist_page
                find_artwork_id["footer"]["contents"][1]["contents"][0][
                    "text"] = artist_name

                send_flex_message(reply_token, f"find_artwork_id",
                                  find_artwork_id)
                self.back_pixiv(event)
Beispiel #20
0
 def on_enter_hsr_start_station(self, event=None):
     contents = get_replay_flex('hsr_end')
     send_flex_message(event.reply_token, contents)
Beispiel #21
0
 def on_enter_bus_start(self, event=None):
     self.user.bus_stops = None
     self.user.bus_route = None
     self.user.bus_direction = None
     contents = get_replay_flex('bus')
     send_flex_message(event.reply_token, contents)
Beispiel #22
0
 def on_enter_TW_index(self, event):
     reply_token = event.reply_token
     send_flex_message(reply_token,"index_TW",flex_message.index_TW)
Beispiel #23
0
 def on_enter_start(self, event=None):
     contents = get_replay_flex('start')
     send_flex_message(event.reply_token, contents)
Beispiel #24
0
 def on_enter_menu(self, event):
     reply_token = event.reply_token
     flex_msg = flex_msg_menu
     send_flex_message(reply_token, flex_msg)
Beispiel #25
0
    def on_enter_pixiv(self, event):
        print("I'm entering pixiv")
        self.last_state = self.state
        self.in_artist = False
        user_id = event.source.user_id
        if (not self.in_pixiv):
            self.driver.get("https://www.pixiv.net/")
            reply_token = event.reply_token
            send_push_message(user_id, TextSendMessage(text='請稍後回應...'))
            time.sleep(3)

            container = self.driver.find_element_by_class_name(
                "gtm-toppage-thumbnail-illustration-recommend-works-zone")
            picture = container.find_elements_by_tag_name("img")
            title = self.driver.find_elements_by_class_name(
                "iasfms-4.hegAwd.gtm-toppage-thumbnail-illustration-recommend-works"
            )
            artist = self.driver.find_elements_by_class_name(
                "sc-1rx6dmq-2.eMBcTW.gtm-illust-recommend-user-name")
            picture_url = []
            icon_url = []
            title_name = []
            title_page = []
            artist_name = []
            artist_page = []
            j = 0
            k = 0
            for i in range(len(picture)):
                if (picture[i].get_attribute("class") == "rp5asc-10 leQnFG"):
                    picture_url.append(picture[i].get_attribute("src"))
                    picture_url[
                        j] = "https://i.pixiv.cat/img-master" + picture_url[j][
                            picture_url[j].find("/img/"):picture_url[j].
                            rfind("_p0_"
                                  )] + "_p0_master1200" + picture_url[j][-4:]
                    # print(picture_url[j])
                    j += 1
                else:
                    icon_url.append(picture[i].get_attribute("src"))
                    if (icon_url[k] !=
                            "https://s.pximg.net/common/images/no_profile_s.png"
                        ):
                        icon_url[k] = "https://i.pixiv.cat" + icon_url[
                            k][icon_url[k].find("/user-profile/"):icon_url[k].
                               rfind("_50")] + "_170" + icon_url[k][-4:]
                    # print(icon_url[k])
                    k += 1
            j = 0
            for i in range(len(title)):
                title_name.append(title[i].text)
                title_page.append(title[i].get_attribute("href"))
                # print(title_name[j],title_page[j])
                j += 1
            j = 0
            for i in range(len(artist)):
                artist_name.append(artist[i].text)
                artist_page.append(artist[i].get_attribute("href"))
                # print(artist_name[j],artist_page[j])
                j += 1
            # print(len(picture_url),len(icon_url),len(title_name))
            # print(len(pixiv["contents"])-1)
            for i in range(len(pixiv["contents"]) - 1):
                pixiv["contents"][i + 1]["hero"]["url"] = picture_url[i]
                pixiv["contents"][i +
                                  1]["hero"]["action"]["uri"] = picture_url[i]
                pixiv["contents"][
                    i + 1]["body"]["contents"][0]["text"] = title_name[i]
                pixiv["contents"][
                    i +
                    1]["body"]["contents"][0]["action"]["uri"] = title_page[i]
                pixiv["contents"][i + 1]["footer"]["contents"][0]["contents"][
                    0]["url"] = icon_url[i]
                pixiv["contents"][i + 1]["footer"]["contents"][0]["contents"][
                    0]["action"]["uri"] = artist_page[i]
                pixiv["contents"][i + 1]["footer"]["contents"][1]["contents"][
                    0]["text"] = artist_name[i]

            send_flex_message(reply_token, f"pixiv", pixiv)
            self.in_pixiv = True