diff --git a/youtube_dl/extractor/reddit.py b/youtube_dl/extractor/reddit.py index 222fa0172..055a8f259 100644 --- a/youtube_dl/extractor/reddit.py +++ b/youtube_dl/extractor/reddit.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals import re +import random from .common import InfoExtractor from ..utils import ( @@ -29,9 +30,19 @@ class RedditIE(InfoExtractor): }, } + @staticmethod + def _gen_session_id(): + # The actual value of the cookie does not seem to matter. + # Using a random 16-char hex string for now. + id_length = 16 + rand_max = 1 << (id_length * 4) + return '%0.*x' % (id_length, random.randrange(rand_max)) + def _real_extract(self, url): video_id = self._match_id(url) + self._set_cookie('.reddit.com', 'reddit_session', RedditIE._gen_session_id()) + formats = self._extract_m3u8_formats( 'https://v.redd.it/%s/HLSPlaylist.m3u8' % video_id, video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id='hls', fatal=False) @@ -103,6 +114,8 @@ class RedditRIE(InfoExtractor): video_id = self._match_id(url) + self._set_cookie('.reddit.com', 'reddit_session', RedditIE._gen_session_id()) + data = self._download_json( url + '/.json', video_id)[0]['data']['children'][0]['data']