示例#1
0
 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
示例#2
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)