supports old mode

This commit is contained in:
pekophilia 2025-10-26 01:12:57 +09:00
parent 2c871bbacf
commit 4f7ca718f2

View file

@ -2,6 +2,7 @@ import datetime as dt
import functools import functools
import itertools import itertools
import json import json
import re
from .common import InfoExtractor, SearchInfoExtractor from .common import InfoExtractor, SearchInfoExtractor
from ..networking.exceptions import HTTPError from ..networking.exceptions import HTTPError
@ -720,21 +721,27 @@ class NicovideoSearchBaseIE(InfoExtractor):
def _entries(self, url, item_id, query=None, note='Downloading page %(page)s'): def _entries(self, url, item_id, query=None, note='Downloading page %(page)s'):
query = query or {} query = query or {}
pages = [query['page']] if 'page' in query else itertools.count(1) pages = [query['page']] if 'page' in query else itertools.count(1)
is_old = False
for page_num in pages: for page_num in pages:
query['page'] = str(page_num) query['page'] = str(page_num)
webpage = self._download_webpage(url, item_id, query=query, note=note % {'page': page_num}) webpage = self._download_webpage(url, item_id, query=query, note=note % {'page': page_num})
server_response = self._search_regex(r'<meta\s+name=["\']server-response["\']\s+content=["\']([^"\']+)["\']', webpage, 'videos json') results = re.findall(r'(?<=data-video-id=)["\']?(?P<videoid>.*?)(?=["\'])', webpage)
sr_json = self._parse_json(unescapeHTML(server_response), 'search response') or {} has_next = None
results = traverse_obj( if results:
sr_json, is_old = True
('data', 'response', '$getSearchVideoV2', 'data', 'items', ..., ('id')), if not is_old:
) or [] server_response = self._search_regex(r'<meta\s+name=["\']server-response["\']\s+content=["\']([^"\']+)["\']', webpage, 'videos json', fatal=False)
sr_json = self._parse_json(unescapeHTML(server_response) or '{}', 'search response') or {}
results = traverse_obj(
sr_json,
('data', 'response', '$getSearchVideoV2', 'data', 'items', ..., ('id')),
) or []
has_next = traverse_obj(sr_json, ('data', 'response', '$getSearchVideoV2', 'data', 'hasNext'), default=None)
for item in results: for item in results:
yield self.url_result(f'https://www.nicovideo.jp/watch/{item}', 'Niconico', item) yield self.url_result(f'https://www.nicovideo.jp/watch/{item}', 'Niconico', item)
has_next = traverse_obj(sr_json, ('data', 'response', '$getSearchVideoV2', 'data', 'hasNext'), default=None)
if has_next is not None and has_next is False: if has_next is not None and has_next is False:
break break
if not results: if not results: