mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:20:45 +00:00 
			
		
		
		
	Added VineUserIE extractor for vine user timeline
Added vine user timeline extractor using unofficial vine api user profile and timeline api endpoints.
This commit is contained in:
		| @@ -305,7 +305,10 @@ from .vimeo import ( | ||||
|     VimeoReviewIE, | ||||
|     VimeoWatchLaterIE, | ||||
| ) | ||||
| from .vine import VineIE | ||||
| from .vine import ( | ||||
|     VineIE, | ||||
|     VineUserIE, | ||||
| ) | ||||
| from .viki import VikiIE | ||||
| from .vk import VKIE | ||||
| from .vube import VubeIE | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from __future__ import unicode_literals | ||||
|  | ||||
| import re | ||||
| import json | ||||
| import itertools | ||||
|  | ||||
| from .common import InfoExtractor | ||||
| from ..utils import unified_strdate | ||||
| @@ -58,3 +59,38 @@ class VineIE(InfoExtractor): | ||||
|             'repost_count': data['reposts']['count'], | ||||
|             'formats': formats, | ||||
|         } | ||||
|  | ||||
| class VineUserIE(InfoExtractor): | ||||
|     IE_NAME = 'vine:user' | ||||
|     _VALID_URL = r'(?:https?://)?vine\.co/(?P<user>[^/]+)/?(\?.*)?$' | ||||
|     _VINE_BASE_URL = "https://vine.co/" | ||||
|  | ||||
|     def _profile_url(self, user): | ||||
|         return "%sapi/users/profiles/vanity/%s"%(self._VINE_BASE_URL, user) | ||||
|  | ||||
|     def _timeline_url(self, user_id, page=1): | ||||
|         return "%sapi/timelines/users/%s?page=%s"%(self._VINE_BASE_URL, user_id, page) | ||||
|  | ||||
|     def _profile_data(self, user): | ||||
|         return self._download_json(self._profile_url(user), user) | ||||
|  | ||||
|     def _timeline_data(self, user): | ||||
|         profile_data = self._profile_data(user) | ||||
|         user_id = profile_data['data']['userId'] | ||||
|         timeline_data = [] | ||||
|         for pagenum in itertools.count(1): | ||||
|             timeline_page = self._download_json(self._timeline_url(user_id, pagenum), user) | ||||
|             timeline_data.extend(timeline_page['data']['records']) | ||||
|             if timeline_page['data']['nextPage'] is None: | ||||
|                 break | ||||
|         return timeline_data | ||||
|  | ||||
|     def _extract_videos(self, user): | ||||
|         timeline_data = self._timeline_data(user) | ||||
|         entries = [self.url_result(e['permalinkUrl'], 'Vine') for e in timeline_data] | ||||
|         return self.playlist_result(entries, user) | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         user = mobj.group('user') | ||||
|         return self._extract_videos(user) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jason Normore
					Jason Normore