def total_episode_count(self): ''' webtoon_id에 해당하는 실제 웹툰의 총 episode 수를 리턴 requests를 사용 ''' utils.get_webtoon_episode_list(self.webtoon_id) return int(el[0].no)
def update_episode_list(self, force_update=False): """ self.episode_list에 존재하지 않는 episode들을 self.episode_list에 추가 :param force_update: 이미 존재하는 episode도 강제로 업데이트 :return: 추가된 episode의 수 (int) """ # force_update 가 True일 경우 웹상의 최신 번호를 가져와 1번까지 돈다. if force_update: result = self.total_episode_count count = result page = (count // 10) + 1 while page > 0 and count > 0: new_episode_list = utils.get_webtoon_episode_list( self.webtoon_id, page) for i in range(1, page + 1): if count % 10: for epi in new_episode_list[:count % 10]: episode_info_string = f"{epi.no}|{epi.image_url}|{epi.title}|{epi.rate}|{epi.date}" self.episode_list.append(episode_info_string) count = count % 10 page -= 1 else: for epi in new_episode_list: episode_info_string = f"{epi.no}|{epi.image_url}|{epi.title}|{epi.rate}|{epi.date}" self.episode_list.append(episode_info_string) count -= 10 page -= 1 return result if self.up_to_date: return 0 else: # last_episode_web은 웹상의 최신화의 번호(int)를 넣어준다 last_episode_web = self.total_episode_count # last_episode_local은 로컬에 저장되어 있는 번호중 최신 번호(int)를 넣어준다. last_episode_local = utils.get_last_episode_local(self.webtoon_id) result = last_episode_web - last_episode_local count = result # 한 페이지에 10개의 화가 들어가므로 10화당 1페이지를 추가해준다. # 리스트와 달리 홈페이지에서는 첫페이지가 1이므로 +1을 추가해준다. page = (count // 10) + 1 while page > 0 and count > 0: new_episode_list = utils.get_webtoon_episode_list( self.webtoon_id, page) for i in range(1, page + 1): if count % 10: for epi in new_episode_list[:count % 10]: episode_info_string = f"{epi.no}|{epi.image_url}|{epi.title}|{epi.rate}|{epi.date}" self.episode_list.append(episode_info_string) count = count % 10 page -= 1 else: for epi in new_episode_list: episode_info_string = f"{epi.no}|{epi.image_url}|{epi.title}|{epi.rate}|{epi.date}" self.episode_list.append(episode_info_string) count -= 10 page -= 1 return result
def update_episode_list(self, force_update=False): """ self.episode_list에 존재하지 않는 episode들을 self.episode_list에 추가 :param force_update: 이미 존재하는 episode도 강제로 업데이트 :return: 추가된 episode의 수 (int) """ new_list = [] for i in range(0, 1000): page = utils.get_webtoon_episode_list(self.webtoon_id, i) new_list.extend(page) # page = [ep1, ep2, ep3...] if int(page[-1].no) == 1: break if self.episode_list == []: return '로드부터 하세요' # 같으면 안함 if len(new_list) == len(self.episode_list): return '최신리스트와 똑같음' else: diff = list(set(new_list) - set(self.episode_list)) if force_update: self.episode_list = new_list return len(new_list) else: self.episode_list = self.episode_list + diff self.episode_list = sorted(self.episode_list, reverse=True, key=lambda x: int(x.no)) return len(diff)
def update_episode_list(self, force_update=False): ''' 1. cur_recent_episode_no = self.episode_list에서 가장 최신화의 no 2. while/for문 내부에서 page값을 늘려가며 utils.get_webtoon_episode_list를 호출 반환된 list(episode)들을 해당 episode의 no가 recent_episode_no보다 클 때 까지만 self.episode_list에 추가 self.episode_list에 존재하지 않는 episode들을 self.episode_list에 추가 param force_update=True : 이미 존재하는 episode들도 강제로 업데이트 return: 추가된 episode의 수(int) ''' # self.episode_list - 비어 있는 경우 None을 주어야 하므로... # recent_episode_no = self.episode_list[0].no if self.episode_list else None # willpages=(self.get_total_episode_count - recent_episode_no)//10+1 if self.episode_list else willpages = self.get_total_episode_count//10+1 # for i in range(1,willpages+1): # items=utils.get_webtoon_episode_list(self.webtoon_id,i) # self.episode_list.insert(0,items) # 변수 없이 break의 실행을 확인하는 방법 - for(순회가 참일때까지 - while+if) / else # 올려주신 코드 recent_episode_no = self.episode_list[ 0].no if self.episode_list else 0 # 처음부터 끝까지 가져오는 경우 print('- Update episode list start (Recent episode no: %s) -' % recent_episode_no) page = 1 new_list = list() while True: print(' Get webtoon episode list (Loop %s)' % page) # 계속해서 증가하는 'page'를 이용해 다음 episode리스트들을 가져옴 el = utils.get_webtoon_episode_list(self.webtoon_id, page) # 가져온 episode list를 순회 for episode in el: # 각 episode의 no가 recent_episode_no보다 클 경우, # self.episode_list에 추가 if int(episode.no) > int(recent_episode_no): new_list.append(episode) if int(episode.no) == 1: # 첫화부터 끝까지 가져오는 경우를 위한 처리. break else: break # break가 호출되지 않았을 때 else: # 계속해서 진행해야 하므로 page값을 증가시키고 continue로 처음gi으로 돌아감 page += 1 continue # el의 for문에서 break가 호출될 경우(더 이상 추가할 episode없음 # while문을 빠져나가기위해 break실행 break self.episode_list = new_list + self.episode_list return len( new_list ) # 추가된 에피소드의 개수 - 다른 리스트를 만들면서 요소간의 순서 문제와 추가된 에피소드 개수 문제도 해결.
def update_episode_list(self, force_update=False): """ 1. recent_episode_no = self.episode_list에서 가장 최신화의 no 2. while문 또는 for문 내부에서 page값을 늘려가며 utils.get_webtoon_episode_list를 호출 반환된 list(episode)들을 해당 episode의 no가 recent_episode_no보다 클 때 까지만 self.episode_list에 추가 self.episode_list에 존재하지 않는 episode들을 self.episode_list에 추가 :param force_update: 이미 존재하는 episode도 강제로 업데이트 :return: 추가된 episode의 수 (int) """ if force_update: self.episode_list = list() recent_episode_no = self.episode_list[0].no if self.episode_list else 0 print('- Update episode list start (Recent episode no: %s) -' % recent_episode_no) page = 1 new_list = list() while True: print(' Get webtoon episode list (Loop %s)' % page) # 계속해서 증가하는 'page'를 이용해 다음 episode리스트들을 가져옴 el = utils.get_webtoon_episode_list(self.webtoon, page) # 가져온 episode list를 순회 for episode in el: # 각 episode의 no가 recent_episode_no보다 클 경우, # self.episode_list에 추가 if int(episode.no) > int(recent_episode_no): new_list.append(episode) self.webtoon.make_list_html(self.episode_list) episode._make_html() episode._save_images() if int(episode.no) == 1: break else: break # break가 호출되지 않았을 때 else: # 계속해서 진행해야 하므로 page값을 증가시키고 continue로 처음으로 돌아감 page += 1 continue # el의 for문에서 break가 호출될 경우(더 이상 추가할 episode없음 # while문을 빠져나가기위해 break실행 break self.episode_list = new_list + self.episode_list self.webtoon.make_list_html(self.episode_list) self.webtoon.save_thumbnail() self.save() return len(new_list)
def get_last_page_episode_list(self): el = utils.get_webtoon_episode_list( self.webtoon_id, 99999) # url의 page 값은 해당 값 초과하면 자동으로 마지막 페이지 self.episode_list = el return len(self.episode_list)
def get_episode_list(self, page=1): el = utils.get_webtoon_episode_list(self.webtoon_id, page) self.episode_list.extend(el)