[naver] change categories (#7746)

- 'naver'        -> 'naver-blog'
- 'chzzk'        -> 'naver-chzzk'
- 'naverwebtoon' -> 'naver-webtoon'
This commit is contained in:
Mike Fährmann
2025-07-02 19:49:41 +02:00
parent a4fb9e6d33
commit e7922ababd
14 changed files with 134 additions and 104 deletions

View File

@@ -1778,16 +1778,6 @@ Description
* ``false``: Match only URLs with known TLDs
extractor.chzzk.offset
----------------------
Type
``integer``
Default
``0``
Description
Custom ``offset`` starting value when paginating over comments.
extractor.cien.files
--------------------
Type
@@ -3634,8 +3624,8 @@ Description
Note: Not supported by all ``moebooru`` instances.
extractor.naver.videos
----------------------
extractor.naver-blog.videos
---------------------------
Type
``bool``
Default
@@ -3644,6 +3634,16 @@ Description
Download videos.
extractor.naver-chzzk.offset
----------------------------
Type
``integer``
Default
``0``
Description
Custom ``offset`` starting value when paginating over comments.
extractor.newgrounds.flash
--------------------------
Type
@@ -7692,7 +7692,10 @@ Description
{
"coomer" : "coomerparty",
"kemono" : "kemonoparty",
"schalenetwork": "koharu"
"schalenetwork": "koharu",
"naver-chzzk" : "chzzk",
"naver-blog" : "naver",
"naver-webtoon": "naverwebtoon"
}
@@ -7704,9 +7707,12 @@ Default
.. code:: json
{
"coomerparty": "coomer",
"kemonoparty": "kemono",
"koharu" : "schalenetwork"
"coomerparty" : "coomer",
"kemonoparty" : "kemono",
"koharu" : "schalenetwork",
"chzzk" : "naver-chzzk",
"naver" : "naver-blog",
"naverwebtoon": "naver-webtoon"
}
Description
Duplicate the configuration settings of extractor `categories`

View File

@@ -90,9 +90,12 @@
"category-map": {},
"config-map": {
"coomerparty": "coomer",
"kemonoparty": "kemono",
"koharu" : "schalenetwork"
"coomerparty" : "coomer",
"kemonoparty" : "kemono",
"koharu" : "schalenetwork",
"chzzk" : "naver-chzzk",
"naver" : "naver-blog",
"naverwebtoon": "naver-webtoon"
},
@@ -182,10 +185,6 @@
"endpoint": "/api/_001_v2",
"tlds": false
},
"chzzk":
{
"offset": 0
},
"cien":
{
"sleep-request": "1.0-2.0",
@@ -456,10 +455,14 @@
"username": "",
"password": ""
},
"naver":
"naver-blog":
{
"videos": true
},
"naver-chzzk":
{
"offset": 0
},
"newgrounds":
{
"username": "",

View File

@@ -133,7 +133,7 @@
500k or 2.5M)
--filesize-max SIZE Do not download files larger than SIZE (e.g.
500k or 2.5M)
--download-archive FILE Record all downloaded or skipped files in FILE
--download-archive FILE Record successfully downloaded files in FILE
and skip downloading any file already in it
--range RANGE Index range(s) specifying which files to
download. These can be either a constant value,

View File

@@ -170,8 +170,8 @@ Consider all listed sites to potentially be NSFW.
<td></td>
</tr>
<tr>
<td>Chzzk</td>
<td>https://chzzk.naver.com</td>
<td>CHZZK</td>
<td>https://chzzk.naver.com/</td>
<td>Comments, Communities</td>
<td></td>
</tr>
@@ -626,13 +626,13 @@ Consider all listed sites to potentially be NSFW.
<td></td>
</tr>
<tr>
<td>Naver</td>
<td>Naver Blog</td>
<td>https://blog.naver.com/</td>
<td>Blogs, Posts</td>
<td></td>
</tr>
<tr>
<td>NaverWebtoon</td>
<td>Naver Webtoon</td>
<td>https://comic.naver.com/</td>
<td>Comics, Episodes</td>
<td></td>
@@ -836,7 +836,7 @@ Consider all listed sites to potentially be NSFW.
<td></td>
</tr>
<tr>
<td>rule #34</td>
<td>Rule 34</td>
<td>https://rule34.paheal.net/</td>
<td>Posts, Tag Searches</td>
<td></td>
@@ -1104,7 +1104,7 @@ Consider all listed sites to potentially be NSFW.
<td></td>
</tr>
<tr>
<td>Webtoon</td>
<td>WEBTOON</td>
<td>https://www.webtoons.com/</td>
<td>Artists, Comics, Episodes</td>
<td></td>

