]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/niconico.py
[niconico:tag] Add support for searching tags (#2789)
[yt-dlp.git] / yt_dlp / extractor / niconico.py
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 = {