aboutsummaryrefslogtreecommitdiffstats
path: root/hypervideo_dl/extractor/reddit.py
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2021-10-18 15:24:21 -0500
committerJesús <heckyel@hyperbola.info>2021-10-18 15:24:21 -0500
commit5122028a4bcac4ae577ef7fbd55ccad5cb34ef5e (patch)
tree65209bc739db35e31f1c9b5b868eb5df4fe12ae3 /hypervideo_dl/extractor/reddit.py
parent27fe903c511691c078942bef5ee9a05a43b15c8f (diff)
downloadhypervideo-5122028a4bcac4ae577ef7fbd55ccad5cb34ef5e.tar.lz
hypervideo-5122028a4bcac4ae577ef7fbd55ccad5cb34ef5e.tar.xz
hypervideo-5122028a4bcac4ae577ef7fbd55ccad5cb34ef5e.zip
update from upstream
Diffstat (limited to 'hypervideo_dl/extractor/reddit.py')
-rw-r--r--hypervideo_dl/extractor/reddit.py32
1 files changed, 20 insertions, 12 deletions
diff --git a/hypervideo_dl/extractor/reddit.py b/hypervideo_dl/extractor/reddit.py
index 222fa01..c75d95a 100644
--- a/hypervideo_dl/extractor/reddit.py
+++ b/hypervideo_dl/extractor/reddit.py
@@ -1,6 +1,4 @@
-from __future__ import unicode_literals
-
-import re
+import random
from .common import InfoExtractor
from ..utils import (
@@ -50,7 +48,7 @@ class RedditIE(InfoExtractor):
class RedditRIE(InfoExtractor):
- _VALID_URL = r'(?P<url>https?://(?:[^/]+\.)?reddit\.com/r/[^/]+/comments/(?P<id>[^/?#&]+))'
+ _VALID_URL = r'https?://(?P<subdomain>[^/]+\.)?reddit(?:media)?\.com/r/(?P<slug>[^/]+/comments/(?P<id>[^/?#&]+))'
_TESTS = [{
'url': 'https://www.reddit.com/r/videos/comments/6rrwyj/that_small_heart_attack/',
'info_dict': {
@@ -95,17 +93,27 @@ class RedditRIE(InfoExtractor):
# reddit video @ nm reddit
'url': 'https://nm.reddit.com/r/Cricket/comments/8idvby/lousy_cameraman_finds_himself_in_cairns_line_of/',
'only_matching': True,
+ }, {
+ 'url': 'https://www.redditmedia.com/r/serbia/comments/pu9wbx/ako_vu%C4%8Di%C4%87_izgubi_izbore_ja_%C4%87u_da_crknem/',
+ 'only_matching': True,
}]
- def _real_extract(self, url):
- mobj = re.match(self._VALID_URL, url)
- url, video_id = mobj.group('url', 'id')
-
- video_id = self._match_id(url)
-
- data = self._download_json(
- url + '/.json', video_id)[0]['data']['children'][0]['data']
+ @staticmethod
+ def _gen_session_id():
+ id_length = 16
+ rand_max = 1 << (id_length * 4)
+ return '%0.*x' % (id_length, random.randrange(rand_max))
+ def _real_extract(self, url):
+ subdomain, slug, video_id = self._match_valid_url(url).group('subdomain', 'slug', 'id')
+
+ self._set_cookie('.reddit.com', 'reddit_session', self._gen_session_id())
+ self._set_cookie('.reddit.com', '_options', '%7B%22pref_quarantine_optin%22%3A%20true%7D')
+ data = self._download_json(f'https://{subdomain}reddit.com/r/{slug}/.json', video_id, fatal=False)
+ if not data:
+ # Fall back to old.reddit.com in case the requested subdomain fails
+ data = self._download_json(f'https://old.reddit.com/r/{slug}/.json', video_id)
+ data = data[0]['data']['children'][0]['data']
video_url = data['url']
# Avoid recursing into the same reddit URL