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