def auth(self, username=None, password=None, refresh_token=None): url = 'https://oauth.secure.pixiv.net/auth/token' headers = { 'App-OS': 'ios', 'App-OS-Version': '10.3.1', 'App-Version': '6.8.3', 'User-Agent': 'PixivIOSApp/6.8.3 (iOS 10.3.1; iPhone8,1)', } data = { 'get_secure_url': 1, 'client_id': 'MOBrBDS8blbauoSck0ZfDbtuzpyT', 'client_secret': 'lsACyCD94FhDUtGTXi3QzcFE2uU1hqtDaKeqrdwj', } if CommonUtils.is_not_empty(username) and CommonUtils.is_not_empty( password): data['grant_type'] = 'password' data['username'] = username data['password'] = password elif (refresh_token is not None) or (self.refresh_token is not None): data['grant_type'] = 'refresh_token' data['refresh_token'] = refresh_token or self.refresh_token else: raise PixivError( '[ERROR] auth() but no password or refresh_token is set.') r = requests.post(url, headers=headers, data=data, proxies=pixiv_config.PROXIES) if r.status_code not in [200, 301, 302]: if data['grant_type'] == 'password': raise PixivError( '[ERROR] auth() failed! check username and password.\nHTTP %s: %s' % (r.status_code, r.text), header=r.headers, body=r.text) else: raise PixivError( '[ERROR] auth() failed! check refresh_token.\nHTTP %s: %s' % (r.status_code, r.text), header=r.headers, body=r.text) token = None try: token = parse_json(r.text) self.access_token = token.response.access_token self.user_id = token.response.user.id self.refresh_token = token.response.refresh_token except Exception as e: print(e) raise PixivError('Get access_token error! Response: %s' % token, header=r.headers, body=r.text) print("ACCESS TOKEN " + self.access_token) print("ACCESS Refresh Token " + self.refresh_token) return token
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)