summaryrefslogtreecommitdiffstats
path: root/yt_dlp/extractor/pgatour.py
blob: 36c2c6207dbae5f7d1326a97a449e0be3258b6ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from .brightcove import BrightcoveNewIE
from .common import InfoExtractor


class PGATourIE(InfoExtractor):
    _VALID_URL = r'https?://(?:www\.)?pgatour\.com/video/[\w-]+/(?P<tc>T)?(?P<id>\d+)'
    _TESTS = [{
        'url': 'https://www.pgatour.com/video/competition/T6322447785112/adam-hadwin-2023-the-players-round-4-18th-hole-shot-1',
        'info_dict': {
            'id': '6322447785112',
            'ext': 'mp4',
            'title': 'Adam Hadwin | 2023 THE PLAYERS | Round 4 | 18th hole | Shot 1',
            'uploader_id': '6116716431001',
            'upload_date': '20230312',
            'timestamp': 1678653136,
            'duration': 20.011,
            'thumbnail': r're:^https://.+\.jpg',
            'tags': 'count:7',
        },
        'params': {'skip_download': 'm3u8'},
    }, {
        'url': 'https://www.pgatour.com/video/features/6322506425112/follow-the-players-trophy-on-championship-sunday',
        'info_dict': {
            'id': '6322506425112',
            'ext': 'mp4',
            'title': 'Follow THE PLAYERS trophy on Championship Sunday',
            'description': 'md5:4d29e4bdfa03694a0ebfd08950398568',
            'uploader_id': '6082840763001',
            'upload_date': '20230313',
            'timestamp': 1678739835,
            'duration': 123.435,
            'thumbnail': r're:^https://.+\.jpg',
            'tags': 'count:8',
        },
        'params': {'skip_download': 'm3u8'},
    }]

    def _real_extract(self, url):
        video_id, is_tourcast = self._match_valid_url(url).group('id', 'tc')

        # From https://www.pgatour.com/_next/static/chunks/pages/_app-8bcf849560daf38d.js
        account_id = '6116716431001' if is_tourcast else '6082840763001'
        player_id = 'Vsd5Umu8r' if is_tourcast else 'FWIBYMBPj'

        return self.url_result(
            f'https://players.brightcove.net/{account_id}/{player_id}_default/index.html?videoId={video_id}',
            BrightcoveNewIE)