diff options
| author | 2021-02-16 21:35:52 -0500 | |
|---|---|---|
| committer | 2021-02-16 21:35:52 -0500 | |
| commit | fc83315c164afd74734adf27e0f7fec2011904aa (patch) | |
| tree | d5976be93924dc4cd76c41e5e3f13bb44b6516b3 /gallery_dl/extractor/pixiv.py | |
| parent | 2e29d2158d56879e5578dfabf9e8c0fa2e855ccf (diff) | |
New upstream version 1.16.5.upstream/1.16.5
Diffstat (limited to 'gallery_dl/extractor/pixiv.py')
| -rw-r--r-- | gallery_dl/extractor/pixiv.py | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/gallery_dl/extractor/pixiv.py b/gallery_dl/extractor/pixiv.py index a872ada..be976e9 100644 --- a/gallery_dl/extractor/pixiv.py +++ b/gallery_dl/extractor/pixiv.py @@ -510,49 +510,48 @@ class PixivAppAPI(): def __init__(self, extractor): self.extractor = extractor self.log = extractor.log - self.username, self.password = extractor._get_auth_info() + self.username = extractor._get_auth_info()[0] self.user = None + extractor.session.headers.update({ + "App-OS" : "ios", + "App-OS-Version": "13.1.2", + "App-Version" : "7.7.6", + "User-Agent" : "PixivIOSApp/7.7.6 (iOS 13.1.2; iPhone11,8)", + "Referer" : "https://app-api.pixiv.net/", + }) + self.client_id = extractor.config( "client-id", self.CLIENT_ID) self.client_secret = extractor.config( "client-secret", self.CLIENT_SECRET) - extractor.session.headers.update({ - "App-OS": "ios", - "App-OS-Version": "10.3.1", - "App-Version": "6.7.1", - "User-Agent": "PixivIOSApp/6.7.1 (iOS 10.3.1; iPhone8,1)", - "Referer": "https://app-api.pixiv.net/", - }) + + token = extractor.config("refresh-token") + if token is None or token == "cache": + token = _refresh_token_cache(self.username) + self.refresh_token = token def login(self): """Login and gain an access token""" - self.user, auth = self._login_impl(self.username, self.password) + self.user, auth = self._login_impl(self.username) self.extractor.session.headers["Authorization"] = auth @cache(maxage=3600, keyarg=1) - def _login_impl(self, username, password): - if not username or not password: + def _login_impl(self, username): + if not self.refresh_token: raise exception.AuthenticationError( - "Username and password required") + "'refresh-token' required.\n" + "Run `gallery-dl oauth:pixiv` to get one.") + self.log.info("Refreshing access token") url = "https://oauth.secure.pixiv.net/auth/token" data = { - "client_id": self.client_id, - "client_secret": self.client_secret, - "get_secure_url": 1, + "client_id" : self.client_id, + "client_secret" : self.client_secret, + "grant_type" : "refresh_token", + "refresh_token" : self.refresh_token, + "get_secure_url": "1", } - refresh_token = _refresh_token_cache(username) - - if refresh_token: - self.log.info("Refreshing access token") - data["grant_type"] = "refresh_token" - data["refresh_token"] = refresh_token - else: - self.log.info("Logging in as %s", username) - data["grant_type"] = "password" - data["username"] = username - data["password"] = password time = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S+00:00") headers = { @@ -565,11 +564,9 @@ class PixivAppAPI(): url, method="POST", headers=headers, data=data, fatal=False) if response.status_code >= 400: self.log.debug(response.text) - raise exception.AuthenticationError() + raise exception.AuthenticationError("Invalid refresh token") data = response.json()["response"] - if not refresh_token: - _refresh_token_cache.update(username, data["refresh_token"]) return data["user"], "Bearer " + data["access_token"] def illust_detail(self, illust_id): |
