Browse Source

[beeg] Decrypt URL (Closes #7736)

totalwebcasting
Sergey M․ 9 years ago
parent
commit
e0977d7686
1 changed files with 23 additions and 1 deletions
  1. +23
    -1
      youtube_dl/extractor/beeg.py

+ 23
- 1
youtube_dl/extractor/beeg.py View File

@ -1,6 +1,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_chr,
compat_ord,
compat_urllib_parse_unquote,
)
from ..utils import ( from ..utils import (
int_or_none, int_or_none,
parse_iso8601, parse_iso8601,
@ -31,6 +36,23 @@ class BeegIE(InfoExtractor):
video = self._download_json( video = self._download_json(
'http://beeg.com/api/v3/video/%s' % video_id, video_id) 'http://beeg.com/api/v3/video/%s' % video_id, video_id)
def decrypt_key(key):
# Reverse engineered from http://static.beeg.com/cpl/1067.js
a = '8RPUUCS35ZWp3ADnKcSmpH71ZusrROo'
e = compat_urllib_parse_unquote(key)
return ''.join([
compat_chr(compat_ord(e[n]) - compat_ord(a[n % len(a)]) % 25)
for n in range(len(e))])
def decrypt_url(encrypted_url):
encrypted_url = self._proto_relative_url(
encrypted_url.replace('{DATA_MARKERS}', ''), 'http:')
key = self._search_regex(
r'/key=(.*?)%2Cend=', encrypted_url, 'key', default=None)
if not key:
return encrypted_url
return encrypted_url.replace(key, decrypt_key(key))
formats = [] formats = []
for format_id, video_url in video.items(): for format_id, video_url in video.items():
if not video_url: if not video_url:
@ -40,7 +62,7 @@ class BeegIE(InfoExtractor):
if not height: if not height:
continue continue
formats.append({ formats.append({
'url': self._proto_relative_url(video_url.replace('{DATA_MARKERS}', ''), 'http:'),
'url': decrypt_url(video_url),
'format_id': format_id, 'format_id': format_id,
'height': int(height), 'height': int(height),
}) })


Loading…
Cancel
Save