aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/extractor/netverse.py
diff options
context:
space:
mode:
authorHobbyistDev <105957301+HobbyistDev@users.noreply.github.com>2022-12-29 17:12:07 +0900
committerGitHub <noreply@github.com>2022-12-29 13:42:07 +0530
commit153e88a75151a51cc2a2fbf02d62f66fc09b29d9 (patch)
treeff4a93aad3879d5baf8b54e4b0c52306c44d6930 /yt_dlp/extractor/netverse.py
parent9fcd8ad1f21377f8cf784c35ebc758743227666e (diff)
downloadhypervideo-pre-153e88a75151a51cc2a2fbf02d62f66fc09b29d9.tar.lz
hypervideo-pre-153e88a75151a51cc2a2fbf02d62f66fc09b29d9.tar.xz
hypervideo-pre-153e88a75151a51cc2a2fbf02d62f66fc09b29d9.zip
[extractor/netverse] Add `NetverseSearch` extractor (#5838)
Authored by: HobbyistDev
Diffstat (limited to 'yt_dlp/extractor/netverse.py')
-rw-r--r--yt_dlp/extractor/netverse.py30
1 files changed, 29 insertions, 1 deletions
diff --git a/yt_dlp/extractor/netverse.py b/yt_dlp/extractor/netverse.py
index 3c4fd92eb..398198a1b 100644
--- a/yt_dlp/extractor/netverse.py
+++ b/yt_dlp/extractor/netverse.py
@@ -1,6 +1,6 @@
import itertools
-from .common import InfoExtractor
+from .common import InfoExtractor, SearchInfoExtractor
from .dailymotion import DailymotionIE
from ..utils import smuggle_url, traverse_obj
@@ -251,3 +251,31 @@ class NetversePlaylistIE(NetverseBaseIE):
self.parse_playlist(playlist_data['response'], playlist_id),
traverse_obj(playlist_data, ('response', 'webseries_info', 'slug')),
traverse_obj(playlist_data, ('response', 'webseries_info', 'title')))
+
+
+class NetverseSearchIE(SearchInfoExtractor):
+ _SEARCH_KEY = 'netsearch'
+
+ _TESTS = [{
+ 'url': 'netsearch10:tetangga',
+ 'info_dict': {
+ 'id': 'tetangga',
+ 'title': 'tetangga',
+ },
+ 'playlist_count': 10,
+ }]
+
+ def _search_results(self, query):
+ last_page = None
+ for i in itertools.count(1):
+ search_data = self._download_json(
+ 'https://api.netverse.id/search/elastic/search', query,
+ query={'q': query, 'page': i}, note=f'Downloading page {i}')
+
+ videos = traverse_obj(search_data, ('response', 'data', ...))
+ for video in videos:
+ yield self.url_result(f'https://netverse.id/video/{video["slug"]}', NetverseIE)
+
+ last_page = last_page or traverse_obj(search_data, ('response', 'lastpage'))
+ if not videos or i >= (last_page or 0):
+ break