remove explicit (sub)category keywords
This commit is contained in:
@@ -69,7 +69,6 @@ class BatotoChapterExtractor(AsynchronousExtractor):
|
|||||||
manga, pos = extr(page, "document.title = '", " - ", pos)
|
manga, pos = extr(page, "document.title = '", " - ", pos)
|
||||||
match = re.match(r"(Vol.(\d+) )?Ch\.([^:]+)(: (.+))?", cinfo)
|
match = re.match(r"(Vol.(\d+) )?Ch\.([^:]+)(: (.+))?", cinfo)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"token": self.token,
|
"token": self.token,
|
||||||
"manga": text.unescape(manga),
|
"manga": text.unescape(manga),
|
||||||
"volume": match.group(2) or "",
|
"volume": match.group(2) or "",
|
||||||
|
|||||||
@@ -55,13 +55,10 @@ class BooruExtractor(Extractor):
|
|||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
# Override this method in derived classes
|
# Override this method in derived classes
|
||||||
return {
|
return {}
|
||||||
"category": self.category,
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_file_metadata(self, data):
|
def get_file_metadata(self, data):
|
||||||
"""Collect metadata for a downloadable file"""
|
"""Collect metadata for a downloadable file"""
|
||||||
data["category"] = self.category
|
|
||||||
return text.nameext_from_url(self.get_file_url(data), data)
|
return text.nameext_from_url(self.get_file_url(data), data)
|
||||||
|
|
||||||
def get_file_url(self, data):
|
def get_file_url(self, data):
|
||||||
@@ -114,10 +111,7 @@ class BooruTagExtractor(BooruExtractor):
|
|||||||
self.params["tags"] = self.tags
|
self.params["tags"] = self.tags
|
||||||
|
|
||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
return {
|
return {"tags": self.tags}
|
||||||
"category": self.category,
|
|
||||||
"tags": self.tags,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class BooruPoolExtractor(BooruExtractor):
|
class BooruPoolExtractor(BooruExtractor):
|
||||||
@@ -131,10 +125,7 @@ class BooruPoolExtractor(BooruExtractor):
|
|||||||
self.params["tags"] = "pool:" + self.pool
|
self.params["tags"] = "pool:" + self.pool
|
||||||
|
|
||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
return {
|
return {"pool": self.pool}
|
||||||
"category": self.category,
|
|
||||||
"pool": self.pool,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class BooruPostExtractor(BooruExtractor):
|
class BooruPostExtractor(BooruExtractor):
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ class ChanExtractor(Extractor):
|
|||||||
def __init__(self, board, thread):
|
def __init__(self, board, thread):
|
||||||
Extractor.__init__(self)
|
Extractor.__init__(self)
|
||||||
self.metadata = {
|
self.metadata = {
|
||||||
"category": self.category,
|
|
||||||
"board": board,
|
"board": board,
|
||||||
"thread": thread,
|
"thread": thread,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,10 +30,6 @@ class ChronosImageExtractor(Extractor):
|
|||||||
self.token = match.group(1)
|
self.token = match.group(1)
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = {
|
|
||||||
"category": self.category,
|
|
||||||
"token": self.token,
|
|
||||||
}
|
|
||||||
params = {
|
params = {
|
||||||
"op": "view",
|
"op": "view",
|
||||||
"id": self.token,
|
"id": self.token,
|
||||||
@@ -44,7 +40,7 @@ class ChronosImageExtractor(Extractor):
|
|||||||
data=params).text
|
data=params).text
|
||||||
url , pos = text.extract(page, '<br><img src="', '"')
|
url , pos = text.extract(page, '<br><img src="', '"')
|
||||||
filename, pos = text.extract(page, ' alt="', '"', pos)
|
filename, pos = text.extract(page, ' alt="', '"', pos)
|
||||||
text.nameext_from_url(filename, data)
|
data = text.nameext_from_url(filename, {"token": self.token})
|
||||||
yield Message.Version, 1
|
yield Message.Version, 1
|
||||||
yield Message.Directory, data
|
yield Message.Directory, data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
|
|||||||
@@ -57,10 +57,7 @@ class DeviantartUserExtractor(AsynchronousExtractor):
|
|||||||
|
|
||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
return {
|
return {"artist": self.artist}
|
||||||
"category": self.category,
|
|
||||||
"artist": self.artist,
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_image_metadata(self, image):
|
def get_image_metadata(self, image):
|
||||||
"""Collect metadata for an image"""
|
"""Collect metadata for an image"""
|
||||||
@@ -127,7 +124,7 @@ class DeviantartImageExtractor(Extractor):
|
|||||||
('description', '"og:description" content="', '"'),
|
('description', '"og:description" content="', '"'),
|
||||||
(None , '<span class="tt-w">', ''),
|
(None , '<span class="tt-w">', ''),
|
||||||
('date' , 'title="', '"'),
|
('date' , 'title="', '"'),
|
||||||
), values={'category': self.category, "index": self.index})[0]
|
), values={"index": self.index})[0]
|
||||||
data["description"] = text.unescape(text.unescape(data["description"]))
|
data["description"] = text.unescape(text.unescape(data["description"]))
|
||||||
data["artist"] = text.extract(data["url"], "//", ".")[0]
|
data["artist"] = text.extract(data["url"], "//", ".")[0]
|
||||||
data["date"] = text.extract(data["date"], ", ", " in ", len(data["title"]))[0]
|
data["date"] = text.extract(data["date"], ", ", " in ", len(data["title"]))[0]
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ class DoujinmodeChapterExtractor(Extractor):
|
|||||||
count, pos = text.extract(page, ' class="manga-count">', '</span>')
|
count, pos = text.extract(page, ' class="manga-count">', '</span>')
|
||||||
title, pos = text.extract(page, '<h2>', ' Images List</h2>', pos)
|
title, pos = text.extract(page, '<h2>', ' Images List</h2>', pos)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"gallery-id": self.gid,
|
"gallery-id": self.gid,
|
||||||
"title": text.unescape(title),
|
"title": text.unescape(title),
|
||||||
"count": count,
|
"count": count,
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ class DynastyscansChapterExtractor(Extractor):
|
|||||||
info
|
info
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"manga": text.unescape(match.group(1)),
|
"manga": text.unescape(match.group(1)),
|
||||||
"chapter": match.group(2) or "",
|
"chapter": match.group(2) or "",
|
||||||
"title": text.unescape(match.group(3) or ""),
|
"title": text.unescape(match.group(3) or ""),
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ class ExhentaiGalleryExtractor(Extractor):
|
|||||||
def get_job_metadata(self, page):
|
def get_job_metadata(self, page):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
data = {
|
data = {
|
||||||
"category" : self.category,
|
|
||||||
"gallery-id" : self.gid,
|
"gallery-id" : self.gid,
|
||||||
"gallery-token": self.token,
|
"gallery-token": self.token,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ class HbrowseChapterExtractor(Extractor):
|
|||||||
def get_job_metadata(self, page):
|
def get_job_metadata(self, page):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
'gallery-id': self.gid,
|
'gallery-id': self.gid,
|
||||||
"chapter": int(self.chapter[1:]),
|
"chapter": int(self.chapter[1:]),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ class Hentai2readChapterExtractor(Extractor):
|
|||||||
title = text.extract(page, "<title>", "</title>")[0]
|
title = text.extract(page, "<title>", "</title>")[0]
|
||||||
match = re.match(r"Reading (?:(.+) dj - )?(.+) Hentai - \d+: ", title)
|
match = re.match(r"Reading (?:(.+) dj - )?(.+) Hentai - \d+: ", title)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"gallery-id": images[0].split("/")[-3],
|
"gallery-id": images[0].split("/")[-3],
|
||||||
"chapter": self.chapter,
|
"chapter": self.chapter,
|
||||||
"count": len(images),
|
"count": len(images),
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class HentaiboxChapterExtractor(Extractor):
|
|||||||
("title" , 'content="Read or Download ', ' hentai manga from'),
|
("title" , 'content="Read or Download ', ' hentai manga from'),
|
||||||
("series" , ' the series ', ' with ' + self.count),
|
("series" , ' the series ', ' with ' + self.count),
|
||||||
("language", ' translated pages to ', '.'),
|
("language", ' translated pages to ', '.'),
|
||||||
), values={"category": self.category, "count": self.count})[0]
|
), values={"count": self.count})[0]
|
||||||
data["lang"] = iso639_1.language_to_code(data["language"])
|
data["lang"] = iso639_1.language_to_code(data["language"])
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ class HentaifoundryUserExtractor(Extractor):
|
|||||||
token, pos = text.extract(page, 'hidden" value="', '"')
|
token, pos = text.extract(page, 'hidden" value="', '"')
|
||||||
count, pos = text.extract(page, 'class="active" >Pictures (', ')', pos)
|
count, pos = text.extract(page, 'class="active" >Pictures (', ')', pos)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"artist": self.artist,
|
"artist": self.artist,
|
||||||
"count": count,
|
"count": count,
|
||||||
}, token
|
}, token
|
||||||
@@ -136,7 +135,6 @@ class HentaifoundryImageExtractor(Extractor):
|
|||||||
title, pos = text.extract(page, 'Pictures</a> » <span>', '<')
|
title, pos = text.extract(page, 'Pictures</a> » <span>', '<')
|
||||||
url , pos = text.extract(page, '//pictures.hentai-foundry.com', '"', pos)
|
url , pos = text.extract(page, '//pictures.hentai-foundry.com', '"', pos)
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"artist": self.artist,
|
"artist": self.artist,
|
||||||
"index": self.index,
|
"index": self.index,
|
||||||
"title": text.unescape(title),
|
"title": text.unescape(title),
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ class HitomiGalleryExtractor(Extractor):
|
|||||||
series, pos = text.extract(page, '.html">', '</a>', pos)
|
series, pos = text.extract(page, '.html">', '</a>', pos)
|
||||||
lang = lang.capitalize()
|
lang = lang.capitalize()
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"gallery-id": self.gid,
|
"gallery-id": self.gid,
|
||||||
"title": " ".join(title.split()),
|
"title": " ".join(title.split()),
|
||||||
"artist": string.capwords(artist),
|
"artist": string.capwords(artist),
|
||||||
|
|||||||
@@ -44,17 +44,12 @@ class ImagebamGalleryExtractor(AsynchronousExtractor):
|
|||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
url = self.url_base + "/gallery/" + self.gkey
|
url = self.url_base + "/gallery/" + self.gkey
|
||||||
page = self.request(url, encoding="utf-8").text
|
page = self.request(url, encoding="utf-8").text
|
||||||
data = {
|
return text.extract_all(page, (
|
||||||
"category": self.category,
|
|
||||||
"gallery-key": self.gkey,
|
|
||||||
}
|
|
||||||
data, _ = text.extract_all(page, (
|
|
||||||
(None , "<img src='/img/icons/photos.png'", ""),
|
(None , "<img src='/img/icons/photos.png'", ""),
|
||||||
("title" , "'> ", " <"),
|
("title" , "'> ", " <"),
|
||||||
("count" , "'>", " images"),
|
("count" , "'>", " images"),
|
||||||
("first-url", "<a href='http://www.imagebam.com", "'"),
|
("first-url", "<a href='http://www.imagebam.com", "'"),
|
||||||
), values=data)
|
), values={"gallery-key": self.gkey})[0]
|
||||||
return data
|
|
||||||
|
|
||||||
def get_images(self, url):
|
def get_images(self, url):
|
||||||
"""Yield all image-urls and -ids for a gallery"""
|
"""Yield all image-urls and -ids for a gallery"""
|
||||||
@@ -71,7 +66,6 @@ class ImagebamGalleryExtractor(AsynchronousExtractor):
|
|||||||
yield image_url, image_id
|
yield image_url, image_id
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ImagebamImageExtractor(Extractor):
|
class ImagebamImageExtractor(Extractor):
|
||||||
"""Extractor for single images from imagebam.com"""
|
"""Extractor for single images from imagebam.com"""
|
||||||
category = "imagebam"
|
category = "imagebam"
|
||||||
@@ -90,10 +84,9 @@ class ImagebamImageExtractor(Extractor):
|
|||||||
self.token = match.group(1)
|
self.token = match.group(1)
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = {"category": self.category, "token": self.token}
|
|
||||||
page = self.request("http://www.imagebam.com/image/" + self.token).text
|
page = self.request("http://www.imagebam.com/image/" + self.token).text
|
||||||
url = text.extract(page, 'property="og:image" content="', '"')[0]
|
url = text.extract(page, 'property="og:image" content="', '"')[0]
|
||||||
text.nameext_from_url(url, data)
|
data = text.nameext_from_url(url, {"token": self.token})
|
||||||
yield Message.Version, 1
|
yield Message.Version, 1
|
||||||
yield Message.Directory, data
|
yield Message.Directory, data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class ImagefapGalleryExtractor(Extractor):
|
|||||||
("title" , '<title>Porn pics of ', ' (Page 1)</title>'),
|
("title" , '<title>Porn pics of ', ' (Page 1)</title>'),
|
||||||
("uploader", '>Uploaded by ', '</font>'),
|
("uploader", '>Uploaded by ', '</font>'),
|
||||||
("count" , ' 1 of ', ' pics"'),
|
("count" , ' 1 of ', ' pics"'),
|
||||||
), values={"category": self.category, "gallery-id": self.gid})
|
), values={"gallery-id": self.gid})
|
||||||
self.image_id = text.extract(page, 'id="img_ed_', '"', pos)[0]
|
self.image_id = text.extract(page, 'id="img_ed_', '"', pos)[0]
|
||||||
data["title"] = text.unescape(data["title"])
|
data["title"] = text.unescape(data["title"])
|
||||||
return data
|
return data
|
||||||
@@ -101,7 +101,6 @@ class ImagefapImageExtractor(Extractor):
|
|||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
parts = info["contentUrl"].rsplit("/", 3)
|
parts = info["contentUrl"].rsplit("/", 3)
|
||||||
return text.nameext_from_url(parts[3], {
|
return text.nameext_from_url(parts[3], {
|
||||||
"category": self.category,
|
|
||||||
"title": text.unescape(info["name"]),
|
"title": text.unescape(info["name"]),
|
||||||
"section": info["section"],
|
"section": info["section"],
|
||||||
"uploader": info["author"],
|
"uploader": info["author"],
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ class ImagetwistImageExtractor(Extractor):
|
|||||||
filename, pos = text.extract(page, ' alt="', '"', pos)
|
filename, pos = text.extract(page, ' alt="', '"', pos)
|
||||||
userid , pos = text.extract(url , '/', '/', 29)
|
userid , pos = text.extract(url , '/', '/', 29)
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"token": self.token,
|
"token": self.token,
|
||||||
"user": userid,
|
"user": userid,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ class ImgboxGalleryExtractor(AsynchronousExtractor):
|
|||||||
title = text.extract(page, "<h1>", "</h1>")[0]
|
title = text.extract(page, "<h1>", "</h1>")[0]
|
||||||
parts = title.rsplit(" - ", maxsplit=1)
|
parts = title.rsplit(" - ", maxsplit=1)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"gallery-key": self.key,
|
"gallery-key": self.key,
|
||||||
"title": text.unescape(parts[0]),
|
"title": text.unescape(parts[0]),
|
||||||
"count": parts[1][:-7],
|
"count": parts[1][:-7],
|
||||||
@@ -91,8 +90,7 @@ class ImgboxImageExtractor(Extractor):
|
|||||||
page = self.request("http://imgbox.com/" + self.key).text
|
page = self.request("http://imgbox.com/" + self.key).text
|
||||||
url , pos = text.extract(page, 'src="http://i.', '"')
|
url , pos = text.extract(page, 'src="http://i.', '"')
|
||||||
filename, pos = text.extract(page, ' title="', '"', pos)
|
filename, pos = text.extract(page, ' title="', '"', pos)
|
||||||
data = {"category": self.category, "image-key": self.key}
|
data = text.nameext_from_url(filename, {"image-key": self.key})
|
||||||
text.nameext_from_url(filename, data)
|
|
||||||
yield Message.Version, 1
|
yield Message.Version, 1
|
||||||
yield Message.Directory, data
|
yield Message.Directory, data
|
||||||
yield Message.Url, "http://i." + url, data
|
yield Message.Url, "http://i." + url, data
|
||||||
|
|||||||
@@ -30,12 +30,11 @@ class ImgcandyImageExtractor(Extractor):
|
|||||||
self.token, self.filename = match.groups()
|
self.token, self.filename = match.groups()
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = {"category": self.category, "token": self.token}
|
|
||||||
params = {"imgContinue": "Continue+to+image+...+"}
|
params = {"imgContinue": "Continue+to+image+...+"}
|
||||||
page = self.request("http://imgcandy.net/img-" + self.token + ".html",
|
page = self.request("http://imgcandy.net/img-" + self.token + ".html",
|
||||||
method="post", data=params).text
|
method="post", data=params).text
|
||||||
url = text.extract(page, "<img class='centred' src='", "'")[0]
|
url = text.extract(page, "<img class='centred' src='", "'")[0]
|
||||||
text.nameext_from_url(self.filename or url, data)
|
data = text.nameext_from_url(self.filename or url, {"token": self.token})
|
||||||
yield Message.Version, 1
|
yield Message.Version, 1
|
||||||
yield Message.Directory, data
|
yield Message.Directory, data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
|
|||||||
@@ -61,8 +61,6 @@ class ImgchiliImageExtractor(ImgchiliExtractor):
|
|||||||
parts = name2.split("in the gallery ")
|
parts = name2.split("in the gallery ")
|
||||||
name = parts[0] if not parts[0].endswith("...") else name1
|
name = parts[0] if not parts[0].endswith("...") else name1
|
||||||
return text.nameext_from_url(name, {
|
return text.nameext_from_url(name, {
|
||||||
"category": self.category,
|
|
||||||
"subcategory": self.subcategory,
|
|
||||||
"image-id": self.match.group(1),
|
"image-id": self.match.group(1),
|
||||||
"title": text.unescape(parts[-1]) if len(parts) > 1 else ""
|
"title": text.unescape(parts[-1]) if len(parts) > 1 else ""
|
||||||
})
|
})
|
||||||
@@ -86,8 +84,6 @@ class ImgchiliAlbumExtractor(ImgchiliExtractor):
|
|||||||
def get_job_metadata(self, page):
|
def get_job_metadata(self, page):
|
||||||
title = text.extract(page, "<h1>", "</h1>")[0]
|
title = text.extract(page, "<h1>", "</h1>")[0]
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"subcategory": self.subcategory,
|
|
||||||
"title": text.unescape(title),
|
"title": text.unescape(title),
|
||||||
"key": self.match.group(1),
|
"key": self.match.group(1),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,4 +61,4 @@ class ImgthGalleryExtractor(Extractor):
|
|||||||
("date" , 'created on ', ' by <'),
|
("date" , 'created on ', ' by <'),
|
||||||
(None , 'href="/users/', ''),
|
(None , 'href="/users/', ''),
|
||||||
("user" , '>', '<'),
|
("user" , '>', '<'),
|
||||||
), values={"category": self.category, "gallery-id": self.gid})[0]
|
), values={"gallery-id": self.gid})[0]
|
||||||
|
|||||||
@@ -29,11 +29,10 @@ class ImgtrexImageExtractor(Extractor):
|
|||||||
self.token = match.group(1)
|
self.token = match.group(1)
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = {"category": self.category, "token": self.token}
|
|
||||||
page = self.request("http://imgtrex.com/" + self.token).text
|
page = self.request("http://imgtrex.com/" + self.token).text
|
||||||
filename, pos = text.extract(page, '<title>ImgTrex: ', '</title>')
|
filename, pos = text.extract(page, '<title>ImgTrex: ', '</title>')
|
||||||
url , pos = text.extract(page, '<br>\n<img src="', '"', pos)
|
url , pos = text.extract(page, '<br>\n<img src="', '"', pos)
|
||||||
text.nameext_from_url(filename, data)
|
data = text.nameext_from_url(filename, {"token": self.token})
|
||||||
yield Message.Version, 1
|
yield Message.Version, 1
|
||||||
yield Message.Directory, data
|
yield Message.Directory, data
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
|
|||||||
@@ -43,16 +43,12 @@ class ImgurAlbumExtractor(Extractor):
|
|||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
page = self.request("https://imgur.com/a/" + self.album).text
|
page = self.request("https://imgur.com/a/" + self.album).text
|
||||||
data = {
|
data = text.extract_all(page, (
|
||||||
"category": self.category,
|
|
||||||
"album-key": self.album,
|
|
||||||
}
|
|
||||||
text.extract_all(page, (
|
|
||||||
('title', '<meta property="og:title" content="', '"'),
|
('title', '<meta property="og:title" content="', '"'),
|
||||||
('count', '"num_images":"', '"'),
|
('count', '"num_images":"', '"'),
|
||||||
('date' , '"datetime":"', ' '),
|
('date' , '"datetime":"', ' '),
|
||||||
('time' , '', '"'),
|
('time' , '', '"'),
|
||||||
), values=data)
|
), values={"album-key": self.album})[0]
|
||||||
data["title"] = text.unescape(data["title"])
|
data["title"] = text.unescape(data["title"])
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|||||||
@@ -30,12 +30,12 @@ class ImgytImageExtractor(Extractor):
|
|||||||
self.token = match.group(1)
|
self.token = match.group(1)
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = {"category": self.category, "token": self.token}
|
|
||||||
params = {"imgContinue": "Continue+to+image+...+"}
|
params = {"imgContinue": "Continue+to+image+...+"}
|
||||||
page = self.request("https://img.yt/img-" + self.token + ".html",
|
page = self.request("https://img.yt/img-" + self.token + ".html",
|
||||||
method="post", data=params).text
|
method="post", data=params).text
|
||||||
url , pos = text.extract(page, "<img class='centred' src='", "'")
|
url , pos = text.extract(page, "<img class='centred' src='", "'")
|
||||||
filename, pos = text.extract(page, " alt='", "'", pos)
|
filename, pos = text.extract(page, " alt='", "'", pos)
|
||||||
|
data = {"token": self.token}
|
||||||
text.nameext_from_url(filename + splitext(url)[1], data)
|
text.nameext_from_url(filename + splitext(url)[1], data)
|
||||||
if url.startswith("http:"):
|
if url.startswith("http:"):
|
||||||
url = "https:" + url[5:]
|
url = "https:" + url[5:]
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class KhinsiderSoundtrackExtractor(AsynchronousExtractor):
|
|||||||
("size" , "Total Filesize: <b>", "</b>"),
|
("size" , "Total Filesize: <b>", "</b>"),
|
||||||
("date" , "Date added: <b>", "</b>"),
|
("date" , "Date added: <b>", "</b>"),
|
||||||
("type" , "Album type: <b>", "</b>"),
|
("type" , "Album type: <b>", "</b>"),
|
||||||
), values={"category": self.category})[0]
|
))[0]
|
||||||
|
|
||||||
def get_album_tracks(self, page):
|
def get_album_tracks(self, page):
|
||||||
"""Collect url and metadata for all tracks of a soundtrack"""
|
"""Collect url and metadata for all tracks of a soundtrack"""
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ class KissmangaChapterExtractor(KissmangaExtractor):
|
|||||||
r"(?:Vol.0*(\d+) )?(?:Ch.)?0*(\d+)(?:\.0*(\d+))?(?:: (.+))?", cinfo)
|
r"(?:Vol.0*(\d+) )?(?:Ch.)?0*(\d+)(?:\.0*(\d+))?(?:: (.+))?", cinfo)
|
||||||
chminor = match.group(3)
|
chminor = match.group(3)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"manga": manga,
|
"manga": manga,
|
||||||
"volume": match.group(1) or "",
|
"volume": match.group(1) or "",
|
||||||
"chapter": match.group(2),
|
"chapter": match.group(2),
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class LusciousAlbumExtractor(Extractor):
|
|||||||
(None , '<p>Language:', ''),
|
(None , '<p>Language:', ''),
|
||||||
("language", '\n ', ' '),
|
("language", '\n ', ' '),
|
||||||
("artist" , 'rtist: ', '\n'),
|
("artist" , 'rtist: ', '\n'),
|
||||||
), values={"category": self.category, "gallery-id": self.gid})[0]
|
), values={"gallery-id": self.gid})[0]
|
||||||
data["lang"] = iso639_1.language_to_code(data["language"])
|
data["lang"] = iso639_1.language_to_code(data["language"])
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ class MangahereChapterExtractor(AsynchronousExtractor):
|
|||||||
count, pos = text.extract(page, '>', '<', pos-30)
|
count, pos = text.extract(page, '>', '<', pos-30)
|
||||||
manga = re.match(r"(.+) \d+(\.\d+)? - Read .+ Chapter \d+(\.\d+)? Online", manga).group(1)
|
manga = re.match(r"(.+) \d+(\.\d+)? - Read .+ Chapter \d+(\.\d+)? Online", manga).group(1)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"manga": text.unescape(manga),
|
"manga": text.unescape(manga),
|
||||||
# "title": TODO,
|
# "title": TODO,
|
||||||
"volume": self.volume or "",
|
"volume": self.volume or "",
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ class MangamintChapterExtractor(Extractor):
|
|||||||
chid , pos = text.extract(page, r'"identifier":"node\/', '"', pos)
|
chid , pos = text.extract(page, r'"identifier":"node\/', '"', pos)
|
||||||
match = re.match(r"(.+) (\d+)(\.\d+)?$", manga)
|
match = re.match(r"(.+) (\d+)(\.\d+)?$", manga)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"manga": match.group(1),
|
"manga": match.group(1),
|
||||||
"chapter": match.group(2),
|
"chapter": match.group(2),
|
||||||
"chapter-minor": match.group(3) or "",
|
"chapter-minor": match.group(3) or "",
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ class MangaparkChapterExtractor(Extractor):
|
|||||||
def get_job_metadata(self, page):
|
def get_job_metadata(self, page):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"version": self.version,
|
"version": self.version,
|
||||||
"volume": self.volume or "",
|
"volume": self.volume or "",
|
||||||
"chapter": self.chapter,
|
"chapter": self.chapter,
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ class MangareaderChapterExtractor(MangareaderBase, AsynchronousExtractor):
|
|||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
page = self.request(self.url_base + self.url_title).text
|
page = self.request(self.url_base + self.url_title).text
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"chapter": self.chapter,
|
"chapter": self.chapter,
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"language": "English",
|
"language": "English",
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ class MangashareChapterExtractor(AsynchronousExtractor):
|
|||||||
def get_job_metadata(self, page):
|
def get_job_metadata(self, page):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"language": "English",
|
"language": "English",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ class MangastreamChapterExtractor(AsynchronousExtractor):
|
|||||||
title, pos = text.extract(page, ' - ', '<', pos)
|
title, pos = text.extract(page, ' - ', '<', pos)
|
||||||
count, pos = text.extract(page, 'Last Page (', ')', pos)
|
count, pos = text.extract(page, 'Last Page (', ')', pos)
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"manga": manga,
|
"manga": manga,
|
||||||
"chapter": text.unquote(self.chapter),
|
"chapter": text.unquote(self.chapter),
|
||||||
"chapter-id": self.ch_id,
|
"chapter-id": self.ch_id,
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ class NhentaiGalleryExtractor(Extractor):
|
|||||||
title_en = ginfo["title"].get("english", "")
|
title_en = ginfo["title"].get("english", "")
|
||||||
title_ja = ginfo["title"].get("japanese", "")
|
title_ja = ginfo["title"].get("japanese", "")
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"gallery-id": self.gid,
|
"gallery-id": self.gid,
|
||||||
"upload-date": ginfo["upload_date"],
|
"upload-date": ginfo["upload_date"],
|
||||||
"media-id": ginfo["media_id"],
|
"media-id": ginfo["media_id"],
|
||||||
|
|||||||
@@ -40,10 +40,7 @@ class NijieExtractor(AsynchronousExtractor):
|
|||||||
|
|
||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
return {
|
return {"artist-id": self.artist_id}
|
||||||
"category": self.category,
|
|
||||||
"artist-id": self.artist_id,
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_image_ids(self):
|
def get_image_ids(self):
|
||||||
"""Collect all image-ids for a specific artist"""
|
"""Collect all image-ids for a specific artist"""
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ class PinterestExtractor(Extractor):
|
|||||||
img = pin["image"]["original"]
|
img = pin["image"]["original"]
|
||||||
url = img["url"]
|
url = img["url"]
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"subcategory": self.subcategory,
|
|
||||||
"pin-id": pin["id"],
|
"pin-id": pin["id"],
|
||||||
"note": pin["note"],
|
"note": pin["note"],
|
||||||
"width": img["width"],
|
"width": img["width"],
|
||||||
@@ -90,8 +88,6 @@ class PinterestBoardExtractor(PinterestExtractor):
|
|||||||
def data_from_board(self, board):
|
def data_from_board(self, board):
|
||||||
"""Get metadata from a board-object"""
|
"""Get metadata from a board-object"""
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"subcategory": self.subcategory,
|
|
||||||
"user": self.user,
|
"user": self.user,
|
||||||
"board-id": board["id"],
|
"board-id": board["id"],
|
||||||
"board": board["name"],
|
"board": board["name"],
|
||||||
|
|||||||
@@ -92,7 +92,6 @@ class PixivUserExtractor(Extractor):
|
|||||||
"""Prepare a work-dictionary with additional keywords"""
|
"""Prepare a work-dictionary with additional keywords"""
|
||||||
user = work["user"]
|
user = work["user"]
|
||||||
url = work["image_urls"]["large"]
|
url = work["image_urls"]["large"]
|
||||||
work["category"] = self.category
|
|
||||||
work["artist-id"] = user["id"]
|
work["artist-id"] = user["id"]
|
||||||
work["artist-name"] = user["name"]
|
work["artist-name"] = user["name"]
|
||||||
work["artist-nick"] = user["account"]
|
work["artist-nick"] = user["account"]
|
||||||
@@ -130,7 +129,6 @@ class PixivUserExtractor(Extractor):
|
|||||||
if not user:
|
if not user:
|
||||||
user = self.api.user(self.artist_id)["response"][0]
|
user = self.api.user(self.artist_id)["response"][0]
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"artist-id": user["id"],
|
"artist-id": user["id"],
|
||||||
"artist-name": user["name"],
|
"artist-name": user["name"],
|
||||||
"artist-nick": user["account"],
|
"artist-nick": user["account"],
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ class PowermangaChapterExtractor(Extractor):
|
|||||||
json_data, pos = text.extract(page, 'var pages = ', ';', pos)
|
json_data, pos = text.extract(page, 'var pages = ', ';', pos)
|
||||||
match = re.match(r"(\w+ (\d+)([^:+]*)(?:: (.*))?|[^:]+)", chapter)
|
match = re.match(r"(\w+ (\d+)([^:+]*)(?:: (.*))?|[^:]+)", chapter)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"manga": text.unescape(manga),
|
"manga": text.unescape(manga),
|
||||||
"chapter": match.group(2) or match.group(1),
|
"chapter": match.group(2) or match.group(1),
|
||||||
"chapter-minor": match.group(3) or "",
|
"chapter-minor": match.group(3) or "",
|
||||||
|
|||||||
@@ -42,10 +42,7 @@ class SankakuTagExtractor(AsynchronousExtractor):
|
|||||||
|
|
||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
return {
|
return {"tags": self.tags}
|
||||||
"category": self.category,
|
|
||||||
"tags": self.tags,
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_images(self):
|
def get_images(self):
|
||||||
params = {
|
params = {
|
||||||
|
|||||||
@@ -44,10 +44,7 @@ class SeigaImageExtractor(Extractor):
|
|||||||
|
|
||||||
def get_job_metadata(self):
|
def get_job_metadata(self):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
return {
|
return {"image-id": self.image_id}
|
||||||
"category": self.category,
|
|
||||||
"image-id": self.image_id,
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_image_url(self, image_id):
|
def get_image_url(self, image_id):
|
||||||
"""Get url for an image with id 'image_id'"""
|
"""Get url for an image with id 'image_id'"""
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ class SenmangaChapterExtractor(Extractor):
|
|||||||
manga, pos = text.extract(title, '| Raw | ', ' | Chapter ')
|
manga, pos = text.extract(title, '| Raw | ', ' | Chapter ')
|
||||||
chapter, pos = text.extract(title, '', ' | Page ', pos)
|
chapter, pos = text.extract(title, '', ' | Page ', pos)
|
||||||
return {
|
return {
|
||||||
"category": self.category,
|
|
||||||
"manga": text.unescape(manga.replace("-", " ")),
|
"manga": text.unescape(manga.replace("-", " ")),
|
||||||
"chapter": chapter,
|
"chapter": chapter,
|
||||||
"count": count,
|
"count": count,
|
||||||
|
|||||||
@@ -82,7 +82,6 @@ class SpectrumnexusChapterExtractor(AsynchronousExtractor):
|
|||||||
def get_job_metadata(self, page):
|
def get_job_metadata(self, page):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
data = {
|
data = {
|
||||||
"category": self.category,
|
|
||||||
"chapter": self.chapter or "",
|
"chapter": self.chapter or "",
|
||||||
"volume": self.volume or "",
|
"volume": self.volume or "",
|
||||||
"identifier": self.identifier.replace("+", " "),
|
"identifier": self.identifier.replace("+", " "),
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ class TumblrUserExtractor(Extractor):
|
|||||||
def get_job_metadata(self, image_data):
|
def get_job_metadata(self, image_data):
|
||||||
"""Collect metadata for extractor-job"""
|
"""Collect metadata for extractor-job"""
|
||||||
data = next(image_data)
|
data = next(image_data)
|
||||||
data["category"] = self.category
|
|
||||||
data["user"] = self.user
|
data["user"] = self.user
|
||||||
del data["cname"]
|
del data["cname"]
|
||||||
del data["description"]
|
del data["description"]
|
||||||
|
|||||||
@@ -30,15 +30,11 @@ class TurboimagehostImageExtractor(Extractor):
|
|||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
page = self.request("http://www.turboimagehost.com/p/" + self.part).text
|
page = self.request("http://www.turboimagehost.com/p/" + self.part).text
|
||||||
data = {
|
data = text.extract_all(page, (
|
||||||
"category": self.category,
|
|
||||||
"token": self.token,
|
|
||||||
}
|
|
||||||
text.extract_all(page, (
|
|
||||||
('width' , 'var imWidth = ', ';'),
|
('width' , 'var imWidth = ', ';'),
|
||||||
('height', 'var imHeight = ', ';'),
|
('height', 'var imHeight = ', ';'),
|
||||||
('url' , '<a href="http://www.turboimagehost.com"><img src="', '"'),
|
('url' , '<a href="http://www.turboimagehost.com"><img src="', '"'),
|
||||||
), values=data)
|
), values={"token": self.token})[0]
|
||||||
text.nameext_from_url(data["url"], data)
|
text.nameext_from_url(data["url"], data)
|
||||||
yield Message.Version, 1
|
yield Message.Version, 1
|
||||||
yield Message.Directory, data
|
yield Message.Directory, data
|
||||||
|
|||||||
Reference in New Issue
Block a user