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)
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)
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)
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)
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
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
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
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)
def on_enter_start(self, event): reply_token = event.reply_token send_flex_message(reply_token,"start",flex_message.start)
def on_enter_USA_index(self, event): reply_token = event.reply_token send_flex_message(reply_token,"美股指數",flex_message.index_USA)
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)
def on_enter_begin(self, event): reply_token = event.reply_token send_flex_message(reply_token,"begin",flex_message.begin)
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)
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)
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)
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)
def on_enter_index_search(self, event): reply_token = event.reply_token send_flex_message(reply_token,"指數查詢",flex_message.index_search)
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()
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)
def on_enter_hsr_start_station(self, event=None): contents = get_replay_flex('hsr_end') send_flex_message(event.reply_token, contents)
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)
def on_enter_TW_index(self, event): reply_token = event.reply_token send_flex_message(reply_token,"index_TW",flex_message.index_TW)
def on_enter_start(self, event=None): contents = get_replay_flex('start') send_flex_message(event.reply_token, contents)
def on_enter_menu(self, event): reply_token = event.reply_token flex_msg = flex_msg_menu send_flex_message(reply_token, flex_msg)
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