you-get/src/you_get/extractors/vimeo.py

69 lines
2.8 KiB
Python
Raw Normal View History

2012-09-02 05:13:16 +04:00
#!/usr/bin/env python
2015-09-10 09:15:31 +03:00
__all__ = ['vimeo_download', 'vimeo_download_by_id', 'vimeo_download_by_channel', 'vimeo_download_by_channel_id']
2012-09-02 05:13:16 +04:00
from ..common import *
2015-09-10 09:15:31 +03:00
from json import loads
access_token = 'f6785418277b72c7c87d3132c79eec24' #By Beining
#----------------------------------------------------------------------
def vimeo_download_by_channel(url, output_dir='.', merge=False, info_only=False, **kwargs):
2015-09-10 09:15:31 +03:00
"""str->None"""
# https://vimeo.com/channels/464686
channel_id = match1(url, r'http://vimeo.com/channels/(\w+)')
2015-09-13 00:20:31 +03:00
vimeo_download_by_channel_id(channel_id, output_dir, merge, info_only)
2015-09-10 09:15:31 +03:00
#----------------------------------------------------------------------
def vimeo_download_by_channel_id(channel_id, output_dir='.', merge=False, info_only=False):
2015-09-10 09:15:31 +03:00
"""str/int->None"""
html = get_content('https://api.vimeo.com/channels/{channel_id}/videos?access_token={access_token}'.format(channel_id=channel_id, access_token=access_token))
2015-09-10 09:15:31 +03:00
data = loads(html)
id_list = []
2015-10-20 04:50:38 +03:00
2015-09-10 09:15:31 +03:00
#print(data)
for i in data['data']:
id_list.append(match1(i['uri'], r'/videos/(\w+)'))
2015-10-20 04:50:38 +03:00
2015-09-10 09:15:31 +03:00
for id in id_list:
2015-09-13 00:20:31 +03:00
vimeo_download_by_id(id, None, output_dir, merge, info_only)
2012-09-02 05:13:16 +04:00
def vimeo_download_by_id(id, title=None, output_dir='.', merge=True, info_only=False, **kwargs):
2015-10-21 06:23:45 +03:00
try:
# normal Vimeo video
html = get_content('https://vimeo.com/' + id)
2015-10-21 06:23:45 +03:00
config_url = unescape_html(r1(r'data-config-url="([^"]+)"', html))
2015-10-20 04:50:38 +03:00
video_page = get_content(config_url, headers=fake_headers)
title = r1(r'"title":"([^"]+)"', video_page)
2015-11-12 03:03:08 +03:00
info = loads(video_page)
2015-10-21 06:23:45 +03:00
except:
# embedded player - referer may be required
if 'referer' in kwargs:
fake_headers['Referer'] = kwargs['referer']
2015-10-20 04:50:38 +03:00
video_page = get_content('http://player.vimeo.com/video/%s' % id, headers=fake_headers)
title = r1(r'<title>([^<]+)</title>', video_page)
2015-11-12 03:03:08 +03:00
info = loads(match1(video_page, r'var t=(\{[^;]+\});'))
2015-10-20 04:50:38 +03:00
2015-11-12 03:03:08 +03:00
streams = info['request']['files']['progressive']
streams = sorted(streams, key=lambda i: i['height'])
url = streams[-1]['url']
2015-10-20 04:50:38 +03:00
2013-10-23 20:32:56 +04:00
type, ext, size = url_info(url, faker=True)
2015-10-20 04:50:38 +03:00
2012-09-02 05:13:16 +04:00
print_info(site_info, title, type, size)
if not info_only:
download_urls([url], title, ext, size, output_dir, merge=merge, faker=True)
2012-09-02 05:13:16 +04:00
def vimeo_download(url, output_dir='.', merge=True, info_only=False, **kwargs):
if re.match(r'https?://vimeo.com/channels/\w+', url):
2015-09-13 00:20:31 +03:00
vimeo_download_by_channel(url, output_dir, merge, info_only)
2015-09-10 09:15:31 +03:00
else:
id = r1(r'https?://[\w.]*vimeo.com[/\w]*/(\d+)', url)
2015-09-10 09:15:31 +03:00
assert id
2015-10-20 04:50:38 +03:00
vimeo_download_by_id(id, None, output_dir=output_dir, merge=merge, info_only=info_only, **kwargs)
2012-09-02 05:13:16 +04:00
site_info = "Vimeo.com"
download = vimeo_download
2015-09-10 09:15:31 +03:00
download_playlist = vimeo_download_by_channel