def on_enter_instruction(self, event): print("I'm entering instuction") user_id = event.source.user_id reply_token = event.reply_token if (self.last_state == "initial"): send_push_message(user_id, TextSendMessage(text='menu => 進入選單')) self.ins_back_ini() elif (self.last_state == "menu"): send_push_message( user_id, TextSendMessage(text='menu => 進入選單\n\npixiv => 進入pixiv小工具')) self.ins_back_menu() elif (self.last_state == "pixiv"): send_push_message( user_id, TextSendMessage( text= 'menu => 進入選單\n\nusers id => 找繪師 ex:users 1234\n\nartworks id => 找作品 ex:artworks 1234\n\nwa scraw_depth => 隨便看看,scraw_depth為爬蟲深度 ex:wa 20\n\nwa => 隨便看看,圖從上一次爬蟲之中隨機挑選出' )) self.ins_back_pix() elif (self.last_state == "find_pixiv_id"): send_push_message( user_id, TextSendMessage( text= 'menu => 進入選單\n\npixiv => 回pixiv小工具\n\nad 年-月-日 => 找繪師從現在時間到某指定日期間的作品 ex:ad 2020-12-21\n\nrd 天數 => 找繪師從現在時間到幾天前之間的作品 ex:rd 10\n\ndownload => 透過網址下載圖片(圖片為透過ad、rd指令取得的那些,建議將網址複製到無痕視窗,如果用一般視窗開的話可能要先清一下紀錄0.0)' )) self.ins_back_find()
def on_enter_fsm(self, event): print("I'm entering work fsm") user_id = event.source.user_id reply_token = event.reply_token send_push_message( user_id, ImageSendMessage( original_content_url='https://testmylinebot777.herokuapp.com/', preview_image_url='https://testmylinebot777.herokuapp.com/')) send_text_message(reply_token, "current state:" + str(self.last_state)) if (self.last_state == "initial"): self.ins_back_ini() elif (self.last_state == "menu"): self.ins_back_menu() elif (self.last_state == "pixiv"): self.ins_back_pix() elif (self.last_state == "find_pixiv_id"): self.ins_back_find()
def on_enter_download(self, event): user_id = event.source.user_id if (len(self.download_url) != 0): yourPath = "img" try: shutil.rmtree(yourPath) except OSError as e: print(e) else: print("The directory is deleted successfully") os.makedirs('img/', exist_ok=True) for i in range(len(self.download_url)): url = self.download_url[i] r = requests.get(self.download_url[i]) with open( 'img/' + self.download_url[i] [self.download_url[i].find("/img/") + 5:].replace( "/", "_"), 'wb') as f: #將圖片下載下來 f.write(r.content) allFileList = os.listdir(yourPath) with zipfile.ZipFile('img/archive.zip', 'w') as zf: for i in range(len(allFileList)): print(allFileList[i]) zf.write('img/' + allFileList[i]) os.remove('img/' + allFileList[i]) send_push_message( user_id, TextSendMessage( text= "https://testmylinebot777.herokuapp.com/download (開無痕視窗輸入網址)" )) else: send_push_message(user_id, TextSendMessage(text="沒有要下載的圖片")) self.back_artist_artwork()
def on_enter_demo(): user_id = event.source.user_id send_push_message(user_id, TextSendMessage(text="demo"))
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
def on_enter_walk_around(self, event): print("I'm entering work around") text = event.message.text user_id = event.source.user_id reply_token = event.reply_token if (self.re_scraw): self.driver.get("https://www.pixiv.net/ranking.php") send_push_message(user_id, TextSendMessage(text='請稍後回應...')) time.sleep(4) try: end = int(text.split(" ")[1]) except: end = 10 print(end) if (end < 10): end = 10 if (end > 40): end = 40 for x in range(1, end): self.driver.execute_script("window.scrollTo(0," + str(1000 * x) + ")") time.sleep(0.25) time.sleep(3) picture_url = self.driver.find_elements_by_class_name( "_thumbnail.ui-scroll-view") self.correct_picture_url = [] self.icon_url = [] title_name = self.driver.find_elements_by_css_selector("a.title") self.correct_title_name = [] self.container = self.driver.find_elements_by_class_name( "user-container.ui-profile-popup") self.title_page = [] self.artist_name = [] self.artist_page = [] append_num = [] self.correct = 0 print(len(picture_url), len(self.container)) for i in range(len(picture_url)): picture_url[i] = picture_url[i].get_attribute("src") # print(i,picture_url[i]) if "https:" not in picture_url[i]: self.correct = i else: picture_url[ i] = "https://i.pixiv.cat/img-master" + picture_url[i][ picture_url[i].find("/img/"):picture_url[i]. rfind("_p0_" )] + "_p0_master1200" + picture_url[i][-4:] self.correct_picture_url.append(picture_url[i]) append_num.append(i) for i in append_num: self.icon_url.append( self.container[i].get_attribute("data-profile_img")) # print(icon_url[i]) if (self.icon_url[-1] != "https://s.pximg.net/common/images/no_profile_s.png"): self.icon_url[-1] = "https://i.pixiv.cat" + self.icon_url[ -1][self.icon_url[-1].find("/user-profile/" ):self.icon_url[-1]. rfind("_50")] + "_170" + self.icon_url[-1][-4:] # print(icon_url[i]) for i in append_num: self.title_page.append(title_name[i].get_attribute("href")) self.correct_title_name.append(title_name[i].text) # print(title_name[i],title_page[i]) for i in append_num: self.artist_name.append( self.container[i].get_attribute("data-user_name")) self.artist_page.append( self.container[i].get_attribute("href")) # print(artist_name[i],artist_page[i]) self.appear_list = [] self.re_scraw = False self.driver.get("https://www.pixiv.net/ranking.php") print(len(append_num)) print(len(self.correct_picture_url), len(self.icon_url), len(self.artist_name), len(self.artist_page), len(self.correct_title_name), len(self.title_page)) for i in range(len(walk_around["contents"])): tmp = random.randint(0, len(self.correct_picture_url) - 1) while (tmp in self.appear_list): tmp = random.randint(0, len(self.correct_picture_url) - 1) self.appear_list.append(tmp) if ((len(self.correct_picture_url) - len(self.appear_list)) < 10 or (len(self.appear_list) / len(self.correct_picture_url)) > 0.75): self.appear_list = [] print(tmp) print(self.correct_picture_url[tmp], self.icon_url[tmp], self.correct_title_name[tmp]) walk_around["contents"][i]["hero"][ "url"] = self.correct_picture_url[tmp] walk_around["contents"][i]["hero"]["action"][ "uri"] = self.correct_picture_url[tmp] walk_around["contents"][i]["body"]["contents"][0][ "text"] = self.correct_title_name[tmp] walk_around["contents"][i]["body"]["contents"][0]["action"][ "uri"] = self.title_page[tmp] walk_around["contents"][i]["footer"]["contents"][0]["contents"][0][ "url"] = self.icon_url[tmp] walk_around["contents"][i]["footer"]["contents"][0]["contents"][0][ "action"]["uri"] = self.artist_page[tmp] walk_around["contents"][i]["footer"]["contents"][1]["contents"][0][ "text"] = self.artist_name[tmp] # send_flex_message(reply_token, f"walk_around", walk_around) send_push_message( user_id, FlexSendMessage(alt_text='error', contents=walk_around)) self.back_pixiv(event)
def on_enter_find_artist_artwork(self, event): print("I'm entering find_artist_artwork") text = event.message.text reply_token = event.reply_token user_id = event.source.user_id page = 2 url = self.driver.current_url self.driver.get(url + "/artworks") print(self.driver.current_url) self.download_url = [] absdate_pattern = r"(ad )+([0-9]*)+(-)+([0-9]*)+(-)+[0-9]*" # reldate_pattern = r"(rd )+[0-9]*" if ((re.fullmatch(absdate_pattern, text.lower())) != None): # 到某個指定日期 localtime = time.time() # a = "2013-10-10 23:40:00" timeArray = time.strptime( text.split(" ")[1] + " 00:00:00", "%Y-%m-%d %H:%M:%S") #轉換為時間戳: targettime = int(time.mktime(timeArray)) while (True): time.sleep(2) for i in range(4): self.driver.execute_script( "window.scrollTo(0,document.body.scrollHeight/4*" + str(i + 1) + ")") time.sleep(1) picture_url = self.driver.find_elements_by_css_selector( "img.rp5asc-10.leQnFG") print(len(picture_url)) if (len(picture_url) == 0): send_push_message(user_id, TextSendMessage(text='search end')) # send_text_message(reply_token,"search end") self.driver.get(url) self.back_id() return # print(localtime,targettime,len(picture_url)) for i in range(len(picture_url)): picture_url[i] = picture_url[i].get_attribute("src") picture_time = picture_url[ i][picture_url[i].find("/img/") + 5:picture_url[i].find("/img/") + 15] picture_time.replace("/", "-") # print(picture_time) timeArray = time.strptime( picture_time.replace("/", "-") + " 00:00:00", "%Y-%m-%d %H:%M:%S") picture_time = int(time.mktime(timeArray)) # print(picture_time) if (picture_time < targettime): send_push_message(user_id, TextSendMessage(text='search end')) self.driver.get(url) # send_text_message(reply_token,"search end") self.back_id() return picture_url[ i] = "https://i.pixiv.cat/img-master" + picture_url[i][ picture_url[i].find("/img/"):picture_url[i]. rfind("_p0_" )] + "_p0_master1200" + picture_url[i][-4:] self.download_url.append(picture_url[i]) send_push_message( user_id, ImageSendMessage(original_content_url=picture_url[i], preview_image_url=picture_url[i])) self.driver.get(url + "/artworks?p=" + str(page)) page += 1 else: #幾天前 localtime = time.time() targettime = localtime - int(text.split(" ")[1]) * 86400 while (True): time.sleep(2) for i in range(4): self.driver.execute_script( "window.scrollTo(0,document.body.scrollHeight/4*" + str(i + 1) + ")") time.sleep(1) picture_url = self.driver.find_elements_by_css_selector( "img.rp5asc-10.leQnFG") if (len(picture_url) == 0): send_push_message(user_id, TextSendMessage(text='search end')) self.driver.get(url) # send_text_message(reply_token,"search end") self.back_id() return print(localtime, targettime, len(picture_url)) for i in range(len(picture_url)): picture_url[i] = picture_url[i].get_attribute("src") picture_time = picture_url[ i][picture_url[i].find("/img/") + 5:picture_url[i].find("/img/") + 15] picture_time.replace("/", "-") print(picture_time) timeArray = time.strptime( picture_time.replace("/", "-") + " 00:00:00", "%Y-%m-%d %H:%M:%S") picture_time = int(time.mktime(timeArray)) print(picture_time) if (picture_time < targettime): send_push_message(user_id, TextSendMessage(text='search end')) self.driver.get(url) # send_text_message(reply_token,"search end") self.back_id() return picture_url[ i] = "https://i.pixiv.cat/img-master" + picture_url[i][ picture_url[i].find("/img/"):picture_url[i]. rfind("_p0_" )] + "_p0_master1200" + picture_url[i][-4:] self.download_url.append(picture_url[i]) send_push_message( user_id, ImageSendMessage(original_content_url=picture_url[i], preview_image_url=picture_url[i])) self.driver.get(url + "/artworks?p=" + str(page)) page += 1 self.back_id()