yield 3-tuples for Message.Directory
adapt tuples to the same length and semantics as other messages
This commit is contained in:
@@ -42,7 +42,7 @@ class _2chThreadExtractor(Extractor):
|
|||||||
"title" : text.unescape(title)[:50],
|
"title" : text.unescape(title)[:50],
|
||||||
}
|
}
|
||||||
|
|
||||||
yield Message.Directory, thread
|
yield Message.Directory, "", thread
|
||||||
for post in posts:
|
for post in posts:
|
||||||
if files := post.get("files"):
|
if files := post.get("files"):
|
||||||
post["post_name"] = post["name"]
|
post["post_name"] = post["name"]
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class _2chanThreadExtractor(Extractor):
|
|||||||
f"/{self.board}/res/{self.thread}.htm")
|
f"/{self.board}/res/{self.thread}.htm")
|
||||||
page = self.request(url).text
|
page = self.request(url).text
|
||||||
data = self.metadata(page)
|
data = self.metadata(page)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for post in self.posts(page):
|
for post in self.posts(page):
|
||||||
if "filename" not in post:
|
if "filename" not in post:
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class _2chenThreadExtractor(Extractor):
|
|||||||
url = f"{self.root}/{self.board}/{self.thread}"
|
url = f"{self.root}/{self.board}/{self.thread}"
|
||||||
page = self.request(url, encoding="utf-8", notfound="thread").text
|
page = self.request(url, encoding="utf-8", notfound="thread").text
|
||||||
data = self.metadata(page)
|
data = self.metadata(page)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
for post in self.posts(page):
|
for post in self.posts(page):
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class _35photoExtractor(Extractor):
|
|||||||
url = photo["url"]
|
url = photo["url"]
|
||||||
if first:
|
if first:
|
||||||
first = False
|
first = False
|
||||||
yield Message.Directory, photo
|
yield Message.Directory, "", photo
|
||||||
yield Message.Url, url, text.nameext_from_url(url, photo)
|
yield Message.Url, url, text.nameext_from_url(url, photo)
|
||||||
|
|
||||||
def metadata(self):
|
def metadata(self):
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class _4archiveThreadExtractor(Extractor):
|
|||||||
for post in posts:
|
for post in posts:
|
||||||
post.update(data)
|
post.update(data)
|
||||||
post["time"] = int(dt.to_ts(post["date"]))
|
post["time"] = int(dt.to_ts(post["date"]))
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
if "url" in post:
|
if "url" in post:
|
||||||
yield Message.Url, post["url"], text.nameext_from_url(
|
yield Message.Url, post["url"], text.nameext_from_url(
|
||||||
post["filename"], post)
|
post["filename"], post)
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class _4chanThreadExtractor(Extractor):
|
|||||||
"title" : text.unescape(title)[:50],
|
"title" : text.unescape(title)[:50],
|
||||||
}
|
}
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for post in posts:
|
for post in posts:
|
||||||
if "filename" in post:
|
if "filename" in post:
|
||||||
post.update(data)
|
post.update(data)
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class _4chanarchivesThreadExtractor(Extractor):
|
|||||||
|
|
||||||
for post in posts:
|
for post in posts:
|
||||||
post.update(data)
|
post.update(data)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
if "url" in post:
|
if "url" in post:
|
||||||
yield Message.Url, post["url"], post
|
yield Message.Url, post["url"], post
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class _500pxExtractor(Extractor):
|
|||||||
photo["extension"] = photo["image_format"]
|
photo["extension"] = photo["image_format"]
|
||||||
if data:
|
if data:
|
||||||
photo.update(data)
|
photo.update(data)
|
||||||
yield Message.Directory, photo
|
yield Message.Directory, "", photo
|
||||||
yield Message.Url, url, photo
|
yield Message.Url, url, photo
|
||||||
|
|
||||||
def metadata(self):
|
def metadata(self):
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ class _8chanThreadExtractor(_8chanExtractor):
|
|||||||
|
|
||||||
# download files
|
# download files
|
||||||
posts = thread.pop("posts", ())
|
posts = thread.pop("posts", ())
|
||||||
yield Message.Directory, thread
|
yield Message.Directory, "", thread
|
||||||
for post in itertools.chain((thread,), posts):
|
for post in itertools.chain((thread,), posts):
|
||||||
files = post.pop("files", ())
|
files = post.pop("files", ())
|
||||||
if not files:
|
if not files:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class _8musesAlbumExtractor(Extractor):
|
|||||||
if images := data.get("pictures"):
|
if images := data.get("pictures"):
|
||||||
count = len(images)
|
count = len(images)
|
||||||
album = self._make_album(data["album"])
|
album = self._make_album(data["album"])
|
||||||
yield Message.Directory, {"album": album, "count": count}
|
yield Message.Directory, "", {"album": album, "count": count}
|
||||||
for num, image in enumerate(images, 1):
|
for num, image in enumerate(images, 1):
|
||||||
url = self.root + "/image/fl/" + image["publicUri"]
|
url = self.root + "/image/fl/" + image["publicUri"]
|
||||||
img = {
|
img = {
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ class Ao3WorkExtractor(Ao3Extractor):
|
|||||||
else:
|
else:
|
||||||
data["series"] = None
|
data["series"] = None
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for fmt in self.formats:
|
for fmt in self.formats:
|
||||||
try:
|
try:
|
||||||
url = text.urljoin(self.root, fmts[fmt])
|
url = text.urljoin(self.root, fmts[fmt])
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class ArcalivePostExtractor(ArcaliveExtractor):
|
|||||||
f"{self.root}/b/{post['boardSlug']}/{post['id']}"
|
f"{self.root}/b/{post['boardSlug']}/{post['id']}"
|
||||||
post["_http_headers"] = {"Referer": post_url + "?p=1"}
|
post["_http_headers"] = {"Referer": post_url + "?p=1"}
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], file in enumerate(files, 1):
|
for post["num"], file in enumerate(files, 1):
|
||||||
post.update(file)
|
post.update(file)
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class ArtstationExtractor(Extractor):
|
|||||||
asset.update(data)
|
asset.update(data)
|
||||||
adict = asset["asset"]
|
adict = asset["asset"]
|
||||||
asset["num"] = num
|
asset["num"] = num
|
||||||
yield Message.Directory, asset
|
yield Message.Directory, "", asset
|
||||||
|
|
||||||
if adict["has_embedded_player"]:
|
if adict["has_embedded_player"]:
|
||||||
if url := self._extract_embed(asset):
|
if url := self._extract_embed(asset):
|
||||||
@@ -333,7 +333,7 @@ class ArtstationChallengeExtractor(ArtstationExtractor):
|
|||||||
update_url = f"{self.root}/contests/submission_updates.json"
|
update_url = f"{self.root}/contests/submission_updates.json"
|
||||||
|
|
||||||
challenge = self.request_json(challenge_url)
|
challenge = self.request_json(challenge_url)
|
||||||
yield Message.Directory, {"challenge": challenge}
|
yield Message.Directory, "", {"challenge": challenge}
|
||||||
|
|
||||||
params = {"sorting": self.sorting}
|
params = {"sorting": self.sorting}
|
||||||
for submission in self._pagination(submission_url, params):
|
for submission in self._pagination(submission_url, params):
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class AryionExtractor(Extractor):
|
|||||||
if post := self._parse_post(post_id):
|
if post := self._parse_post(post_id):
|
||||||
if data:
|
if data:
|
||||||
post.update(data)
|
post.update(data)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Url, post["url"], post
|
yield Message.Url, post["url"], post
|
||||||
elif post is False and self.recursive:
|
elif post is False and self.recursive:
|
||||||
base = self.root + "/g4/view/"
|
base = self.root + "/g4/view/"
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class AudiochanExtractor(Extractor):
|
|||||||
post["_http_segmented"] = 600000
|
post["_http_segmented"] = 600000
|
||||||
url = file["stream_url"]
|
url = file["stream_url"]
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
text.nameext_from_name(file["filename"], post)
|
text.nameext_from_name(file["filename"], post)
|
||||||
yield Message.Url, url, post
|
yield Message.Url, url, post
|
||||||
|
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ class BehanceGalleryExtractor(BehanceExtractor):
|
|||||||
imgs = self.get_images(data)
|
imgs = self.get_images(data)
|
||||||
data["count"] = len(imgs)
|
data["count"] = len(imgs)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], (url, module) in enumerate(imgs, 1):
|
for data["num"], (url, module) in enumerate(imgs, 1):
|
||||||
data["module"] = module
|
data["module"] = module
|
||||||
data["extension"] = (module.get("extension") or
|
data["extension"] = (module.get("extension") or
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class BellazonExtractor(Extractor):
|
|||||||
data = {"post": post}
|
data = {"post": post}
|
||||||
post["count"] = data["count"] = len(urls)
|
post["count"] = data["count"] = len(urls)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
data["num"] = data["num_internal"] = data["num_external"] = 0
|
data["num"] = data["num_internal"] = data["num_external"] = 0
|
||||||
for info, url, url_img in urls:
|
for info, url, url_img in urls:
|
||||||
url = text.unescape(url or url_img)
|
url = text.unescape(url or url_img)
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class BilibiliArticleExtractor(BilibiliExtractor):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
article["count"] = len(pics)
|
article["count"] = len(pics)
|
||||||
yield Message.Directory, article
|
yield Message.Directory, "", article
|
||||||
for article["num"], pic in enumerate(pics, 1):
|
for article["num"], pic in enumerate(pics, 1):
|
||||||
url = pic["url"]
|
url = pic["url"]
|
||||||
article.update(pic)
|
article.update(pic)
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class BloggerExtractor(BaseExtractor):
|
|||||||
data = {"blog": blog, "post": post}
|
data = {"blog": blog, "post": post}
|
||||||
if metadata:
|
if metadata:
|
||||||
data.update(metadata)
|
data.update(metadata)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
for data["num"], url in enumerate(files, 1):
|
for data["num"], url in enumerate(files, 1):
|
||||||
data["url"] = url
|
data["url"] = url
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class BlueskyExtractor(Extractor):
|
|||||||
self._prepare(post)
|
self._prepare(post)
|
||||||
files = self._extract_files(post)
|
files = self._extract_files(post)
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
if files:
|
if files:
|
||||||
did = post["author"]["did"]
|
did = post["author"]["did"]
|
||||||
base = (f"{self.api.service_endpoint(did)}/xrpc"
|
base = (f"{self.api.service_endpoint(did)}/xrpc"
|
||||||
@@ -336,7 +336,7 @@ class BlueskyInfoExtractor(BlueskyExtractor):
|
|||||||
def items(self):
|
def items(self):
|
||||||
self._metadata_user = True
|
self._metadata_user = True
|
||||||
self.api._did_from_actor(self.groups[0])
|
self.api._did_from_actor(self.groups[0])
|
||||||
return iter(((Message.Directory, self._user),))
|
return iter(((Message.Directory, "", self._user),))
|
||||||
|
|
||||||
|
|
||||||
class BlueskyAvatarExtractor(BlueskyExtractor):
|
class BlueskyAvatarExtractor(BlueskyExtractor):
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class BooruExtractor(BaseExtractor):
|
|||||||
post.update(data)
|
post.update(data)
|
||||||
self._prepare(post)
|
self._prepare(post)
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Url, url, post
|
yield Message.Url, url, post
|
||||||
|
|
||||||
def skip(self, num):
|
def skip(self, num):
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class BoostyExtractor(Extractor):
|
|||||||
"count": len(files),
|
"count": len(files),
|
||||||
}
|
}
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], file in enumerate(files, 1):
|
for data["num"], file in enumerate(files, 1):
|
||||||
data["file"] = file
|
data["file"] = file
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
@@ -260,7 +260,7 @@ class BoostyDirectMessagesExtractor(BoostyExtractor):
|
|||||||
"count": len(files),
|
"count": len(files),
|
||||||
}
|
}
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], file in enumerate(files, 1):
|
for data["num"], file in enumerate(files, 1):
|
||||||
data["file"] = file
|
data["file"] = file
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ class BoothItemExtractor(BoothExtractor):
|
|||||||
item["count"] = 0
|
item["count"] = 0
|
||||||
shop["uuid"] = util.NONE
|
shop["uuid"] = util.NONE
|
||||||
|
|
||||||
yield Message.Directory, item
|
yield Message.Directory, "", item
|
||||||
for num, file in enumerate(files, 1):
|
for num, file in enumerate(files, 1):
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
file["num"] = num
|
file["num"] = num
|
||||||
|
|||||||
@@ -52,5 +52,5 @@ class CatboxFileExtractor(Extractor):
|
|||||||
def items(self):
|
def items(self):
|
||||||
url = text.ensure_http_scheme(self.url)
|
url = text.ensure_http_scheme(self.url)
|
||||||
file = text.nameext_from_url(url, {"url": url})
|
file = text.nameext_from_url(url, {"url": url})
|
||||||
yield Message.Directory, file
|
yield Message.Directory, "", file
|
||||||
yield Message.Url, url, file
|
yield Message.Url, url, file
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class CfakeExtractor(Extractor):
|
|||||||
kwdict["type_name"] = text.unquote(type_name).replace("_", " ")
|
kwdict["type_name"] = text.unquote(type_name).replace("_", " ")
|
||||||
kwdict["sub_id"] = text.parse_int(sub_id)
|
kwdict["sub_id"] = text.parse_int(sub_id)
|
||||||
kwdict["page"] = pnum = text.parse_int(pnum, 1)
|
kwdict["page"] = pnum = text.parse_int(pnum, 1)
|
||||||
yield Message.Directory, {}
|
yield Message.Directory, "", {}
|
||||||
|
|
||||||
base = f"{self.root}/images/{type}/{type_name}/{type_id}"
|
base = f"{self.root}/images/{type}/{type_name}/{type_id}"
|
||||||
if sub_id:
|
if sub_id:
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class CheveretoImageExtractor(CheveretoExtractor):
|
|||||||
}
|
}
|
||||||
|
|
||||||
text.nameext_from_url(file["url"], file)
|
text.nameext_from_url(file["url"], file)
|
||||||
yield Message.Directory, file
|
yield Message.Directory, "", file
|
||||||
yield Message.Url, file["url"], file
|
yield Message.Url, file["url"], file
|
||||||
|
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ class CheveretoVideoExtractor(CheveretoExtractor):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
text.nameext_from_url(file["url"], file)
|
text.nameext_from_url(file["url"], file)
|
||||||
yield Message.Directory, file
|
yield Message.Directory, "", file
|
||||||
yield Message.Url, file["url"], file
|
yield Message.Url, file["url"], file
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class CienArticleExtractor(CienExtractor):
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], file in enumerate(files, 1):
|
for post["num"], file in enumerate(files, 1):
|
||||||
post.update(file)
|
post.update(file)
|
||||||
if "extension" not in file:
|
if "extension" not in file:
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ class CivitaiExtractor(Extractor):
|
|||||||
data["model"], data["version"] = \
|
data["model"], data["version"] = \
|
||||||
self._extract_meta_version(post)
|
self._extract_meta_version(post)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for file in self._image_results(images):
|
for file in self._image_results(images):
|
||||||
file.update(data)
|
file.update(data)
|
||||||
yield Message.Url, file["url"], file
|
yield Message.Url, file["url"], file
|
||||||
@@ -131,7 +131,7 @@ class CivitaiExtractor(Extractor):
|
|||||||
data["extension"] = (
|
data["extension"] = (
|
||||||
self._video_ext if file.get("type") == "video" else
|
self._video_ext if file.get("type") == "video" else
|
||||||
self._image_ext)
|
self._image_ext)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -292,7 +292,7 @@ class CivitaiModelExtractor(CivitaiExtractor):
|
|||||||
"user" : user,
|
"user" : user,
|
||||||
}
|
}
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for file in self._extract_files(model, version, user):
|
for file in self._extract_files(model, version, user):
|
||||||
file.update(data)
|
file.update(data)
|
||||||
yield Message.Url, file["url"], file
|
yield Message.Url, file["url"], file
|
||||||
@@ -599,7 +599,7 @@ class CivitaiGeneratedExtractor(CivitaiExtractor):
|
|||||||
|
|
||||||
for gen in self.api.orchestrator_queryGeneratedImages():
|
for gen in self.api.orchestrator_queryGeneratedImages():
|
||||||
gen["date"] = self.parse_datetime_iso(gen["createdAt"])
|
gen["date"] = self.parse_datetime_iso(gen["createdAt"])
|
||||||
yield Message.Directory, gen
|
yield Message.Directory, "", gen
|
||||||
for step in gen.pop("steps", ()):
|
for step in gen.pop("steps", ()):
|
||||||
for image in step.pop("images", ()):
|
for image in step.pop("images", ()):
|
||||||
data = {"file": image, **step, **gen}
|
data = {"file": image, **step, **gen}
|
||||||
|
|||||||
@@ -800,7 +800,7 @@ class GalleryExtractor(Extractor):
|
|||||||
enum = util.enumerate_reversed
|
enum = util.enumerate_reversed
|
||||||
images = enum(imgs, 1)
|
images = enum(imgs, 1)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
enum_key = self.enum
|
enum_key = self.enum
|
||||||
|
|
||||||
if assets:
|
if assets:
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CyberdropAlbumExtractor(lolisafe.LolisafeAlbumExtractor):
|
|||||||
def items(self):
|
def items(self):
|
||||||
files, data = self.fetch_album(self.album_id)
|
files, data = self.fetch_album(self.album_id)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], file in enumerate(files, 1):
|
for data["num"], file in enumerate(files, 1):
|
||||||
file.update(data)
|
file.update(data)
|
||||||
text.nameext_from_url(file["name"], file)
|
text.nameext_from_url(file["name"], file)
|
||||||
|
|||||||
@@ -161,5 +161,5 @@ class CyberfileFileExtractor(CyberfileExtractor):
|
|||||||
|
|
||||||
file["file_url"] = url = extr("openUrl('", "'")
|
file["file_url"] = url = extr("openUrl('", "'")
|
||||||
text.nameext_from_url(file["name"] or url, file)
|
text.nameext_from_url(file["name"] or url, file)
|
||||||
yield Message.Directory, file
|
yield Message.Directory, "", file
|
||||||
yield Message.Url, url, file
|
yield Message.Url, url, file
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class DanbooruExtractor(BaseExtractor):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
if self.external and post["source"]:
|
if self.external and post["source"]:
|
||||||
post.update(data)
|
post.update(data)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Queue, post["source"], post
|
yield Message.Queue, post["source"], post
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ class DanbooruExtractor(BaseExtractor):
|
|||||||
url = self.root + url
|
url = self.root + url
|
||||||
|
|
||||||
post.update(data)
|
post.update(data)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Url, url, post
|
yield Message.Url, url, post
|
||||||
|
|
||||||
def items_artists(self):
|
def items_artists(self):
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ class DesktopographyEntryExtractor(DesktopographyExtractor):
|
|||||||
page = self.request(url).text
|
page = self.request(url).text
|
||||||
|
|
||||||
entry_data = {"entry": self.entry}
|
entry_data = {"entry": self.entry}
|
||||||
yield Message.Directory, entry_data
|
yield Message.Directory, "", entry_data
|
||||||
|
|
||||||
for image_data in text.extract_iter(
|
for image_data in text.extract_iter(
|
||||||
page,
|
page,
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class DeviantartExtractor(Extractor):
|
|||||||
deviation.update(data)
|
deviation.update(data)
|
||||||
|
|
||||||
self.prepare(deviation)
|
self.prepare(deviation)
|
||||||
yield Message.Directory, deviation
|
yield Message.Directory, "", deviation
|
||||||
|
|
||||||
if "content" in deviation:
|
if "content" in deviation:
|
||||||
content = self._extract_content(deviation)
|
content = self._extract_content(deviation)
|
||||||
|
|||||||
@@ -40,5 +40,5 @@ class DirectlinkExtractor(Extractor):
|
|||||||
data["_http_headers"] = {
|
data["_http_headers"] = {
|
||||||
"Referer": self.url.encode("latin-1", "ignore")}
|
"Referer": self.url.encode("latin-1", "ignore")}
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, self.url, data
|
yield Message.Url, self.url, data
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ class DiscordExtractor(Extractor):
|
|||||||
text.nameext_from_url(file["url"], file)
|
text.nameext_from_url(file["url"], file)
|
||||||
file["num"] = num
|
file["num"] = num
|
||||||
|
|
||||||
yield Message.Directory, message_metadata
|
yield Message.Directory, "", message_metadata
|
||||||
|
|
||||||
for file in message_metadata["files"]:
|
for file in message_metadata["files"]:
|
||||||
message_metadata_file = message_metadata.copy()
|
message_metadata_file = message_metadata.copy()
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ class DynastyscansSearchExtractor(DynastyscansBase, Extractor):
|
|||||||
self.query = match[1] or ""
|
self.query = match[1] or ""
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
yield Message.Directory, {}
|
yield Message.Directory, "", {}
|
||||||
for image_id in self.images():
|
for image_id in self.images():
|
||||||
image = self._parse_image_page(image_id)
|
image = self._parse_image_page(image_id)
|
||||||
url = image["url"]
|
url = image["url"]
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class E621Extractor(danbooru.DanbooruExtractor):
|
|||||||
post["date"] = self.parse_datetime_iso(post["created_at"])
|
post["date"] = self.parse_datetime_iso(post["created_at"])
|
||||||
|
|
||||||
post.update(data)
|
post.update(data)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Url, file["url"], post
|
yield Message.Url, file["url"], post
|
||||||
|
|
||||||
def items_artists(self):
|
def items_artists(self):
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class EromeAlbumExtractor(EromeExtractor):
|
|||||||
"_http_headers": {"Referer": url},
|
"_http_headers": {"Referer": url},
|
||||||
}
|
}
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], url in enumerate(urls, 1):
|
for data["num"], url in enumerate(urls, 1):
|
||||||
yield Message.Url, url, text.nameext_from_url(url, data)
|
yield Message.Url, url, text.nameext_from_url(url, data)
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class EveriaPostExtractor(EveriaExtractor):
|
|||||||
"count": len(urls),
|
"count": len(urls),
|
||||||
}
|
}
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], url in enumerate(urls, 1):
|
for data["num"], url in enumerate(urls, 1):
|
||||||
url = text.unquote(url)
|
url = text.unquote(url)
|
||||||
yield Message.Url, url, text.nameext_from_url(url, data)
|
yield Message.Url, url, text.nameext_from_url(url, data)
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ class ExhentaiGalleryExtractor(ExhentaiExtractor):
|
|||||||
|
|
||||||
self.data = data = self.get_metadata(gpage)
|
self.data = data = self.get_metadata(gpage)
|
||||||
self.count = text.parse_int(data["filecount"])
|
self.count = text.parse_int(data["filecount"])
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
images = itertools.chain(
|
images = itertools.chain(
|
||||||
(self.image_from_page(ipage),), self.images_from_api())
|
(self.image_from_page(ipage),), self.images_from_api())
|
||||||
@@ -226,7 +226,7 @@ class ExhentaiGalleryExtractor(ExhentaiExtractor):
|
|||||||
yield Message.Queue, url, data
|
yield Message.Queue, url, data
|
||||||
|
|
||||||
def _items_metadata(self):
|
def _items_metadata(self):
|
||||||
yield Message.Directory, self.metadata_from_api()
|
yield Message.Directory, "", self.metadata_from_api()
|
||||||
|
|
||||||
def get_metadata(self, page):
|
def get_metadata(self, page):
|
||||||
"""Extract gallery metadata"""
|
"""Extract gallery metadata"""
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ class FacebookExtractor(Extractor):
|
|||||||
else:
|
else:
|
||||||
retries = 0
|
retries = 0
|
||||||
photo.update(set_data)
|
photo.update(set_data)
|
||||||
yield Message.Directory, photo
|
yield Message.Directory, "", photo
|
||||||
yield Message.Url, photo["url"], photo
|
yield Message.Url, photo["url"], photo
|
||||||
|
|
||||||
if not photo["next_photo_id"]:
|
if not photo["next_photo_id"]:
|
||||||
@@ -408,7 +408,7 @@ class FacebookPhotoExtractor(FacebookExtractor):
|
|||||||
|
|
||||||
directory = self.parse_set_page(set_page)
|
directory = self.parse_set_page(set_page)
|
||||||
|
|
||||||
yield Message.Directory, directory
|
yield Message.Directory, "", directory
|
||||||
yield Message.Url, photo["url"], photo
|
yield Message.Url, photo["url"], photo
|
||||||
|
|
||||||
if self.author_followups:
|
if self.author_followups:
|
||||||
@@ -467,7 +467,7 @@ class FacebookVideoExtractor(FacebookExtractor):
|
|||||||
if "url" not in video:
|
if "url" not in video:
|
||||||
return
|
return
|
||||||
|
|
||||||
yield Message.Directory, video
|
yield Message.Directory, "", video
|
||||||
|
|
||||||
if self.videos == "ytdl":
|
if self.videos == "ytdl":
|
||||||
yield Message.Url, "ytdl:" + video_url, video
|
yield Message.Url, "ytdl:" + video_url, video
|
||||||
@@ -486,7 +486,7 @@ class FacebookInfoExtractor(FacebookExtractor):
|
|||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
user = self._extract_profile(self.groups[0])
|
user = self._extract_profile(self.groups[0])
|
||||||
return iter(((Message.Directory, user),))
|
return iter(((Message.Directory, "", user),))
|
||||||
|
|
||||||
|
|
||||||
class FacebookAlbumsExtractor(FacebookExtractor):
|
class FacebookAlbumsExtractor(FacebookExtractor):
|
||||||
@@ -558,7 +558,7 @@ class FacebookAvatarExtractor(FacebookExtractor):
|
|||||||
set_page = self.request(set_url).text
|
set_page = self.request(set_url).text
|
||||||
directory = self.parse_set_page(set_page)
|
directory = self.parse_set_page(set_page)
|
||||||
|
|
||||||
yield Message.Directory, directory
|
yield Message.Directory, "", directory
|
||||||
yield Message.Url, avatar["url"], avatar
|
yield Message.Url, avatar["url"], avatar
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ class FanboxExtractor(Extractor):
|
|||||||
item["id"], exc.__class__.__name__, exc)
|
item["id"], exc.__class__.__name__, exc)
|
||||||
|
|
||||||
content_body, post = self._extract_post(item)
|
content_body, post = self._extract_post(item)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield from self._get_urls_from_post(content_body, post)
|
yield from self._get_urls_from_post(content_body, post)
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class FanslyExtractor(Extractor):
|
|||||||
post["count"] = len(files)
|
post["count"] = len(files)
|
||||||
post["date"] = self.parse_timestamp(post["createdAt"])
|
post["date"] = self.parse_timestamp(post["createdAt"])
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], file in enumerate(files, 1):
|
for post["num"], file in enumerate(files, 1):
|
||||||
post.update(file)
|
post.update(file)
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class FantiaExtractor(Extractor):
|
|||||||
|
|
||||||
for content in contents:
|
for content in contents:
|
||||||
files = self._process_content(post, content)
|
files = self._process_content(post, content)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
|
|
||||||
if content["visible_status"] != "visible":
|
if content["visible_status"] != "visible":
|
||||||
self.log.warning(
|
self.log.warning(
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class FapachiPostExtractor(Extractor):
|
|||||||
page = self.request(f"{self.root}/{self.user}/media/{self.id}").text
|
page = self.request(f"{self.root}/{self.user}/media/{self.id}").text
|
||||||
url = self.root + text.extract(
|
url = self.root + text.extract(
|
||||||
page, 'data-src="', '"', page.index('class="media-img'))[0]
|
page, 'data-src="', '"', page.index('class="media-img'))[0]
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, url, text.nameext_from_url(url, data)
|
yield Message.Url, url, text.nameext_from_url(url, data)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class FapelloPostExtractor(Extractor):
|
|||||||
}
|
}
|
||||||
url = text.extr(page, 'src="', '"').replace(
|
url = text.extr(page, 'src="', '"').replace(
|
||||||
".md", "").replace(".th", "")
|
".md", "").replace(".th", "")
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, url, text.nameext_from_url(url, data)
|
yield Message.Url, url, text.nameext_from_url(url, data)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class FlickrExtractor(Extractor):
|
|||||||
else:
|
else:
|
||||||
photo.update(data)
|
photo.update(data)
|
||||||
url = self._file_url(photo)
|
url = self._file_url(photo)
|
||||||
yield Message.Directory, photo
|
yield Message.Directory, "", photo
|
||||||
yield Message.Url, url, text.nameext_from_url(url, photo)
|
yield Message.Url, url, text.nameext_from_url(url, photo)
|
||||||
|
|
||||||
def metadata(self):
|
def metadata(self):
|
||||||
@@ -114,7 +114,7 @@ class FlickrImageExtractor(FlickrExtractor):
|
|||||||
location[key] = value["_content"]
|
location[key] = value["_content"]
|
||||||
|
|
||||||
url = self._file_url(photo)
|
url = self._file_url(photo)
|
||||||
yield Message.Directory, photo
|
yield Message.Directory, "", photo
|
||||||
yield Message.Url, url, text.nameext_from_url(url, photo)
|
yield Message.Url, url, text.nameext_from_url(url, photo)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class FoolfuukaExtractor(BaseExtractor):
|
|||||||
self.fixup_redirect = False
|
self.fixup_redirect = False
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
yield Message.Directory, self.metadata()
|
yield Message.Directory, "", self.metadata()
|
||||||
for post in self.posts():
|
for post in self.posts():
|
||||||
media = post["media"]
|
media = post["media"]
|
||||||
if not media:
|
if not media:
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class FoolslideChapterExtractor(FoolslideExtractor):
|
|||||||
data["count"] = len(imgs)
|
data["count"] = len(imgs)
|
||||||
data["chapter_id"] = text.parse_int(imgs[0]["chapter_id"])
|
data["chapter_id"] = text.parse_int(imgs[0]["chapter_id"])
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
enum = util.enumerate_reversed if self.config(
|
enum = util.enumerate_reversed if self.config(
|
||||||
"page-reverse") else enumerate
|
"page-reverse") else enumerate
|
||||||
for data["page"], image in enum(imgs, 1):
|
for data["page"], image in enum(imgs, 1):
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class FuraffinityExtractor(Extractor):
|
|||||||
if post := self._parse_post(post_id):
|
if post := self._parse_post(post_id):
|
||||||
if metadata:
|
if metadata:
|
||||||
post.update(metadata)
|
post.update(metadata)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Url, post["url"], post
|
yield Message.Url, post["url"], post
|
||||||
|
|
||||||
if self.external:
|
if self.external:
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class GenericExtractor(Extractor):
|
|||||||
pass
|
pass
|
||||||
images = enumerate(imgs, 1)
|
images = enumerate(imgs, 1)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
for data["num"], (url, imgdata) in images:
|
for data["num"], (url, imgdata) in images:
|
||||||
if imgdata:
|
if imgdata:
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ class GirlsreleasedSetExtractor(GirlsreleasedExtractor):
|
|||||||
"count": len(json["images"]),
|
"count": len(json["images"]),
|
||||||
"url": "https://girlsreleased.com/set/" + json["id"],
|
"url": "https://girlsreleased.com/set/" + json["id"],
|
||||||
}
|
}
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], image in enumerate(json["images"], 1):
|
for data["num"], image in enumerate(json["images"], 1):
|
||||||
text.nameext_from_url(image[5], data)
|
text.nameext_from_url(image[5], data)
|
||||||
yield Message.Queue, image[3], data
|
yield Message.Queue, image[3], data
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class GirlswithmusclePostExtractor(GirlswithmuscleExtractor):
|
|||||||
metadata["type"] = "video"
|
metadata["type"] = "video"
|
||||||
|
|
||||||
text.nameext_from_url(url, metadata)
|
text.nameext_from_url(url, metadata)
|
||||||
yield Message.Directory, metadata
|
yield Message.Directory, "", metadata
|
||||||
yield Message.Url, url, metadata
|
yield Message.Url, url, metadata
|
||||||
|
|
||||||
def metadata(self, page):
|
def metadata(self, page):
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class GofileFolderExtractor(Extractor):
|
|||||||
self._get_website_token())
|
self._get_website_token())
|
||||||
|
|
||||||
folder = self._get_content(self.content_id, password)
|
folder = self._get_content(self.content_id, password)
|
||||||
yield Message.Directory, folder
|
yield Message.Directory, "", folder
|
||||||
|
|
||||||
try:
|
try:
|
||||||
contents = folder.pop("children")
|
contents = folder.pop("children")
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ class HatenablogExtractor(Extractor):
|
|||||||
"title": title,
|
"title": title,
|
||||||
"count": len(images),
|
"count": len(images),
|
||||||
}
|
}
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], url in enumerate(images, 1):
|
for data["num"], url in enumerate(images, 1):
|
||||||
yield Message.Url, url, text.nameext_from_url(url, data)
|
yield Message.Url, url, text.nameext_from_url(url, data)
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class HentaifoundryExtractor(Extractor):
|
|||||||
for post_url in util.advance(self.posts(), self.start_post):
|
for post_url in util.advance(self.posts(), self.start_post):
|
||||||
image = self._parse_post(post_url)
|
image = self._parse_post(post_url)
|
||||||
image.update(data)
|
image.update(data)
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, image["src"], image
|
yield Message.Url, image["src"], image
|
||||||
|
|
||||||
def skip(self, num):
|
def skip(self, num):
|
||||||
@@ -324,7 +324,7 @@ class HentaifoundryImageExtractor(HentaifoundryExtractor):
|
|||||||
f"/{self.index}/?enterAgree=1")
|
f"/{self.index}/?enterAgree=1")
|
||||||
image = self._parse_post(post_url)
|
image = self._parse_post(post_url)
|
||||||
image["user"] = self.user
|
image["user"] = self.user
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, image["src"], image
|
yield Message.Url, image["src"], image
|
||||||
|
|
||||||
|
|
||||||
@@ -339,7 +339,7 @@ class HentaifoundryStoriesExtractor(HentaifoundryExtractor):
|
|||||||
self._init_site_filters()
|
self._init_site_filters()
|
||||||
for story_html in util.advance(self.stories(), self.start_post):
|
for story_html in util.advance(self.stories(), self.start_post):
|
||||||
story = self._parse_story(story_html)
|
story = self._parse_story(story_html)
|
||||||
yield Message.Directory, story
|
yield Message.Directory, "", story
|
||||||
yield Message.Url, story["src"], story
|
yield Message.Url, story["src"], story
|
||||||
|
|
||||||
def stories(self):
|
def stories(self):
|
||||||
@@ -364,5 +364,5 @@ class HentaifoundryStoryExtractor(HentaifoundryExtractor):
|
|||||||
story_url = (f"{self.root}/stories/user/{self.user}"
|
story_url = (f"{self.root}/stories/user/{self.user}"
|
||||||
f"/{self.index}/x?enterAgree=1")
|
f"/{self.index}/x?enterAgree=1")
|
||||||
story = self._parse_story(self.request(story_url).text)
|
story = self._parse_story(self.request(story_url).text)
|
||||||
yield Message.Directory, story
|
yield Message.Directory, "", story
|
||||||
yield Message.Url, story["src"], story
|
yield Message.Url, story["src"], story
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class HotleakExtractor(Extractor):
|
|||||||
.replace("_thumb.", ".")
|
.replace("_thumb.", ".")
|
||||||
)
|
)
|
||||||
post["_http_expected_status"] = (404,)
|
post["_http_expected_status"] = (404,)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Url, post["url"], post
|
yield Message.Url, post["url"], post
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ class ImagebamGalleryExtractor(ImagebamExtractor):
|
|||||||
data["count"] = len(images)
|
data["count"] = len(images)
|
||||||
data["gallery_key"] = self.path.rpartition("/")[2]
|
data["gallery_key"] = self.path.rpartition("/")[2]
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], path in enumerate(images, 1):
|
for data["num"], path in enumerate(images, 1):
|
||||||
image = self._parse_image_page(path)
|
image = self._parse_image_page(path)
|
||||||
image.update(data)
|
image.update(data)
|
||||||
@@ -94,5 +94,5 @@ class ImagebamImageExtractor(ImagebamExtractor):
|
|||||||
path = ("/view/" if path[10] == "M" else "/image/") + path[10:]
|
path = ("/view/" if path[10] == "M" else "/image/") + path[10:]
|
||||||
|
|
||||||
image = self._parse_image_page(path)
|
image = self._parse_image_page(path)
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, image["url"], image
|
yield Message.Url, image["url"], image
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class ImagefapGalleryExtractor(ImagefapExtractor):
|
|||||||
url = f"{self.root}/gallery/{self.gid}"
|
url = f"{self.root}/gallery/{self.gid}"
|
||||||
page = self.request(url).text
|
page = self.request(url).text
|
||||||
data = self.get_job_metadata(page)
|
data = self.get_job_metadata(page)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for url, image in self.get_images():
|
for url, image in self.get_images():
|
||||||
data.update(image)
|
data.update(image)
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
@@ -119,7 +119,7 @@ class ImagefapImageExtractor(ImagefapExtractor):
|
|||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
url, data = self.get_image()
|
url, data = self.get_image()
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
|
|
||||||
def get_image(self):
|
def get_image(self):
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class ImagehostImageExtractor(Extractor):
|
|||||||
if self._validate is not None:
|
if self._validate is not None:
|
||||||
data["_http_validate"] = self._validate
|
data["_http_validate"] = self._validate
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
|
|
||||||
def get_info(self, page):
|
def get_info(self, page):
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class ImgbbExtractor(Extractor):
|
|||||||
for image in self.posts():
|
for image in self.posts():
|
||||||
url = image["url"]
|
url = image["url"]
|
||||||
text.nameext_from_url(url, image)
|
text.nameext_from_url(url, image)
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, url, image
|
yield Message.Url, url, image
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class ImgboxExtractor(Extractor):
|
|||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = self.get_job_metadata()
|
data = self.get_job_metadata()
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
for image_key in self.get_image_keys():
|
for image_key in self.get_image_keys():
|
||||||
imgpage = self.request(self.root + "/" + image_key).text
|
imgpage = self.request(self.root + "/" + image_key).text
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class ImgpilePostExtractor(ImgpileExtractor):
|
|||||||
data = {"post": post}
|
data = {"post": post}
|
||||||
data["count"] = post["count"] = len(files)
|
data["count"] = post["count"] = len(files)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], file in enumerate(files, 1):
|
for data["num"], file in enumerate(files, 1):
|
||||||
data.update(file)
|
data.update(file)
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ class ImgurImageExtractor(ImgurExtractor):
|
|||||||
image.update(image["media"][0])
|
image.update(image["media"][0])
|
||||||
del image["media"]
|
del image["media"]
|
||||||
url = self._prepare(image)
|
url = self._prepare(image)
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, url, image
|
yield Message.Url, url, image
|
||||||
|
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ class ImgurAlbumExtractor(ImgurExtractor):
|
|||||||
image["num"] = num
|
image["num"] = num
|
||||||
image["count"] = count
|
image["count"] = count
|
||||||
image["album"] = album
|
image["album"] = album
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, url, image
|
yield Message.Url, url, image
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class InkbunnyExtractor(Extractor):
|
|||||||
del post["keywords"]
|
del post["keywords"]
|
||||||
del post["files"]
|
del post["files"]
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], file in enumerate(files, 1):
|
for post["num"], file in enumerate(files, 1):
|
||||||
post.update(file)
|
post.update(file)
|
||||||
post["deleted"] = (file["deleted"] == "t")
|
post["deleted"] = (file["deleted"] == "t")
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class InstagramExtractor(Extractor):
|
|||||||
files = post.pop("_files")
|
files = post.pop("_files")
|
||||||
|
|
||||||
post["count"] = len(files)
|
post["count"] = len(files)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
|
|
||||||
if "date" in post:
|
if "date" in post:
|
||||||
del post["date"]
|
del post["date"]
|
||||||
@@ -759,7 +759,7 @@ class InstagramInfoExtractor(InstagramExtractor):
|
|||||||
else:
|
else:
|
||||||
user = self.api.user_by_name(screen_name)
|
user = self.api.user_by_name(screen_name)
|
||||||
|
|
||||||
return iter(((Message.Directory, user),))
|
return iter(((Message.Directory, "", user),))
|
||||||
|
|
||||||
|
|
||||||
class InstagramAvatarExtractor(InstagramExtractor):
|
class InstagramAvatarExtractor(InstagramExtractor):
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class ItakuExtractor(Extractor):
|
|||||||
else:
|
else:
|
||||||
url = image["image"]
|
url = image["image"]
|
||||||
|
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, url, text.nameext_from_url(url, image)
|
yield Message.Url, url, text.nameext_from_url(url, image)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ class ItakuExtractor(Extractor):
|
|||||||
post["date"] = self.parse_datetime_iso(post["date_added"])
|
post["date"] = self.parse_datetime_iso(post["date_added"])
|
||||||
post["tags"] = [t["name"] for t in post["tags"]]
|
post["tags"] = [t["name"] for t in post["tags"]]
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], image in enumerate(images, 1):
|
for post["num"], image in enumerate(images, 1):
|
||||||
post["file"] = image
|
post["file"] = image
|
||||||
image["date"] = self.parse_datetime_iso(
|
image["date"] = self.parse_datetime_iso(
|
||||||
|
|||||||
@@ -57,5 +57,5 @@ class ItchioGameExtractor(Extractor):
|
|||||||
game = {"game": game, "user": user, "id": upload_id}
|
game = {"game": game, "user": user, "id": upload_id}
|
||||||
|
|
||||||
url = info["url"]
|
url = info["url"]
|
||||||
yield Message.Directory, game
|
yield Message.Directory, "", game
|
||||||
yield Message.Url, url, text.nameext_from_url(url, game)
|
yield Message.Url, url, text.nameext_from_url(url, game)
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class IwaraExtractor(Extractor):
|
|||||||
|
|
||||||
group_info["type"] = "image"
|
group_info["type"] = "image"
|
||||||
group_info["count"] = len(files)
|
group_info["count"] = len(files)
|
||||||
yield Message.Directory, group_info
|
yield Message.Directory, "", group_info
|
||||||
for num, file in enumerate(files, 1):
|
for num, file in enumerate(files, 1):
|
||||||
file_info = self.extract_media_info(file, None)
|
file_info = self.extract_media_info(file, None)
|
||||||
file_id = file_info["file_id"]
|
file_id = file_info["file_id"]
|
||||||
@@ -78,7 +78,7 @@ class IwaraExtractor(Extractor):
|
|||||||
video["id"], exc.__class__.__name__, exc)
|
video["id"], exc.__class__.__name__, exc)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
yield Message.Directory, info
|
yield Message.Directory, "", info
|
||||||
yield Message.Url, f"https:{download_url}", info
|
yield Message.Url, f"https:{download_url}", info
|
||||||
|
|
||||||
def items_user(self, users, key=None):
|
def items_user(self, users, key=None):
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class JschanThreadExtractor(JschanExtractor):
|
|||||||
thread["threadId"] = thread["postId"]
|
thread["threadId"] = thread["postId"]
|
||||||
posts = thread.pop("replies", ())
|
posts = thread.pop("replies", ())
|
||||||
|
|
||||||
yield Message.Directory, thread
|
yield Message.Directory, "", thread
|
||||||
for post in itertools.chain((thread,), posts):
|
for post in itertools.chain((thread,), posts):
|
||||||
if files := post.pop("files", ()):
|
if files := post.pop("files", ()):
|
||||||
thread.update(post)
|
thread.update(post)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class KabeuchiUserExtractor(Extractor):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
post["date"] = self.parse_datetime_iso(post["created_at"])
|
post["date"] = self.parse_datetime_iso(post["created_at"])
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
|
|
||||||
for key in keys:
|
for key in keys:
|
||||||
name = post[key]
|
name = post[key]
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class KeenspotComicExtractor(Extractor):
|
|||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = {"comic": self.comic}
|
data = {"comic": self.comic}
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
with self.request(self.root + "/") as response:
|
with self.request(self.root + "/") as response:
|
||||||
if response.history:
|
if response.history:
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ class KemonoExtractor(Extractor):
|
|||||||
files.append(file)
|
files.append(file)
|
||||||
|
|
||||||
post["count"] = len(files)
|
post["count"] = len(files)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], file in enumerate(files, 1):
|
for post["num"], file in enumerate(files, 1):
|
||||||
if "id" in file:
|
if "id" in file:
|
||||||
del file["id"]
|
del file["id"]
|
||||||
@@ -440,7 +440,7 @@ class KemonoDiscordExtractor(KemonoExtractor):
|
|||||||
post.update(data)
|
post.update(data)
|
||||||
post["date"] = self._parse_datetime(post["published"])
|
post["date"] = self._parse_datetime(post["published"])
|
||||||
post["count"] = len(files)
|
post["count"] = len(files)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
|
|
||||||
for post["num"], file in enumerate(files, 1):
|
for post["num"], file in enumerate(files, 1):
|
||||||
post["hash"] = file["hash"]
|
post["hash"] = file["hash"]
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class KhinsiderSoundtrackExtractor(AsynchronousMixin, Extractor):
|
|||||||
raise exception.NotFoundError("soundtrack")
|
raise exception.NotFoundError("soundtrack")
|
||||||
|
|
||||||
data = self.metadata(page)
|
data = self.metadata(page)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
if self.config("covers", False):
|
if self.config("covers", False):
|
||||||
for num, url in enumerate(self._extract_covers(page), 1):
|
for num, url in enumerate(self._extract_covers(page), 1):
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class LeakgalleryExtractor(Extractor):
|
|||||||
|
|
||||||
media["url"] = url = f"https://cdn.leakgallery.com/{path}"
|
media["url"] = url = f"https://cdn.leakgallery.com/{path}"
|
||||||
text.nameext_from_url(url, media)
|
text.nameext_from_url(url, media)
|
||||||
yield Message.Directory, media
|
yield Message.Directory, "", media
|
||||||
yield Message.Url, url, media
|
yield Message.Url, url, media
|
||||||
|
|
||||||
def _pagination(self, type, base, params=None, creator=None, pnum=1):
|
def _pagination(self, type, base, params=None, creator=None, pnum=1):
|
||||||
@@ -134,7 +134,7 @@ class LeakgalleryPostExtractor(LeakgalleryExtractor):
|
|||||||
"url": url,
|
"url": url,
|
||||||
}
|
}
|
||||||
text.nameext_from_url(url, data)
|
text.nameext_from_url(url, data)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
self.log.error("Failed to extract post page %s/%s: %s",
|
self.log.error("Failed to extract post page %s/%s: %s",
|
||||||
|
|||||||
@@ -123,5 +123,5 @@ class LensdumpImageExtractor(LensdumpBase, Extractor):
|
|||||||
}
|
}
|
||||||
|
|
||||||
text.nameext_from_url(data["url"], data)
|
text.nameext_from_url(data["url"], data)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, data["url"], data
|
yield Message.Url, data["url"], data
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class LexicaSearchExtractor(Extractor):
|
|||||||
image["filename"] = image["id"]
|
image["filename"] = image["id"]
|
||||||
image["extension"] = "jpg"
|
image["extension"] = "jpg"
|
||||||
image["search_tags"] = tags
|
image["search_tags"] = tags
|
||||||
yield Message.Directory, image
|
yield Message.Directory, "", image
|
||||||
yield Message.Url, base + image["id"], image
|
yield Message.Url, base + image["id"], image
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class LightroomGalleryExtractor(Extractor):
|
|||||||
images = self.images(album)
|
images = self.images(album)
|
||||||
for img in images:
|
for img in images:
|
||||||
url = img["url"]
|
url = img["url"]
|
||||||
yield Message.Directory, img
|
yield Message.Directory, "", img
|
||||||
yield Message.Url, url, text.nameext_from_url(url, img)
|
yield Message.Url, url, text.nameext_from_url(url, img)
|
||||||
|
|
||||||
def metadata(self, album):
|
def metadata(self, album):
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class LivedoorExtractor(Extractor):
|
|||||||
def items(self):
|
def items(self):
|
||||||
for post in self.posts():
|
for post in self.posts():
|
||||||
if images := self._images(post):
|
if images := self._images(post):
|
||||||
yield Message.Directory, {"post": post}
|
yield Message.Directory, "", {"post": post}
|
||||||
for image in images:
|
for image in images:
|
||||||
yield Message.Url, image["url"], image
|
yield Message.Url, image["url"], image
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class LofterExtractor(Extractor):
|
|||||||
post["id"], post_type)
|
post["id"], post_type)
|
||||||
|
|
||||||
post["count"] = len(image_urls)
|
post["count"] = len(image_urls)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], url in enumerate(image_urls, 1):
|
for post["num"], url in enumerate(image_urls, 1):
|
||||||
yield Message.Url, url, text.nameext_from_url(url, post)
|
yield Message.Url, url, text.nameext_from_url(url, post)
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class LolisafeAlbumExtractor(LolisafeExtractor):
|
|||||||
def items(self):
|
def items(self):
|
||||||
files, data = self.fetch_album(self.album_id)
|
files, data = self.fetch_album(self.album_id)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], file in enumerate(files, 1):
|
for data["num"], file in enumerate(files, 1):
|
||||||
url = file["file"]
|
url = file["file"]
|
||||||
file.update(data)
|
file.update(data)
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class LusciousAlbumExtractor(LusciousExtractor):
|
|||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
album = self.metadata()
|
album = self.metadata()
|
||||||
yield Message.Directory, {"album": album}
|
yield Message.Directory, "", {"album": album}
|
||||||
for num, image in enumerate(self.images(), 1):
|
for num, image in enumerate(self.images(), 1):
|
||||||
image["num"] = num
|
image["num"] = num
|
||||||
image["album"] = album
|
image["album"] = album
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class LynxchanThreadExtractor(LynxchanExtractor):
|
|||||||
thread["postId"] = thread["threadId"]
|
thread["postId"] = thread["threadId"]
|
||||||
posts = thread.pop("posts", ())
|
posts = thread.pop("posts", ())
|
||||||
|
|
||||||
yield Message.Directory, thread
|
yield Message.Directory, "", thread
|
||||||
for post in itertools.chain((thread,), posts):
|
for post in itertools.chain((thread,), posts):
|
||||||
if files := post.pop("files", ()):
|
if files := post.pop("files", ()):
|
||||||
thread.update(post)
|
thread.update(post)
|
||||||
|
|||||||
@@ -88,5 +88,5 @@ class MadokamiMangaExtractor(MadokamiExtractor):
|
|||||||
url = f"{self.root}{ch['path']}"
|
url = f"{self.root}{ch['path']}"
|
||||||
text.nameext_from_url(url, ch)
|
text.nameext_from_url(url, ch)
|
||||||
|
|
||||||
yield Message.Directory, ch
|
yield Message.Directory, "", ch
|
||||||
yield Message.Url, url, ch
|
yield Message.Url, url, ch
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class MangadexCoversExtractor(MangadexExtractor):
|
|||||||
name = data["cover"]
|
name = data["cover"]
|
||||||
text.nameext_from_url(name, data)
|
text.nameext_from_url(name, data)
|
||||||
data["cover_id"] = data["filename"]
|
data["cover_id"] = data["filename"]
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, f"{base}{name}", data
|
yield Message.Url, f"{base}{name}", data
|
||||||
|
|
||||||
def _transform_cover(self, cover):
|
def _transform_cover(self, cover):
|
||||||
@@ -134,7 +134,7 @@ class MangadexChapterExtractor(MangadexExtractor):
|
|||||||
f"available on MangaDex and can instead be read on the "
|
f"available on MangaDex and can instead be read on the "
|
||||||
f"official publisher's website at {data['_external_url']}.")
|
f"official publisher's website at {data['_external_url']}.")
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
if self.config("data-saver", False):
|
if self.config("data-saver", False):
|
||||||
path = "data-saver"
|
path = "data-saver"
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ class MangoxoAlbumExtractor(MangoxoExtractor):
|
|||||||
data = self.metadata(page)
|
data = self.metadata(page)
|
||||||
imgs = self.images(url, page)
|
imgs = self.images(url, page)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
|
|
||||||
data["extension"] = None
|
data["extension"] = None
|
||||||
for data["num"], path in enumerate(imgs, 1):
|
for data["num"], path in enumerate(imgs, 1):
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class MastodonExtractor(BaseExtractor):
|
|||||||
status["tags"] = [tag["name"] for tag in status["tags"]]
|
status["tags"] = [tag["name"] for tag in status["tags"]]
|
||||||
status["date"] = self.parse_datetime_iso(status["created_at"][:19])
|
status["date"] = self.parse_datetime_iso(status["created_at"][:19])
|
||||||
|
|
||||||
yield Message.Directory, status
|
yield Message.Directory, "", status
|
||||||
for status["num"], media in enumerate(attachments, 1):
|
for status["num"], media in enumerate(attachments, 1):
|
||||||
status["media"] = media
|
status["media"] = media
|
||||||
url = media["url"]
|
url = media["url"]
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ class Message():
|
|||||||
|
|
||||||
- Message.Directory:
|
- Message.Directory:
|
||||||
- Sets the target directory for all following images
|
- Sets the target directory for all following images
|
||||||
- 2nd element is a dictionary containing general metadata
|
- 2nd element is unused
|
||||||
|
- 3rd element is a dictionary containing general metadata
|
||||||
|
|
||||||
- Message.Url:
|
- Message.Url:
|
||||||
- Image URL and its metadata
|
- Image URL and its metadata
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class MisskeyExtractor(BaseExtractor):
|
|||||||
note["count"] = len(files)
|
note["count"] = len(files)
|
||||||
note["date"] = self.parse_datetime_iso(note["createdAt"])
|
note["date"] = self.parse_datetime_iso(note["createdAt"])
|
||||||
|
|
||||||
yield Message.Directory, note
|
yield Message.Directory, "", note
|
||||||
for note["num"], file in enumerate(files, 1):
|
for note["num"], file in enumerate(files, 1):
|
||||||
file["date"] = self.parse_datetime_iso(file["createdAt"])
|
file["date"] = self.parse_datetime_iso(file["createdAt"])
|
||||||
note["file"] = file
|
note["file"] = file
|
||||||
@@ -134,7 +134,7 @@ class MisskeyInfoExtractor(MisskeyExtractor):
|
|||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
user = self.api.users_show(self.groups[-1])
|
user = self.api.users_show(self.groups[-1])
|
||||||
return iter(((Message.Directory, user),))
|
return iter(((Message.Directory, "", user),))
|
||||||
|
|
||||||
|
|
||||||
class MisskeyAvatarExtractor(MisskeyExtractor):
|
class MisskeyAvatarExtractor(MisskeyExtractor):
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ class MotherlessMediaExtractor(MotherlessExtractor):
|
|||||||
def items(self):
|
def items(self):
|
||||||
file = self._extract_media(self.groups[0])
|
file = self._extract_media(self.groups[0])
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
yield Message.Directory, file
|
yield Message.Directory, "", file
|
||||||
yield Message.Url, url, text.nameext_from_url(url, file)
|
yield Message.Url, url, text.nameext_from_url(url, file)
|
||||||
|
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@ class MotherlessGalleryExtractor(MotherlessExtractor):
|
|||||||
file["num"] = num
|
file["num"] = num
|
||||||
file["thumbnail"] = thumbnail
|
file["thumbnail"] = thumbnail
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
yield Message.Directory, file
|
yield Message.Directory, "", file
|
||||||
yield Message.Url, url, text.nameext_from_url(url, file)
|
yield Message.Url, url, text.nameext_from_url(url, file)
|
||||||
|
|
||||||
|
|
||||||
@@ -235,5 +235,5 @@ class MotherlessGroupExtractor(MotherlessExtractor):
|
|||||||
file["uploader"] = uploader
|
file["uploader"] = uploader
|
||||||
file["group"] = file["group_id"]
|
file["group"] = file["group_id"]
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
yield Message.Directory, file
|
yield Message.Directory, "", file
|
||||||
yield Message.Url, url, text.nameext_from_url(url, file)
|
yield Message.Url, url, text.nameext_from_url(url, file)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class MyportfolioGalleryExtractor(Extractor):
|
|||||||
data = self.metadata(page)
|
data = self.metadata(page)
|
||||||
imgs = self.images(page)
|
imgs = self.images(page)
|
||||||
data["count"] = len(imgs)
|
data["count"] = len(imgs)
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], url in enumerate(imgs, 1):
|
for data["num"], url in enumerate(imgs, 1):
|
||||||
yield Message.Url, url, text.nameext_from_url(url, data)
|
yield Message.Url, url, text.nameext_from_url(url, data)
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class NaverChzzkExtractor(Extractor):
|
|||||||
data["date"] = self.parse_datetime(
|
data["date"] = self.parse_datetime(
|
||||||
data["createdDate"], "%Y%m%d%H%M%S")
|
data["createdDate"], "%Y%m%d%H%M%S")
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for data["num"], file in enumerate(files, 1):
|
for data["num"], file in enumerate(files, 1):
|
||||||
if extra := file.get("extraJson"):
|
if extra := file.get("extraJson"):
|
||||||
file.update(util.json_loads(extra))
|
file.update(util.json_loads(extra))
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class NekohousePostExtractor(NekohouseExtractor):
|
|||||||
post["post_id"] = post_id
|
post["post_id"] = post_id
|
||||||
post["count"] = len(files)
|
post["count"] = len(files)
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], file in enumerate(files, 1):
|
for post["num"], file in enumerate(files, 1):
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
text.nameext_from_url(url, file)
|
text.nameext_from_url(url, file)
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class NewgroundsExtractor(Extractor):
|
|||||||
if url:
|
if url:
|
||||||
if metadata:
|
if metadata:
|
||||||
post.update(metadata)
|
post.update(metadata)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
post["num"] = 0
|
post["num"] = 0
|
||||||
yield Message.Url, url, text.nameext_from_url(url, post)
|
yield Message.Url, url, text.nameext_from_url(url, post)
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class NijieExtractor(AsynchronousMixin, BaseExtractor):
|
|||||||
urls = self._extract_images(image_id, page)
|
urls = self._extract_images(image_id, page)
|
||||||
data["count"] = len(urls)
|
data["count"] = len(urls)
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
for num, url in enumerate(urls):
|
for num, url in enumerate(urls):
|
||||||
image = text.nameext_from_url(url, {
|
image = text.nameext_from_url(url, {
|
||||||
"num": num,
|
"num": num,
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ class NitterExtractor(BaseExtractor):
|
|||||||
files = ()
|
files = ()
|
||||||
tweet["count"] = len(files)
|
tweet["count"] = len(files)
|
||||||
|
|
||||||
yield Message.Directory, tweet
|
yield Message.Directory, "", tweet
|
||||||
for tweet["num"], file in enumerate(files, 1):
|
for tweet["num"], file in enumerate(files, 1):
|
||||||
url = file["url"]
|
url = file["url"]
|
||||||
file.update(tweet)
|
file.update(tweet)
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class NozomiExtractor(Extractor):
|
|||||||
if key in post:
|
if key in post:
|
||||||
del post[key]
|
del post[key]
|
||||||
|
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
for post["num"], image in enumerate(images, 1):
|
for post["num"], image in enumerate(images, 1):
|
||||||
post["filename"] = post["dataid"] = did = image["dataid"]
|
post["filename"] = post["dataid"] = did = image["dataid"]
|
||||||
post["is_video"] = video = \
|
post["is_video"] = video = \
|
||||||
|
|||||||
@@ -67,5 +67,5 @@ class NudostarImageExtractor(NudostarExtractor):
|
|||||||
data["num"] = text.parse_int(self.groups[2])
|
data["num"] = text.parse_int(self.groups[2])
|
||||||
data["url"] = img_url
|
data["url"] = img_url
|
||||||
|
|
||||||
yield Message.Directory, data
|
yield Message.Directory, "", data
|
||||||
yield Message.Url, img_url, data
|
yield Message.Url, img_url, data
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class PahealExtractor(Extractor):
|
|||||||
post["width"] = text.parse_int(post["width"])
|
post["width"] = text.parse_int(post["width"])
|
||||||
post["height"] = text.parse_int(post["height"])
|
post["height"] = text.parse_int(post["height"])
|
||||||
post.update(data)
|
post.update(data)
|
||||||
yield Message.Directory, post
|
yield Message.Directory, "", post
|
||||||
yield Message.Url, post["file_url"], post
|
yield Message.Url, post["file_url"], post
|
||||||
|
|
||||||
def get_metadata(self):
|
def get_metadata(self):
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user