]> jfr.im git - yt-dlp.git/commitdiff
[niconico:tag] Add support for searching tags (#2789)
authorLesmiscore (Naoya Ozaki) <redacted>
Tue, 15 Feb 2022 17:12:39 +0000 (02:12 +0900)
committerGitHub <redacted>
Tue, 15 Feb 2022 17:12:39 +0000 (02:12 +0900)
yt_dlp/extractor/extractors.py
yt_dlp/extractor/niconico.py

index e4dc35f71317f0f1843871e84b1dfa671364dd9e..c3f3eb97455983254a2c30090b46ac57879e642c 100644 (file)
     NicovideoSearchDateIE,
     NicovideoSearchIE,
     NicovideoSearchURLIE,
+    NicovideoTagURLIE,
 )
 from .ninecninemedia import (
     NineCNineMediaIE,
index ee888e9d359500ca2f445cc98731a6d999813245..6e561bee5f917d88640402dc2926538c4c361bca 100644 (file)
@@ -663,6 +663,8 @@ def pagefunc(pagenum):
 
 
 class NicovideoSearchBaseIE(InfoExtractor):
+    _SEARCH_TYPE = 'search'
+
     def _entries(self, url, item_id, query=None, note='Downloading page %(page)s'):
         query = query or {}
         pages = [query['page']] if 'page' in query else itertools.count(1)
@@ -677,7 +679,7 @@ def _entries(self, url, item_id, query=None, note='Downloading page %(page)s'):
 
     def _search_results(self, query):
         return self._entries(
-            self._proto_relative_url(f'//www.nicovideo.jp/search/{query}'), query)
+            self._proto_relative_url(f'//www.nicovideo.jp/{self._SEARCH_TYPE}/{query}'), query)
 
 
 class NicovideoSearchIE(NicovideoSearchBaseIE, SearchInfoExtractor):
@@ -757,6 +759,25 @@ def _get_entries_for_date(self, url, item_id, start_date, end_date=None, page_nu
         yield from super()._entries(url, item_id, query=query, note=note)
 
 
+class NicovideoTagURLIE(NicovideoSearchBaseIE):
+    IE_NAME = 'niconico:tag'
+    IE_DESC = 'NicoNico video tag URLs'
+    _SEARCH_TYPE = 'tag'
+    _VALID_URL = r'https?://(?:www\.)?nicovideo\.jp/tag/(?P<id>[^?#&]+)?'
+    _TESTS = [{
+        'url': 'https://www.nicovideo.jp/tag/ドキュメンタリー淫夢',
+        'info_dict': {
+            'id': 'ドキュメンタリー淫夢',
+            'title': 'ドキュメンタリー淫夢'
+        },
+        'playlist_mincount': 400,
+    }]
+
+    def _real_extract(self, url):
+        query = self._match_id(url)
+        return self.playlist_result(self._entries(url, query), query, query)
+
+
 class NiconicoUserIE(InfoExtractor):
     _VALID_URL = r'https?://(?:www\.)?nicovideo\.jp/user/(?P<id>\d+)/?(?:$|[#?])'
     _TEST = {