[lensdump] update

- update docs/supportedsites.md
- add GPL2 header
- use BASE_PATTERN
- improve LensdumpImageExtractor
This commit is contained in:
Mike Fährmann
2023-05-26 23:39:17 +02:00
parent d5300cf381
commit 58f7480d46
3 changed files with 49 additions and 32 deletions

View File

@@ -463,6 +463,12 @@ Consider all sites to be NSFW unless otherwise known.
<td>Chapters, Manga</td> <td>Chapters, Manga</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>Lensdump</td>
<td>https://lensdump.com/</td>
<td>Albums, individual Images</td>
<td></td>
</tr>
<tr> <tr>
<td>Lexica</td> <td>Lexica</td>
<td>https://lexica.art/</td> <td>https://lexica.art/</td>

View File

@@ -1,21 +1,22 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
"""Extractors for https://lensdump.com/""" """Extractors for https://lensdump.com/"""
import json
from .common import GalleryExtractor, Extractor, Message from .common import GalleryExtractor, Extractor, Message
from .. import text from .. import text, util
BASE_PATTERN = r"(?:https?://)?lensdump\.com"
class LensdumpExtractor(GalleryExtractor): class LensdumpBase():
"""Extractor for lensdump.com""" """Base class for lensdump extractors"""
category = "lensdump" category = "lensdump"
root = "https://lensdump.com" root = "https://lensdump.com"
def get_meta_prop(self, page, name):
return text.extr(page, 'property="{}" content="'.format(name), '"')
def nodes(self, page=None): def nodes(self, page=None):
if page is None: if page is None:
page = self.request(self.url).text page = self.request(self.url).text
@@ -44,10 +45,9 @@ class LensdumpExtractor(GalleryExtractor):
page_url = None page_url = None
class LensdumpAlbumExtractor(LensdumpExtractor): class LensdumpAlbumExtractor(LensdumpBase, GalleryExtractor):
subcategory = "album" subcategory = "album"
pattern = (r"(?:https?://)?lensdump\.com/" pattern = BASE_PATTERN + r"/(?:((?!\w+/albums|a/|i/)\w+)|a/(\w+))"
r"(?:((?!\w+/albums|a/|i/)\w+)|a/(\w+))")
test = ( test = (
("https://lensdump.com/a/1IhJr", { ("https://lensdump.com/a/1IhJr", {
"url": "7428cc906e7b291c778d446a11c602b81ba72840", "url": "7428cc906e7b291c778d446a11c602b81ba72840",
@@ -76,7 +76,7 @@ class LensdumpAlbumExtractor(LensdumpExtractor):
def images(self, page): def images(self, page):
for node in self.nodes(page): for node in self.nodes(page):
# get urls and filenames of images in current page # get urls and filenames of images in current page
json_data = json.loads(text.unquote( json_data = util.json_loads(text.unquote(
text.extr(node, 'data-object="', '"'))) text.extr(node, 'data-object="', '"')))
image_id = json_data.get('name') image_id = json_data.get('name')
image_url = json_data.get('url') image_url = json_data.get('url')
@@ -95,13 +95,11 @@ class LensdumpAlbumExtractor(LensdumpExtractor):
}) })
class LensdumpAlbumsExtractor(LensdumpExtractor): class LensdumpAlbumsExtractor(LensdumpBase, Extractor):
"""Extractor for album list from lensdump.com""" """Extractor for album list from lensdump.com"""
subcategory = "albums" subcategory = "albums"
pattern = r"(?:https?://)?lensdump\.com/\w+/albums" pattern = BASE_PATTERN + r"/\w+/albums"
test = ("https://lensdump.com/vstar925/albums",)
def __init__(self, match):
Extractor.__init__(self, match)
def items(self): def items(self):
for node in self.nodes(): for node in self.nodes():
@@ -111,25 +109,27 @@ class LensdumpAlbumsExtractor(LensdumpExtractor):
"_extractor": LensdumpAlbumExtractor} "_extractor": LensdumpAlbumExtractor}
class LensdumpImageExtractor(LensdumpExtractor): class LensdumpImageExtractor(LensdumpBase, Extractor):
"""Extractor for individual images on lensdump.com""" """Extractor for individual images on lensdump.com"""
subcategory = "image" subcategory = "image"
filename_fmt = "{category}_{id}{title:?_//}.{extension}" filename_fmt = "{category}_{id}{title:?_//}.{extension}"
directory_fmt = ("{category}",) directory_fmt = ("{category}",)
archive_fmt = "{id}" archive_fmt = "{id}"
pattern = r"(?:https?://)?lensdump\.com/i/(\w+)" pattern = BASE_PATTERN + r"/i/(\w+)"
test = ( test = (
("https://lensdump.com/i/tyoAyM", { ("https://lensdump.com/i/tyoAyM", {
"pattern": r"https://i\d\.lensdump\.com/i/tyoAyM\.webp",
"url": "ae9933f5f3bd9497bfc34e3e70a0fbef6c562d38", "url": "ae9933f5f3bd9497bfc34e3e70a0fbef6c562d38",
"content": "1aa749ed2c0cf679ec8e1df60068edaf3875de46", "content": "1aa749ed2c0cf679ec8e1df60068edaf3875de46",
"keyword": { "keyword": {
"date": "dt:2022-08-01 08:24:28",
"extension": "webp", "extension": "webp",
"filename": "tyoAyM", "filename": "tyoAyM",
"height": "400", "height": 400,
"id": "tyoAyM", "id": "tyoAyM",
"title": "MYOBI clovis bookcaseset", "title": "MYOBI clovis bookcaseset",
"url": "https://i2.lensdump.com/i/tyoAyM.webp", "url": "https://i2.lensdump.com/i/tyoAyM.webp",
"width": "620", "width": 620,
}, },
}), }),
) )
@@ -139,15 +139,23 @@ class LensdumpImageExtractor(LensdumpExtractor):
self.key = match.group(1) self.key = match.group(1)
def items(self): def items(self):
page = self.request(self.url).text url = "{}/i/{}".format(self.root, self.key)
image_url = text.extr(page, 'property="og:image" content="', '"') extr = text.extract_from(self.request(url).text)
data = text.nameext_from_url(image_url)
data.update({ data = {
'id': self.key, "id" : self.key,
'url': image_url, "title" : text.unescape(extr(
'title': self.get_meta_prop(page, "og:title"), 'property="og:title" content="', '"')),
'height': self.get_meta_prop(page, "image:height"), "url" : extr(
'width': self.get_meta_prop(page, "image:width"), 'property="og:image" content="', '"'),
}) "width" : text.parse_int(extr(
'property="image:width" content="', '"')),
"height": text.parse_int(extr(
'property="image:height" content="', '"')),
"date" : text.parse_datetime(extr(
'<span title="', '"'), "%Y-%m-%d %H:%M:%S"),
}
text.nameext_from_url(data["url"], data)
yield Message.Directory, data yield Message.Directory, data
yield Message.Url, image_url, data yield Message.Url, data["url"], data

View File

@@ -197,6 +197,9 @@ SUBCATEGORY_MAP = {
"discord": "Discord Servers", "discord": "Discord Servers",
"discord-server": "", "discord-server": "",
}, },
"lensdump": {
"albums": "",
},
"mangadex": { "mangadex": {
"feed" : "Followed Feed", "feed" : "Followed Feed",
}, },