aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/extractor/niconico.py36
1 files changed, 22 insertions, 14 deletions
diff --git a/yt_dlp/extractor/niconico.py b/yt_dlp/extractor/niconico.py
index 29fc1da1e..2f04de9e2 100644
--- a/yt_dlp/extractor/niconico.py
+++ b/yt_dlp/extractor/niconico.py
@@ -592,8 +592,8 @@ class NiconicoPlaylistBaseIE(InfoExtractor):
@staticmethod
def _parse_owner(item):
return {
- 'uploader': traverse_obj(item, ('owner', 'name')),
- 'uploader_id': traverse_obj(item, ('owner', 'id')),
+ 'uploader': traverse_obj(item, ('owner', ('name', ('user', 'nickname')), {str}, any)),
+ 'uploader_id': traverse_obj(item, ('owner', 'id', {str})),
}
def _fetch_page(self, list_id, page):
@@ -666,7 +666,7 @@ class NiconicoPlaylistIE(NiconicoPlaylistBaseIE):
mylist.get('name'), mylist.get('description'), **self._parse_owner(mylist))
-class NiconicoSeriesIE(InfoExtractor):
+class NiconicoSeriesIE(NiconicoPlaylistBaseIE):
IE_NAME = 'niconico:series'
_VALID_URL = r'https?://(?:(?:www\.|sp\.)?nicovideo\.jp(?:/user/\d+)?|nico\.ms)/series/(?P<id>\d+)'
@@ -675,6 +675,9 @@ class NiconicoSeriesIE(InfoExtractor):
'info_dict': {
'id': '110226',
'title': 'ご立派ァ!のシリーズ',
+ 'description': '楽しそうな外人の吹き替えをさせたら終身名誉ホモガキの右に出る人はいませんね…',
+ 'uploader': 'アルファるふぁ',
+ 'uploader_id': '44113208',
},
'playlist_mincount': 10,
}, {
@@ -682,6 +685,9 @@ class NiconicoSeriesIE(InfoExtractor):
'info_dict': {
'id': '12312',
'title': 'バトルスピリッツ お勧めカード紹介(調整中)',
+ 'description': '',
+ 'uploader': '野鳥',
+ 'uploader_id': '2275360',
},
'playlist_mincount': 103,
}, {
@@ -689,19 +695,21 @@ class NiconicoSeriesIE(InfoExtractor):
'only_matching': True,
}]
+ def _call_api(self, list_id, resource, query):
+ return self._download_json(
+ f'https://nvapi.nicovideo.jp/v2/series/{list_id}', list_id,
+ f'Downloading {resource}', query=query,
+ headers=self._API_HEADERS)['data']
+
def _real_extract(self, url):
list_id = self._match_id(url)
- webpage = self._download_webpage(url, list_id)
-
- title = self._search_regex(
- (r'<title>「(.+)(全',
- r'<div class="TwitterShareButton"\s+data-text="(.+)\s+https:'),
- webpage, 'title', fatal=False)
- if title:
- title = unescapeHTML(title)
- json_data = next(self._yield_json_ld(webpage, None, fatal=False))
- return self.playlist_from_matches(
- traverse_obj(json_data, ('itemListElement', ..., 'url')), list_id, title, ie=NiconicoIE)
+ series = self._call_api(list_id, 'list', {
+ 'pageSize': 1,
+ })['detail']
+
+ return self.playlist_result(
+ self._entries(list_id), list_id,
+ series.get('title'), series.get('description'), **self._parse_owner(series))
class NiconicoHistoryIE(NiconicoPlaylistBaseIE):