Exemplo n.º 1
0
 def total_episode_count(self):
     '''
     webtoon_id에 해당하는 실제 웹툰의 총 episode 수를 리턴
     requests를 사용
     '''
     utils.get_webtoon_episode_list(self.webtoon_id)
     return int(el[0].no)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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
        )  # 추가된 에피소드의 개수 - 다른 리스트를 만들면서 요소간의 순서 문제와 추가된 에피소드 개수 문제도 해결.
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 def get_episode_list(self, page=1):
     el = utils.get_webtoon_episode_list(self.webtoon_id, page)
     self.episode_list.extend(el)