乐视视频下载

AI 摘要

解密乐视视频播放页面的tkey参数生成算法,获取最新视频播放地址。

**播放页面会请求一个地址**

https://player-pc.le.com/mms/out/video/playJson.json?platid=1&splatid=103&tss=ios&id=69552126&detect=1&dvtype=800&accessyx=1&domain=www.le.com&tkey=-345858226&devid=c708dd5d22c134653a89c7b246adc714&source=1001&lang=cn&region=cn&isHttps=1&isDbt=false&promoid=&callback=vjs_170893904036671

**参数详解(未做备注为常量)**

platid=1 
splatid=103
tss=ios
id=69552126  #视频id,url中可提取
detect=1
vtype=800
accessyx=1
domain=www.le.com
tkey=-345858226 #这个值需要计算得出
devid=c708dd5d22c134653a89c7b246adc714
source=1001
lag=cn
region=cn
ishttps=1
isDbt=false
promoid=
callback= #如果为空就反回json格式

**关键的参数是tkey ,时间戳hash以后的一个数值,代表着请求的失效时间,实现方法如下**


var I4c = {
    I: function(l, v) {
        return l != v
    },
    f: function(l, v) {
        return l << v
    },
    b: function(l, v) {
        return l & v
    },
    B: function(l, v) {
        return l < v
    },
    A: function(l, v) {
        return l !== v
    },
    G: function(l, v) {
        return l ^ v
    },
    v: function(l, v) {
        return l === v
    },
    N: function(l, v) {
        return l - v
    },
    k: function(l, v) {
        return l >> v
    },
    m: function(l, v) {
        return l | v
    },
    Y: function(l, v) {
        return l == v
    },
    j: function(l, v) {
        return l % v
    },
    h: function(l, v) {
        return l > v
    }
};

 function rotateRight(e, t) {
        var _1 = "h"
          , _2 = "b";
        for (var r, n = 0; I4c[_1](t, n); n++)
            r = I4c[_2](1, e),
            e >>= 1,
            r <<= 31,
            e += r;
        return e
    }

function getMmsKey(e) {
        var _1 =  "j"
          , _2 = "rotateRight"
          , _3 = "G";
        var t = ("j",
        48.36E2) < 68. ? ("error",
        0x61) : (85.5E2,
        0x11) < 84. ? (25.045E1,
        0xb074319) : 39.62E1 <= (",",
        25.2E+1) ? 88. : 32.84E2 >= (81.5E2,
        36.7E0) ? 0x27 : 0x55 > 0x37 ? (79.219E0,
        0x1c) : ("G",
        0.363E1) <= 44.834E2 ? 98 : 95.48E+3 > (0x0,
        0x45) ? (1.288E3,
        "h") : ("b",
        0x1b) >= (95.38E+0,
        0x5e) ? (37.9E+0,
        0x1a) : (19.1E+0,
        71.6E2) > (0x30,
        "error") ? (0x5e,
        6.62E1) : (58.58E1,
        57.5E+1)
          , r = I4c[_1](t, 17)
          , n = e;
        n = rotateRight(n, r);
        var o = I4c[_3](n, t);
        return o
}


e = new Date().getTime()  / 1000

console.log(getMmsKey(e))