fython/BilibiliAPIDocs

JS 版本 get_sign 函数的 key 参数是什么?APP KEY?

1c7 opened this issue · 7 comments

1c7 commented

fython 你好~

我想做的事情是根据视频地址拿到 interface 地址。

根据

http://www.bilibili.com/video/av4371609/

获取到

http://interface.bilibili.com/playurl?cid=7076936&player=1&ts=1460728450&sign=705c096777c7ed41d5cee161913c35be




思路是先手抓一个,然后去用程序跑,看看地址是否一样。
碰到的问题是根据文档里的代码,没成功,想问问咋回事。如题。

手抓的:
http://www.bilibili.com/video/av4371609/
cid 7076936
http://interface.bilibili.com/playurl?cid=7076936&player=1&ts=1460728450&sign=705c096777c7ed41d5cee161913c35be


### 程序
<script type="text/javascript" src="http://static.hdslb.com/js/md5.js"></script>
<script type="text/javascript">

    function get_sign(params, key)
 {
    var s_keys = [];
    for (var i in params)
    {
        s_keys.push(i);
    }
    s_keys.sort();
    var data = "";
    for (var i = 0; i < s_keys.length; i++)
    {
        // encodeURIComponent 返回的转义数字必须为大写( 如 %2F )
        data+=(data ? "&" : "")+s_keys[i]+"="+encodeURIComponent(params[s_keys[i]]);
    }
    return {
        "sign":hex_md5(data+key),
        "params":data
    };
 }

  p = {
    "cid" : "7076936",
    'player' : '1',
    'ts': '1460728588'
  };
/*
# cid = 7076936
# player = 1
# ts = 1460728588
*/
 a = get_sign(p, '85eb6835b0a1034e');
 console.log(a);  

</script>

然后 console(a) 的结果:
// Object { sign: "3a85837f235a317906016f1f6b86dd37", params: "cid=7076936&player=1&ts=1460728588" }

结果应该是 705c096777c7ed41d5cee161913c35be // 因为相同时间戳的那个手抓结果就是这个
但是程序是 3a85837f235a317906016f1f6b86dd37

APPKEY 85eb6835b0a1034e 来源网上的一篇博客。

非常感谢~

  1. 用我的APPKEY前和我说一声啊。
  2. 我的APPKEY被你们这群货玩死了。现在我都没key可用了。
  3. 签名看Biligrab的代码。再简单没有了。

另:他的开放平台和SWF的签名流程不一样。swf我就懒得拆了。

1c7 commented

@cnbeining 谢谢回复。
另外, APPKEY 我是在这里: https://www.blackglory.me/bilibili-video-source-get/ 找到的,不知道是你的,以为既然公开了拿来测几次没问题的。非常抱歉。

1c7 commented

@cnbeining 还想问一下是不是B站官方开过API一阵子,后来关了。你是哪里申请的APPKEY?

是的。

我当时存了一个KEY。。

1c7 commented

@cnbeining 好。谢谢。真不好意思啊。

心疼,还好我的没有提交上 Github。
高考完不知道能不能抽出时间重开我的客户端轮子……