]> jfr.im git - yt-dlp.git/commitdiff
[extractor/netverse] Add `NetverseSearch` extractor (#5838)
authorHobbyistDev <redacted>
Thu, 29 Dec 2022 08:12:07 +0000 (17:12 +0900)
committerGitHub <redacted>
Thu, 29 Dec 2022 08:12:07 +0000 (13:42 +0530)
Authored by: HobbyistDev

yt_dlp/extractor/_extractors.py
yt_dlp/extractor/netverse.py

index 672eb959629e7fc8d18213c56c817a6d28375f88..1b76d82643dd34f87b53c950fed0722297a6067b 100644 (file)
 from .netverse import (
     NetverseIE,
     NetversePlaylistIE,
+    NetverseSearchIE,
 )
 from .newgrounds import (
     NewgroundsIE,
index 3c4fd92eb0029dc27737c02a799836bd0894778d..398198a1b04f266d4a3cab7b30a62e085606a20a 100644 (file)
@@ -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 @@ def _real_extract(self, url):
             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