From 6626c0d6781da24203722af0fcf94b8ae39aaeea Mon Sep 17 00:00:00 2001 From: animelover1984 Date: Fri, 12 Mar 2021 23:11:10 -0800 Subject: [PATCH] Added Niconico channel extractor --- youtube_dl/extractor/extractors.py | 2 +- youtube_dl/extractor/niconico.py | 34 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 696d0268b817..f4253cb8003d 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -742,7 +742,7 @@ NickNightIE, NickRuIE, ) -from .niconico import NiconicoIE, NiconicoPlaylistIE, NicovideoIE, NiconicoLiveIE +from .niconico import NiconicoIE, NiconicoPlaylistIE, NicovideoIE, NiconicoLiveIE, NiconicoChannelIE from .ninecninemedia import NineCNineMediaIE from .ninegag import NineGagIE from .ninenow import NineNowIE diff --git a/youtube_dl/extractor/niconico.py b/youtube_dl/extractor/niconico.py index 955a4d12b1cd..1af02b92487c 100644 --- a/youtube_dl/extractor/niconico.py +++ b/youtube_dl/extractor/niconico.py @@ -802,6 +802,40 @@ def _real_extract(self, url): 'entries': entries, } +class NiconicoChannelIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?nicovideo\.jp/user/(?P\d+)' + # May need to add support for pagination? Need to find a user with many video uploads to test + _API_URL = "https://nvapi.nicovideo.jp/v1/users/%s/videos?sortKey=registeredAt&sortOrder=desc&pageSize=%s&page=%s" + _TEST = {} + _api_headers = { + 'X-Frontend-ID': '6', + 'X-Frontend-Version': '0', + 'X-Niconico-Language': 'en-us' + } + _PAGE_SIZE = 100 + + def _real_extract(self, url): + list_id = self._match_id(url) + json_parsed = self._download_json(self._API_URL % (list_id, self._PAGE_SIZE, 1), "None", headers=self._api_headers) + total_count = json_parsed['data']['totalCount'] + + for page in range(1, math.ceil(total_count / 100.0) + 1): + json_parsed = self._download_json(self._API_URL % (list_id, self._PAGE_SIZE, page), "None", headers=self._api_headers) + + entries = [{ + '_type': 'url', + 'ie_key': NiconicoIE.ie_key(), + 'url': ('https://www.nicovideo.jp/watch/%s' % + entry['id']), + 'id': entry['id'], + } for entry in json_parsed["data"]["items"]] + + return { + '_type': 'playlist', + 'id': list_id, + 'entries': entries + } + # USAGE: youtube-dl "nicosearch:" class NicovideoIE(SearchInfoExtractor): IE_DESC = 'Nico video search'