|
@ -1,14 +1,20 @@ |
|
|
# coding: utf-8 |
|
|
# coding: utf-8 |
|
|
from __future__ import unicode_literals |
|
|
from __future__ import unicode_literals |
|
|
|
|
|
|
|
|
import os.path |
|
|
|
|
|
|
|
|
import datetime |
|
|
import re |
|
|
import re |
|
|
import time |
|
|
import time |
|
|
import datetime |
|
|
|
|
|
|
|
|
|
|
|
from .common import InfoExtractor |
|
|
from .common import InfoExtractor |
|
|
from ..compat import (compat_urlparse, compat_urllib_parse) |
|
|
|
|
|
from ..utils import (ExtractorError, parse_iso8601) |
|
|
|
|
|
|
|
|
from ..compat import ( |
|
|
|
|
|
compat_urlparse, |
|
|
|
|
|
compat_urllib_parse, |
|
|
|
|
|
) |
|
|
|
|
|
from ..utils import ( |
|
|
|
|
|
determine_ext, |
|
|
|
|
|
ExtractorError, |
|
|
|
|
|
parse_iso8601, |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LetvIE(InfoExtractor): |
|
|
class LetvIE(InfoExtractor): |
|
@ -44,7 +50,7 @@ class LetvIE(InfoExtractor): |
|
|
def urshift(val, n): |
|
|
def urshift(val, n): |
|
|
return val >> n if val >= 0 else (val + 0x100000000) >> n |
|
|
return val >> n if val >= 0 else (val + 0x100000000) >> n |
|
|
|
|
|
|
|
|
# ror() and calcTimeKey() are reversed from a embedded swf file in KLetvPlayer.swf |
|
|
|
|
|
|
|
|
# ror() and calc_time_key() are reversed from a embedded swf file in KLetvPlayer.swf |
|
|
def ror(self, param1, param2): |
|
|
def ror(self, param1, param2): |
|
|
_loc3_ = 0 |
|
|
_loc3_ = 0 |
|
|
while _loc3_ < param2: |
|
|
while _loc3_ < param2: |
|
@ -52,7 +58,7 @@ class LetvIE(InfoExtractor): |
|
|
_loc3_ += 1 |
|
|
_loc3_ += 1 |
|
|
return param1 |
|
|
return param1 |
|
|
|
|
|
|
|
|
def calcTimeKey(self, param1): |
|
|
|
|
|
|
|
|
def calc_time_key(self, param1): |
|
|
_loc2_ = 773625421 |
|
|
_loc2_ = 773625421 |
|
|
_loc3_ = self.ror(param1, _loc2_ % 13) |
|
|
_loc3_ = self.ror(param1, _loc2_ % 13) |
|
|
_loc3_ = _loc3_ ^ _loc2_ |
|
|
_loc3_ = _loc3_ ^ _loc2_ |
|
@ -67,7 +73,7 @@ class LetvIE(InfoExtractor): |
|
|
'platid': 1, |
|
|
'platid': 1, |
|
|
'splatid': 101, |
|
|
'splatid': 101, |
|
|
'format': 1, |
|
|
'format': 1, |
|
|
'tkey': self.calcTimeKey(int(time.time())), |
|
|
|
|
|
|
|
|
'tkey': self.calc_time_key(int(time.time())), |
|
|
'domain': 'www.letv.com' |
|
|
'domain': 'www.letv.com' |
|
|
} |
|
|
} |
|
|
play_json = self._download_json( |
|
|
play_json = self._download_json( |
|
@ -108,7 +114,7 @@ class LetvIE(InfoExtractor): |
|
|
|
|
|
|
|
|
url_info_dict = { |
|
|
url_info_dict = { |
|
|
'url': media_url, |
|
|
'url': media_url, |
|
|
'ext': os.path.splitext(dispatch[format_id][1])[1][1:] |
|
|
|
|
|
|
|
|
'ext': determine_ext(dispatch[format_id][1]) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if format_id[-1:] == 'p': |
|
|
if format_id[-1:] == 'p': |
|
|