示例#1
0
 def handle_url(self):
     url = self.url_var.get().strip()
     path = self.path_var.get().strip()
     if url == '' or path == '':
         showwarning("warning", "url or path can't be empty!")
         print("warning", "url or path can't be empty!")
         return
     if not os.path.exists(path):
         showerror("error", " No such file or directory!")
         print('error', 'No such file or directory')
         return
     # 插画详情页下载
     if re.match("htt(p|ps)://www.pixivision.net/(zh|ja|en|zh-tw)/a/\d*",
                 url):
         showinfo("info", "Start download pixivision.net page:" + url)
         print("info", "Start download pixivision.net page:" + url)
         IlluDownloadThread(
             url.strip(),
             path=path,
             create_path=True,
             downloader=self.downloader).register_hook(
                 success_callback=self.download_callback).start()
         return
     # 插画列表页下载
     elif re.match(
             r"htt(p|ps)://www.pixivision.net/(zh|ja|en|zh-tw)/c/illustration(/|)(\?p=\d+|)",
             url):
         showinfo("info", "Start download pixivision.net page:" + url)
         print("info", "Start download pixivision.net page:" + url)
         PixivisionLauncher(
             url, save_path=path, downloader=self.downloader).register_hook(
                 success_callback=self.download_callback).start()
         return
     elif CommonUtils.set_int(url) != 0:
         showinfo(
             "info", "Downloading id:" + str(CommonUtils.set_int(url)) +
             " illustration")
         print(
             "info", "Downloading id:" + str(CommonUtils.set_int(url)) +
             " illustration")
         self.queue.add_work(
             Task(TASK_TYPE_ID,
                  DOWNLOAD_MODE_ID,
                  id=CommonUtils.set_int(url),
                  path=path))
         return
     elif url.startswith("http"):
         # 无法解析的pixivison站 或非 pixiv站 不支持
         if url.find("pixivision.net") != -1:
             showerror("error", "The download link is not supported")
             print("error", "The download link is not supported")
             return
         showinfo("info", "Downloading  url:" + url)
         print("info", "Downloading  url:" + url)
         self.queue.add_work(
             Task(TASK_TYPE_URL, DOWNLOAD_MODE_URL, url=url, path=path))
     else:
         showerror("error", "")
示例#2
0
 def search(self, keywords, path):
     id_set = set()
     page = CommonUtils.set_int(self.page_number.get(), 2)
     fav_num = CommonUtils.set_int(self.fav_num.get(), 0)
     tasks = []
     for p in range(1, page + 1):
         result = self.search_handler.search(keywords,
                                             page=p,
                                             download_threshold=fav_num)
         if len(result) == 0:
             print('warning',
                   'Page:' + str(p) + ' Search  results are Empty')
             continue
         for illu in result:
             if illu.id in id_set:
                 continue
             else:
                 task = Task(TASK_TYPE_SEARCH,
                             DOWNLOAD_MODE_ID,
                             title='search ' + keywords,
                             path=path,
                             p_limit=CommonUtils.set_int(
                                 self.p_limit.get(), 0),
                             id=illu.id,
                             illu=illu,
                             get_from='search_page')
                 id_set.add(illu.id)
                 tasks.append(task)
     print('Search ' + keywords + ' from web page get:' + str(len(tasks)))
     api_search_data = api_search(keywords,
                                  self.api,
                                  page=page,
                                  download_threshold=fav_num,
                                  id_set=id_set)
     if len(api_search_data) == 0:
         print('warning', 'Api search results are empty')
     else:
         print('Search ' + keywords + ' from pixiv Api get:' +
               str(len(api_search_data)))
         for illu in api_search_data:
             task = Task(TASK_TYPE_SEARCH_API,
                         DOWNLOAD_MODE_DETAIL,
                         path=path,
                         p_limit=CommonUtils.set_int(self.p_limit.get(), 0),
                         illu=illu,
                         title='search ' + keywords,
                         get_from='search_api')
             tasks.append(task)
     all_count = len(tasks)
     if all_count > 0:
         current_count = AtomicInteger.AtomicInteger()
         if not os.path.exists(path):
             os.makedirs(path)
         for task in tasks:
             task.all_count = all_count
             task.current_count = current_count
             self.queue.add_work(task)
