[skeb] add 'sent-requests' option (#2322) (#2330)

* Update skeb.py

* Update configuration.rst

* flake8
pull/2359/head
Alice 3 years ago committed by GitHub
parent 781fdfa212
commit f1cab23724
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1979,6 +1979,16 @@ Description
Download videos. Download videos.
extractor.skeb.sent-requests
-------------------------
Type
``bool``
Default
``false``
Description
Download sent requests.
extractor.skeb.thumbnails extractor.skeb.thumbnails
------------------------- -------------------------
Type Type

@ -22,10 +22,11 @@ class SkebExtractor(Extractor):
Extractor.__init__(self, match) Extractor.__init__(self, match)
self.user_name = match.group(1) self.user_name = match.group(1)
self.thumbnails = self.config("thumbnails", False) self.thumbnails = self.config("thumbnails", False)
self.sent_requests = self.config("sent-requests", False)
def items(self): def items(self):
for post_num in self.posts(): for user_name, post_num in self.posts():
response, post = self._get_post_data(post_num) response, post = self._get_post_data(user_name, post_num)
yield Message.Directory, post yield Message.Directory, post
for data in self._get_urls_from_post(response, post): for data in self._get_urls_from_post(response, post):
url = data["file_url"] url = data["file_url"]
@ -38,24 +39,33 @@ class SkebExtractor(Extractor):
url = "{}/api/users/{}/works".format(self.root, self.user_name) url = "{}/api/users/{}/works".format(self.root, self.user_name)
params = {"role": "creator", "sort": "date", "offset": 0} params = {"role": "creator", "sort": "date", "offset": 0}
headers = {"Referer": self.root, "Authorization": "Bearer null"} headers = {"Referer": self.root, "Authorization": "Bearer null"}
do_requests = self.sent_requests
while True: while True:
posts = self.request(url, params=params, headers=headers).json() posts = self.request(url, params=params, headers=headers).json()
for post in posts: for post in posts:
post_num = post["path"].rpartition("/")[2] post_num = post["path"].rpartition("/")[2]
user_name = post["path"].split("/")[1][1:]
if post["private"]: if post["private"]:
self.log.debug("Skipping %s (private)", post_num) self.log.debug("Skipping @%s/%s (private)",
user_name, post_num)
continue continue
yield post_num yield user_name, post_num
if len(posts) < 30: if len(posts) < 30:
if do_requests:
params["offset"] = 0
params['role'] = "client"
do_requests = False
continue
else:
return return
params["offset"] += 30 params["offset"] += 30
def _get_post_data(self, post_num): def _get_post_data(self, user_name, post_num):
url = "{}/api/users/{}/works/{}".format( url = "{}/api/users/{}/works/{}".format(
self.root, self.user_name, post_num) self.root, user_name, post_num)
headers = {"Referer": self.root, "Authorization": "Bearer null"} headers = {"Referer": self.root, "Authorization": "Bearer null"}
resp = self.request(url, headers=headers).json() resp = self.request(url, headers=headers).json()
creator = resp["creator"] creator = resp["creator"]
@ -130,7 +140,7 @@ class SkebPostExtractor(SkebExtractor):
self.post_num = match.group(2) self.post_num = match.group(2)
def posts(self): def posts(self):
return (self.post_num,) return (self.user_name, self.post_num,)
class SkebUserExtractor(SkebExtractor): class SkebUserExtractor(SkebExtractor):

Loading…
Cancel
Save