View File

@@ -323,6 +323,9 @@ def main():
"coomer" : "coomerparty",
"kemono" : "kemonoparty",
"schalenetwork": "koharu",
"naver-blog" : "naver",
"naver-chzzk" : "chzzk",
"naver-webtoon": "naverwebtoon",
}
from .extractor import common
common.CATEGORY_MAP = catmap

View File

@@ -169,9 +169,12 @@ def remap_categories():
cmap = opts.get("config-map")
if cmap is None:
cmap = (
("coomerparty", "coomer"),
("kemonoparty", "kemono"),
("koharu" , "schalenetwork"),
("coomerparty" , "coomer"),
("kemonoparty" , "kemono"),
("koharu" , "schalenetwork"),
("naver" , "naver-blog"),
("chzzk" , "naver-chzzk"),
("naverwebtoon", "naver-webtoon"),
)
elif not cmap:
return

View File

@@ -38,7 +38,6 @@ modules = [
"bunkr",
"catbox",
"chevereto",
"chzzk",
"cien",
"civitai",
"comick",
@@ -117,7 +116,8 @@ modules = [
"motherless",
"myhentaigallery",
"myportfolio",
"naver",
"naverblog",
"naverchzzk",
"naverwebtoon",
"nekohouse",
"newgrounds",

View File

@@ -14,13 +14,13 @@ import datetime
import time
class NaverBase():
"""Base class for naver extractors"""
category = "naver"
class NaverBlogBase():
"""Base class for blog.naver.com extractors"""
category = "naver-blog"
root = "https://blog.naver.com"
class NaverPostExtractor(NaverBase, GalleryExtractor):
class NaverBlogPostExtractor(NaverBlogBase, GalleryExtractor):
"""Extractor for blog posts on blog.naver.com"""
subcategory = "post"
filename_fmt = "{num:>03}.{extension}"
@@ -123,7 +123,7 @@ class NaverPostExtractor(NaverBase, GalleryExtractor):
files.append((video["source"], video))
class NaverBlogExtractor(NaverBase, Extractor):
class NaverBlogBlogExtractor(NaverBlogBase, Extractor):
"""Extractor for a user's blog on blog.naver.com"""
subcategory = "blog"
categorytransfer = True
@@ -165,7 +165,7 @@ class NaverBlogExtractor(NaverBase, Extractor):
for post in data["postList"]:
post["url"] = (f"{self.root}/PostView.nhn?blogId="
f"{self.blog_id}&logNo={post['logNo']}")
post["_extractor"] = NaverPostExtractor
post["_extractor"] = NaverBlogPostExtractor
yield Message.Queue, post["url"], post
if not data["hasNextPage"]:

View File

@@ -4,15 +4,15 @@
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
"""Extractors for https://chzzk.naver.com"""
"""Extractors for https://chzzk.naver.com/"""
from .common import Extractor, Message
from .. import text, util
class ChzzkExtractor(Extractor):
"""Base class for chzzk extractors"""
category = "chzzk"
class NaverChzzkExtractor(Extractor):
"""Base class for chzzk.naver.com extractors"""
category = "naver-chzzk"
filename_fmt = "{uid}_{id}_{num}.{extension}"
directory_fmt = ("{category}", "{user[userNickname]}")
archive_fmt = "{uid}_{id}_{num}"
@@ -47,7 +47,7 @@ class ChzzkExtractor(Extractor):
yield Message.Url, url, text.nameext_from_url(url, data)
class ChzzkCommentExtractor(ChzzkExtractor):
class NaverChzzkCommentExtractor(NaverChzzkExtractor):
"""Extractor for individual comment from chzzk.naver.com"""
subcategory = "comment"
pattern = r"(?:https?://)?chzzk\.naver\.com/(\w+)/community/detail/(\d+)"
@@ -59,7 +59,7 @@ class ChzzkCommentExtractor(ChzzkExtractor):
return ({"comment": res["comment"], "user": res["user"]},)
class ChzzkCommunityExtractor(ChzzkExtractor):
class NaverChzzkCommunityExtractor(NaverChzzkExtractor):
"""Extractor for comments from chzzk.naver.com"""
subcategory = "community"
pattern = r"(?:https?://)?chzzk\.naver\.com/(\w+)/community"

View File

@@ -16,13 +16,13 @@ BASE_PATTERN = (r"(?:https?://)?comic\.naver\.com"
r"/(webtoon|challenge|bestChallenge)")
class NaverwebtoonBase():
"""Base class for naver webtoon extractors"""
category = "naverwebtoon"
class NaverWebtoonBase():
"""Base class for comic.naver.com extractors"""
category = "naver-webtoon"
root = "https://comic.naver.com"
class NaverwebtoonEpisodeExtractor(NaverwebtoonBase, GalleryExtractor):
class NaverWebtoonEpisodeExtractor(NaverWebtoonBase, GalleryExtractor):
subcategory = "episode"
directory_fmt = ("{category}", "{comic}")
filename_fmt = "{episode:>03}-{num:>02}.{extension}"
@@ -63,7 +63,7 @@ class NaverwebtoonEpisodeExtractor(NaverwebtoonBase, GalleryExtractor):
]
class NaverwebtoonComicExtractor(NaverwebtoonBase, Extractor):
class NaverWebtoonComicExtractor(NaverWebtoonBase, Extractor):
subcategory = "comic"
categorytransfer = True
pattern = BASE_PATTERN + r"/list(?:\.nhn)?\?([^#]+)"
@@ -95,7 +95,7 @@ class NaverwebtoonComicExtractor(NaverwebtoonBase, Extractor):
base = f"{self.root}/{path}/detail?titleId={data['titleId']}&no="
for article in data["articleList"]:
article["_extractor"] = NaverwebtoonEpisodeExtractor
article["_extractor"] = NaverWebtoonEpisodeExtractor
yield Message.Queue, base + str(article["no"]), article
params["page"] = data["pageInfo"]["nextPage"]

View File

@@ -109,14 +109,16 @@ CATEGORY_MAP = {
"myhentaigallery": "My Hentai Gallery",
"myportfolio" : "Adobe Portfolio",
"natomanga" : "MangaNato",
"naverwebtoon" : "NaverWebtoon",
"naver-blog" : "Naver Blog",
"naver-chzzk" : "CHZZK",
"naver-webtoon" : "Naver Webtoon",
"nelomanga" : "MangaNelo",
"nhentai" : "nhentai",
"nijie" : "nijie",
"nozomi" : "Nozomi.la",
"nsfwalbum" : "NSFWalbum.com",
"nudostar" : "NudoStar.TV",
"paheal" : "rule #34",
"paheal" : "Rule 34",
"photovogue" : "PhotoVogue",
"pidgiwiki" : "PidgiWiki",
"pixeldrain" : "pixeldrain",
@@ -163,7 +165,7 @@ CATEGORY_MAP = {
"vsco" : "VSCO",
"wallpapercave" : "Wallpaper Cave",
"webmshare" : "webmshare",
"webtoons" : "Webtoon",
"webtoons" : "WEBTOON",
"weebcentral" : "Weeb Central",
"wikiart" : "WikiArt.org",
"wikigg" : "wiki.gg",

View File

@@ -4,31 +4,58 @@
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
from gallery_dl.extractor import naver
from gallery_dl.extractor import naverblog
__tests__ = (
{
"#url" : "https://blog.naver.com/rlfqjxm0/221430673006",
"#category": ("", "naver", "post"),
"#class" : naver.NaverPostExtractor,
"#class" : naverblog.NaverBlogPostExtractor,
"#sha1_url" : "6c694f3aced075ed5e9511f1e796d14cb26619cc",
"#sha1_metadata": "a6e23d19afbee86b37d6e7ad934650c379d2cb1e",
"count" : 23,
"num" : range(1, 23),
"extension" : {"jpg", "png"},
"filename" : str,
"blog" : {
"id" : "rlfqjxm0",
"num" : 43030507,
"user": "에나",
},
"post" : {
"date" : "dt:2018-12-30 23:23:00",
"description": "-",
"num" : 221430673006,
"title" : "그림",
},
},
{
"#url" : "https://blog.naver.com/PostView.nhn?blogId=rlfqjxm0&logNo=221430673006",
"#category": ("", "naver", "post"),
"#class" : naver.NaverPostExtractor,
"#class" : naverblog.NaverBlogPostExtractor,
"#sha1_url" : "6c694f3aced075ed5e9511f1e796d14cb26619cc",
"#sha1_metadata": "a6e23d19afbee86b37d6e7ad934650c379d2cb1e",
"count" : 23,
"num" : range(1, 23),
"extension" : {"jpg", "png"},
"filename" : str,
"blog" : {
"id" : "rlfqjxm0",
"num" : 43030507,
"user": "에나",
},
"post" : {
"date" : "dt:2018-12-30 23:23:00",
"description": "-",
"num" : 221430673006,
"title" : "그림",
},
},
{
"#url" : "https://blog.naver.com/PostView.nhn?blogId=rlfqjxm0&logNo=70161391809",
"#comment" : "filenames in EUC-KR encoding (#5126)",
"#category": ("", "naver", "post"),
"#class" : naver.NaverPostExtractor,
"#class" : naverblog.NaverBlogPostExtractor,
"#results": (
"https://blogfiles.pstatic.net/20130305_23/ping9303_1362411028002Dpz9z_PNG/1_사본.png",
"https://blogfiles.pstatic.net/20130305_46/rlfqjxm0_1362473322580x33zi_PNG/오마갓합작.png",
@@ -54,8 +81,7 @@ __tests__ = (
{
"#url" : "https://blog.naver.com/jws790103/223239681955",
"#comment" : "videos",
"#category": ("", "naver", "post"),
"#class" : naver.NaverPostExtractor,
"#class" : naverblog.NaverBlogPostExtractor,
"#pattern" : (
r"https://blogfiles.pstatic.net/MjAyMzA5MjVfMTMy/MDAxNjk1NjQ0MzI4OTE3.UxgvxTesk7Y88OWGvPMwQhbmCPp6mPA_C-5l5lJggyEg.B0DbxNEzz3DxRJtShiiBHDLzLQSCFDo_Bp6c-bcMDiog.JPEG.jws790103/20230925%EF%BC%BF080218.jpg",
r"https://blogfiles.pstatic.net/MjAyMzA5MjVfMjAz/MDAxNjk1NjQ0MzI4OTA5.Kd4VzqHhhrgby7rCA1iPdBX6f_k2DPEBnlRdOWD-kPgg.U0C1lmlKVMZMA4hhhs69nolZwCZ4Plme4KVbNfhezhkg.JPEG.jws790103/20230925%EF%BC%BF081103.jpg",
@@ -85,8 +111,7 @@ __tests__ = (
{
"#url" : "https://blog.naver.com/jws790103/223239681955",
"#comment" : "'videos' option",
"#category": ("", "naver", "post"),
"#class" : naver.NaverPostExtractor,
"#class" : naverblog.NaverBlogPostExtractor,
"#options" : {"videos": False},
"#results": (
"https://blogfiles.pstatic.net/MjAyMzA5MjVfMTMy/MDAxNjk1NjQ0MzI4OTE3.UxgvxTesk7Y88OWGvPMwQhbmCPp6mPA_C-5l5lJggyEg.B0DbxNEzz3DxRJtShiiBHDLzLQSCFDo_Bp6c-bcMDiog.JPEG.jws790103/20230925%EF%BC%BF080218.jpg",
@@ -103,32 +128,28 @@ __tests__ = (
{
"#url" : "https://blog.naver.com/PostView.naver?blogId=rlfqjxm0&logNo=221430673006",
"#category": ("", "naver", "post"),
"#class" : naver.NaverPostExtractor,
"#class" : naverblog.NaverBlogPostExtractor,
},
{
"#url" : "https://blog.naver.com/gukjung",
"#category": ("", "naver", "blog"),
"#class" : naver.NaverBlogExtractor,
"#pattern" : naver.NaverPostExtractor.pattern,
"#class" : naverblog.NaverBlogBlogExtractor,
"#pattern" : naverblog.NaverBlogPostExtractor.pattern,
"#range" : "1-12",
"#count" : 12,
},
{
"#url" : "https://blog.naver.com/PostList.nhn?blogId=gukjung",
"#category": ("", "naver", "blog"),
"#class" : naver.NaverBlogExtractor,
"#pattern" : naver.NaverPostExtractor.pattern,
"#class" : naverblog.NaverBlogBlogExtractor,
"#pattern" : naverblog.NaverBlogPostExtractor.pattern,
"#range" : "1-12",
"#count" : 12,
},
{
"#url" : "https://blog.naver.com/PostList.naver?blogId=gukjung",
"#category": ("", "naver", "blog"),
"#class" : naver.NaverBlogExtractor,
"#class" : naverblog.NaverBlogBlogExtractor,
},
)

View File

@@ -4,14 +4,14 @@
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
from gallery_dl.extractor import chzzk
from gallery_dl.extractor import naverchzzk
__tests__ = (
{
"#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community/detail/13393754",
"#class" : chzzk.ChzzkCommentExtractor,
"#class" : naverchzzk.NaverChzzkCommentExtractor,
"#results": (
"https://nng-phinf.pstatic.net/MjAyNDA3MDlfNDgg/MDAxNzIwNTMzNzg2MDUx.0K9XrEW9CCSd2b7VdQHf8RGWkHAUsqEhNnLlleA11SUg.ZLx2V3gJPZR-kzrMY3E17wbu1ZmzYjitrEKmM_ykeWkg.PNG/tftyt.png",
),
@@ -35,7 +35,7 @@ __tests__ = (
{
"#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community/detail/20273040",
"#class" : chzzk.ChzzkCommentExtractor,
"#class" : naverchzzk.NaverChzzkCommentExtractor,
"#results": (
"https://nng-phinf.pstatic.net/MjAyNTA2MTNfMTUw/MDAxNzQ5ODI1NjkyMzgx.8bsZ9moAfpuK3dqhHBxdd_CQdSuP5-MRrFgyJGDfdtEg.cs9HcI9BxBVXGUqJQhsUSGyOYvB3vj2itDB-arpvmokg.GIF/%EB%AC%BC%EC%9E%90%EB%AF%B8%EB%84%A4a.gif",
"https://nng-phinf.pstatic.net/MjAyNTA2MTNfMTAg/MDAxNzQ5ODI1NzA2NDk4.8PHxVU-4N8UE6mnDoDRhTMYoao9p0niz08DPQEqm2pog.C4KZL_RiK-jGlfKgoXJS5LdO3BDZUuPDCSsaqttE6Jwg.GIF/%EB%AC%BC%EC%9E%90%EB%AF%B8%EB%84%A4ab.gif",
@@ -65,14 +65,14 @@ __tests__ = (
{
"#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community",
"#class": chzzk.ChzzkCommunityExtractor,
"#class": naverchzzk.NaverChzzkCommunityExtractor,
"#range": "1-50",
"#count": 50,
},
{
"#url" : "https://chzzk.naver.com/f30b95fc9af53a75b781d7d3dd933892/community",
"#class" : chzzk.ChzzkCommunityExtractor,
"#class" : naverchzzk.NaverChzzkCommunityExtractor,
"#options": {"offset": 50},
"#range" : "1-50",
"#count" : 50,

View File

@@ -10,8 +10,7 @@ from gallery_dl.extractor import naverwebtoon
__tests__ = (
{
"#url" : "https://comic.naver.com/webtoon/detail?titleId=26458&no=1&weekday=tue",
"#category": ("", "naverwebtoon", "episode"),
"#class" : naverwebtoon.NaverwebtoonEpisodeExtractor,
"#class" : naverwebtoon.NaverWebtoonEpisodeExtractor,
"#count" : 14,
"#sha1_url" : "47a956ba8c7a837213d5985f50c569fcff986f75",
"#sha1_content": "3806b6e8befbb1920048de9888dfce6220f69a60",
@@ -34,8 +33,7 @@ __tests__ = (
{
"#url" : "https://comic.naver.com/challenge/detail?titleId=765124&no=1",
"#category": ("", "naverwebtoon", "episode"),
"#class" : naverwebtoon.NaverwebtoonEpisodeExtractor,
"#class" : naverwebtoon.NaverWebtoonEpisodeExtractor,
"#pattern" : r"https://image-comic\.pstatic\.net/user_contents_data/challenge_comic/2021/01/19/342586/upload_7149856273586337846\.jpeg",
"#count" : 1,
@@ -64,8 +62,7 @@ __tests__ = (
{
"#url" : "https://comic.naver.com/bestChallenge/detail?titleId=620732&no=334",
"#comment" : "empty tags (#5120)",
"#category": ("", "naverwebtoon", "episode"),
"#class" : naverwebtoon.NaverwebtoonEpisodeExtractor,
"#class" : naverwebtoon.NaverWebtoonEpisodeExtractor,
"#count" : 9,
"artist" : [],
@@ -81,42 +78,37 @@ __tests__ = (
{
"#url" : "https://comic.naver.com/bestChallenge/detail.nhn?titleId=771467&no=3",
"#category": ("", "naverwebtoon", "episode"),
"#class" : naverwebtoon.NaverwebtoonEpisodeExtractor,
"#class" : naverwebtoon.NaverWebtoonEpisodeExtractor,
"#pattern" : r"https://image-comic\.pstatic\.net/user_contents_data/challenge_comic/2021/04/28/345534/upload_3617293622396203109\.jpeg",
"#count" : 1,
},
{
"#url" : "https://comic.naver.com/webtoon/list?titleId=22073",
"#category": ("", "naverwebtoon", "comic"),
"#class" : naverwebtoon.NaverwebtoonComicExtractor,
"#pattern" : naverwebtoon.NaverwebtoonEpisodeExtractor.pattern,
"#class" : naverwebtoon.NaverWebtoonComicExtractor,
"#pattern" : naverwebtoon.NaverWebtoonEpisodeExtractor.pattern,
"#count" : 32,
},
{
"#url" : "https://comic.naver.com/webtoon/list?titleId=765124",
"#comment" : "/webtoon/ path for 'challenge' comic (#5123)",
"#category": ("", "naverwebtoon", "comic"),
"#class" : naverwebtoon.NaverwebtoonComicExtractor,
"#class" : naverwebtoon.NaverWebtoonComicExtractor,
"#range" : "1",
"#results" : "https://comic.naver.com/challenge/detail?titleId=765124&no=1",
},
{
"#url" : "https://comic.naver.com/challenge/list?titleId=765124",
"#category": ("", "naverwebtoon", "comic"),
"#class" : naverwebtoon.NaverwebtoonComicExtractor,
"#pattern" : naverwebtoon.NaverwebtoonEpisodeExtractor.pattern,
"#class" : naverwebtoon.NaverWebtoonComicExtractor,
"#pattern" : naverwebtoon.NaverWebtoonEpisodeExtractor.pattern,
"#count" : 24,
},
{
"#url" : "https://comic.naver.com/bestChallenge/list.nhn?titleId=789786",
"#category": ("", "naverwebtoon", "comic"),
"#class" : naverwebtoon.NaverwebtoonComicExtractor,
"#pattern" : naverwebtoon.NaverwebtoonEpisodeExtractor.pattern,
"#class" : naverwebtoon.NaverWebtoonComicExtractor,
"#pattern" : naverwebtoon.NaverWebtoonEpisodeExtractor.pattern,
"#count" : 1,
},