From c2e6381597bef545af75cd6fe821d89e9aaae499 Mon Sep 17 00:00:00 2001 From: rcmz0 Date: Wed, 15 Jul 2020 19:43:52 +0200 Subject: [PATCH] added VimeoSearchIE --- youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/vimeo.py | 46 +++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 4b3092028..c17638df9 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -1334,6 +1334,7 @@ from .vimeo import ( VimeoUserIE, VimeoWatchLaterIE, VHXEmbedIE, + VimeoSearchIE, ) from .vimple import VimpleIE from .vine import ( diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index 421795b94..78a662e4a 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -7,7 +7,7 @@ import json import re import itertools -from .common import InfoExtractor +from .common import InfoExtractor, SearchInfoExtractor from ..compat import ( compat_kwargs, compat_HTTPError, @@ -1126,3 +1126,47 @@ class VHXEmbedIE(VimeoBaseInfoExtractor): info = self._parse_config(config, video_id) self._vimeo_sort_formats(info['formats']) return info + + +class VimeoSearchIE(SearchInfoExtractor): + IE_DESC = 'vimeo.com search' + _MAX_RESULTS = float('inf') + IE_NAME = 'vimeo:search' + _SEARCH_KEY = 'vimeosearch' + _TESTS = [] + + def _get_n_results(self, query, n): + """Get a specified number of results for a query""" + + video_ids = [] + + for pagenum in itertools.count(1): + if len(video_ids) >= n: + break + + webpage = self._download_webpage( + 'https://vimeo.com/search/page:%i?' % pagenum, + 'vimeosearch:' + query, + query={'q': query}) + + for match in re.finditer(r'vimeo.com\\\/([0-9]{9})', webpage): + if len(video_ids) >= n: + break + + video_id = match.group(1) + + # video ids may appear multiple time so only add new ones + if video_id not in video_ids: + video_ids.append(video_id) + + entries = [] + + for video_id in video_ids: + entries.append({'_type': 'url', 'url': 'https://vimeo.com/' + video_id}) + + return { + '_type': 'playlist', + 'id': query, + 'title': query, + 'entries': entries + }