]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/gopro.py
2 from __future__
import unicode_literals
4 from .common
import InfoExtractor
15 class GoProIE(InfoExtractor
):
16 _VALID_URL
= r
'https?://(www\.)?gopro\.com/v/(?P<id>[A-Za-z0-9]+)'
19 'url': 'https://gopro.com/v/ZNVvED8QDzR5V',
21 'id': 'ZNVvED8QDzR5V',
22 'title': 'My GoPro Adventure - 9/19/21',
23 'thumbnail': r
're:https?://.+',
25 'timestamp': 1632072947,
26 'upload_date': '20210919',
27 'uploader_id': 'fireydive30018',
31 'url': 'https://gopro.com/v/KRm6Vgp2peg4e',
33 'id': 'KRm6Vgp2peg4e',
34 'title': 'じゃがいも カリカリ オーブン焼き',
35 'thumbnail': r
're:https?://.+',
37 'timestamp': 1607231125,
38 'upload_date': '20201206',
39 'uploader_id': 'dc9bcb8b-47d2-47c6-afbc-4c48f9a3769e',
41 'track': 'The Sky Machine',
44 'url': 'https://gopro.com/v/kVrK9wlJvBMwn',
46 'id': 'kVrK9wlJvBMwn',
48 'thumbnail': r
're:https?://.+',
50 'timestamp': 1594183735,
51 'upload_date': '20200708',
52 'uploader_id': '闇夜乃皇帝',
54 'track': 'Battery (Live)',
55 'artist': 'Metallica',
59 def _real_extract(self
, url
):
60 video_id
= self
._match
_id
(url
)
61 webpage
= self
._download
_webpage
(url
, video_id
)
63 metadata
= self
._parse
_json
(
64 self
._html
_search
_regex
(r
'window\.__reflectData\s*=\s*([^;]+)', webpage
, 'metadata'), video_id
)
66 video_info
= metadata
['collectionMedia'][0]
67 media_data
= self
._download
_json
(
68 'https://api.gopro.com/media/%s/download' % video_info
['id'], video_id
)
71 for fmt
in try_get(media_data
, lambda x
: x
['_embedded']['variations']) or []:
72 format_url
= url_or_none(fmt
.get('url'))
77 'format_id': str_or_none(fmt
.get('quality')),
78 'format_note': str_or_none(fmt
.get('label')),
79 'ext': str_or_none(fmt
.get('type')),
80 'width': int_or_none(fmt
.get('width')),
81 'height': int_or_none(fmt
.get('height')),
84 self
._sort
_formats
(formats
)
87 try_get(metadata
, lambda x
: x
['collection']['title'])
88 or self
._html
_search
_meta
(['og:title', 'twitter:title'], webpage
)
89 or remove_end(self
._html
_search
_regex
(
90 r
'<title[^>]*>([^<]+)</title>', webpage
, 'title', fatal
=False), ' | GoPro'))
92 title
= title
.replace('\n', ' ')
98 'thumbnail': url_or_none(
99 self
._html
_search
_meta
(['og:image', 'twitter:image'], webpage
)),
100 'timestamp': unified_timestamp(
101 try_get(metadata
, lambda x
: x
['collection']['created_at'])),
102 'uploader_id': str_or_none(
103 try_get(metadata
, lambda x
: x
['account']['nickname'])),
104 'duration': int_or_none(
105 video_info
.get('source_duration')),
106 'artist': str_or_none(
107 video_info
.get('music_track_artist')),
108 'track': str_or_none(
109 video_info
.get('music_track_name')),