yield 3-tuples for Message.Directory

adapt tuples to the same length and semantics as other messages
This commit is contained in:
Mike Fährmann
2025-12-05 21:39:52 +01:00
parent 80878c1501
commit 968597a302
166 changed files with 237 additions and 237 deletions

View File

@@ -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"]

View File

@@ -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

View File

@@ -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):

View File

@@ -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):

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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):

View File

@@ -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:

View File

@@ -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 = {

View File

@@ -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])

View File

@@ -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"]

View File

@@ -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):

View File

@@ -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/"

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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):

View File

@@ -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):

View File

@@ -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"]

View File

@@ -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

View File

@@ -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

View 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:

View File

@@ -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

View 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:

View 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}

View File

@@ -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:

View File

@@ -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)

View 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

View 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):

View File

@@ -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,

View File

@@ -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)

View File

@@ -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

View File

@@ -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()

View File

@@ -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"]

View File

@@ -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):

View File

@@ -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)

View File

@@ -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)

View File

@@ -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"""

View File

@@ -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

View File

@@ -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):

View File

@@ -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"]

View File

@@ -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(

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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:

View File

@@ -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):

View File

@@ -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:

View File

@@ -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:

View File

@@ -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

View File

@@ -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):

View File

@@ -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")

View File

@@ -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)

View File

@@ -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

View File

@@ -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):

View File

@@ -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

View File

@@ -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):

View File

@@ -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):

View File

@@ -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):

View File

@@ -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

View File

@@ -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"]

View File

@@ -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

View File

@@ -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")

View File

@@ -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):

View File

@@ -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(

View File

@@ -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)

View File

@@ -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):

View File

@@ -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)

View File

@@ -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]

View File

@@ -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:

View File

@@ -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"]

View File

@@ -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):

View File

@@ -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",

View File

@@ -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

View File

@@ -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):

View File

@@ -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):

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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"

View File

@@ -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):

View File

@@ -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"]

View File

@@ -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

View File

@@ -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):

View File

@@ -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)

View 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)

View File

@@ -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))

View File

@@ -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)

View 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)

View File

@@ -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,

View File

@@ -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)

View File

@@ -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 = \

View File

@@ -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

View File

@@ -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