示例#3
0
    def related(self, id_var, path):
        page = CommonUtils.set_int(self.page_number.get(), 2)
        fav_num = CommonUtils.set_int(self.fav_num.get(), 0)
        illusts = []
        result = self.api.illust_related(id_var)
        next_url = result.next_url
        datas = result.illusts
        if len(datas) == 0:
            print('warning',
                  'Get related illus of ' + str(id_var) + ' are empty')
            return
        illusts.extend(datas)
        page -= 1
        while len(datas) > 0 and CommonUtils.is_not_empty(
                next_url) and page > 0:
            result = self.api.get(next_url)
            datas = result.illusts
            next_url = result.next_url
            illusts.extend(datas)
            page -= 1

        tasks = []
        id_set = set()
        p_limit = CommonUtils.set_int(self.p_limit.get(), 0)
        for illust in illusts:
            if not illust or illust.id in id_set:
                continue
            if fav_num > 0:
                if illust.total_bookmarks < fav_num:
                    continue
            task = Task(TASK_TYPE_RELATED,
                        DOWNLOAD_MODE_DETAIL,
                        path=path,
                        p_limit=p_limit,
                        illu=illust,
                        title="Related by id " + str(id_var),
                        get_from='related')
            tasks.append(task)
            id_set.add(illust.id)
        if len(tasks) == 0:
            print('warning',
                  'Get related illus of ' + str(id_var) + ' are empty')
            return
        else:
            print('Get related illus of ' + str(id_var) + ' All:' +
                  str(len(tasks)))
        all_count = len(tasks)
        current_count = AtomicInteger.AtomicInteger()
        if not os.path.exists(path):
            os.makedirs(path)
        for task in tasks:
            task.all_count = all_count
            task.current_count = current_count
            self.queue.add_work(task)
示例#4
0
 def ranking(self, path, mode, date, pages=1):
     path = path + "/ranking_" + mode + '_' + date
     page = 0
     offset = 0
     tasks = []
     while page < pages:
         ranking_data = self.api.app_ranking(mode=mode, date=date, offset=offset).illusts
         page = page + 1
         if len(ranking_data) > 0:
             print ('Get from ranking(page=' + str(page) + '):' + str(len(ranking_data)))
             for illu in ranking_data:
                 task = Task(TASK_TYPE_RANKING, DOWNLOAD_MODE_DETAIL, path=path,
                             p_limit=CommonUtils.set_int(self.p_limit.get(), 0),
                             illu=illu, title="Ranking_" + mode + "_" + date, get_from='ranking')
                 tasks.append(task)
                 offset = offset + 1
         else:
             print ('warning', 'Ranking(page=' + str(page) + ') results are empty')
             showerror("error", 'Ranking(page=' + str(page) + ') results are empty')
             break
     all_count = len(tasks)
     if all_count > 0:
         current_count = AtomicInteger.AtomicInteger()
         if not os.path.exists(path):
             os.makedirs(path)
         for task in tasks:
             task.all_count = all_count
             task.current_count = current_count
             self.queue.add_work(task)
示例#5
0
 def handle_related(self):
     id_var = CommonUtils.set_int(self.id_var.get().strip())
     if id_var <= 0:
         showwarning("warning", "Please enter search keywords!")
         print("warning", "Please enter search keywords!")
         return
     if CommonUtils.is_empty(self.path_var.get()):
         showwarning("warning", "path can't be empty!")
         print("warning", "path can't be empty!")
         return
     path = self.path_var.get().strip()
     if not os.path.exists(path):
         showerror("error", " No such file or directory!")
         print('error', 'No such file or directory')
         return
     path = path + "/" + CommonUtils.filter_dir_name("related_" +
                                                     str(id_var))
     showinfo("info", "Get related illus of " + str(id_var) + " :")
     related_handler = Thread(target=self.related, args=(id_var, path))
     related_handler.start()
示例#6
0
 def handle_ranking(self):
     mode = self.mode_var.get()
     path = self.path_var.get().strip()
     page = CommonUtils.set_int(self.page_number.get(), 2)
     date = self.date_var.get().strip()
     if CommonUtils.is_empty(path):
         showwarning("warning", "path can't be empty!")
         print ("warning", "path can't be empty!")
         return
     if not os.path.exists(path):
         showerror("error", " No such file or directory!")
         print ('error', 'No such file or directory')
         return
     if not CommonUtils.validate_date_str(date):
         showerror("error", "Date Wrong!")
         print ('error', 'Date Wrong')
         return
     if datetime.datetime.strptime(date, '%Y-%m-%d') > datetime.datetime.now():
         showerror("error", "The date can not be greater than the day!")
         print ('error', 'The date can not be greater than the day')
         return
     showinfo("info", "Get ranking...")
     ranking_handler = Thread(target=self.ranking, args=(path, mode, date, page))
     ranking_handler.start()