From 1f0cd0a1b83608d1f2417167f034990bb113b815 Mon Sep 17 00:00:00 2001 From: TRox1972 Date: Tue, 21 Jun 2016 12:33:49 +0200 Subject: [PATCH] [Vine] Add support for playlists --- youtube_dl/extractor/common.py | 5 +++++ youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/vine.py | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 5a2603b50..120072cbb 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -835,6 +835,11 @@ class InfoExtractor(object): 'title': unescapeHTML(json_ld.get('headline')), 'description': unescapeHTML(json_ld.get('articleBody')), }) + elif item_type == 'ItemList': + info.update({ + 'url': unescapeHTML(json_ld.get('url')), + 'itemListElement': json_ld.get('itemListElement'), + }) return dict((k, v) for k, v in info.items() if v is not None) @staticmethod diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index b1b04f2fc..e6b097a75 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -956,6 +956,7 @@ from .vimeo import ( from .vimple import VimpleIE from .vine import ( VineIE, + VinePlaylistIE, VineUserIE, ) from .viki import ( diff --git a/youtube_dl/extractor/vine.py b/youtube_dl/extractor/vine.py index a6a6cc479..412c2417b 100644 --- a/youtube_dl/extractor/vine.py +++ b/youtube_dl/extractor/vine.py @@ -116,6 +116,29 @@ class VineIE(InfoExtractor): } +class VinePlaylistIE(InfoExtractor): + IE_NAME = 'vine:playlist' + _VALID_URL = r'https?://(?:www\.)?vine\.co/playlists/(?P[^/]+)/?(\?.*)?$' + TEST = { + 'url': 'https://vine.co/playlists/songcollab-kenzie-nimmo', + 'info_dict': { + 'id': 'songcollab-kenzie-nimmo', + 'title': 'SongCollab: Kenzie Nimmo', + }, + 'playlist_mincount': 20, + } + + def _real_extract(self, url): + display_id = self._match_id(url) + webpage = self._download_webpage(url, display_id) + + title = self._html_search_regex(r'

(.+)

', webpage, 'title', None) + data = self._search_json_ld(webpage, display_id)['itemListElement'] + + entries = [self.url_result(e['url'], 'Vine') for e in data] + return self.playlist_result(entries, display_id, title) + + class VineUserIE(InfoExtractor): IE_NAME = 'vine:user' _VALID_URL = r'(?:https?://)?vine\.co/(?Pu/)?(?P[^/]+)/?(\?.*)?$'