好吧这只是个标题而已不要在意= =

这周由于考试不敢有什么大动作,于是划了划水,完成了之前的一个想法:大型B站黑科技->’BiliBiliHtml5′

项目链接:http://bili.whiteblue.xyz

项目采用Laravel官方精(yan)简(jian)版->Lumen,好奇心重作死用了这个新框架,各种文档不全各种蛋疼,之后补一个简单入门攻略(挖坑)
其实,其实今天是想说说B站API的使用的,Bili官方API文档:http://docs.bilibili.cn/wiki/分类:API

关于KEY

B站的key是分成两种:app-key和secret-key,申请时都会提供,理论上只有一个app-key也能做到大部分事。原则上B站是开放申请的,地址:http://api.bilibili.com
。然而不知为何我的三个VPS都不能过验证(B站你根本就没开验证吧喂)。

玩了几天API,发现B站的key管理也是乱,不知他们自己能不能搞清楚。有些接口不需要key就能用,key根据新旧也是有权限的,比较老的基本就能随便用,而新申请的还需要生成sign进行调用(这个坑东西之后会说)。分享一个目前为止最老的万能app-key:03fc8eb101b091fb

常用官方接口

地址什么的参考官方文档,这里只说明下官方没写或者有错的。

获取总排行->index(不需要key):

这个接口会把首页上显示的内容拉下来,每个分区的前八个(接口默认返回json)。

对应关系是这样:’type1′:动画,’type13′:番剧,’type3′:音乐,’type129′:舞蹈,’type4′:游戏,’type36′:科技,’type5′:娱乐,’type119′:鬼畜

不要问我为什么这么乱,以及每个数组最后会多返回一个意义不明字符串

分区列表->list:

可以理解为index的详细版,然而需要key。

视频详细信息->view(不需要key):

获取一个视频的评论,弹幕地址,tag等等。(目前为止用的最顺畅的接口) ,注意的是返回的cid很有用,之后可以取得视频实际地址。里面的offset就是它的flash播放器地址,可以直接在html中引入播放。

新番列表->bangumi:

各大黑科技经常调用的接口,然而目前除了获取更新时间,集数以外无其他卵用。注意的是,列表里的番剧返回的是专题,然而,返回的sp号是错。的。。根据他给的sp号不能跳转到对应专题,这个问题我也在想怎么解决。

搜索->search:

就是首页上那个搜索,可选的参数很多,文档上写的没什么问题。需要注意的是,这个用万能key也是需要生成sign的。

如何取得视频实际地址

这里就要用B站另外一个没公开的接口:http://interface.bilibili.tv/playurl,需要加appkey

形式:http://interface.bilibili.tv/playurl?platform=android&cid=’从view接口取得的cid‘&appkey=’你的appkey‘&quality=‘ 清晰度1,2’&type=mp4

会返回xml形式的mp4地址,视频地址在’durl’元素里面,xml解析大概还不算难。

如何生成sign

调用接口时有时会需要生成sign,官方对于这个东西的说明是:

“把接口所需所有参数拼接,如utk=xx&time=xx,按参数名称排序,最后再拼接上密钥App-Secret,做md5加密 (callback不需要参与sign校检)”

其实这个说明并没有错,官方还贴心的给出了PHP的生成代码,我就偷懒拿过来用了,结果。是。错。的。

这里贴两个改后的:

PHP
function get_sign($params, $app_key, $secret_key)
    {
        $_data = array();
        $params['appkey'] = $app_key;

        ksort($params);
        reset($params);

        foreach ($params as $k => $v) {
            $_data[] = $k . '=' . urlencode($v);
        }
        $_sign = implode('&', $_data);
        return array(
            'sign' => strtolower(md5($_sign . $secret_key)),
            'params' => $_sign,
        );
    }

Python
def GetSign(params, appkey, AppSecret=None):
    params['appkey'] = appkey
    data = ""
    paras = params.keys()
    paras.sort()
    data = urllib.urlencode(params)
    print(data)
    if AppSecret == None:
        return data
    m = hashlib.md5()
    m.update(data + AppSecret)
    return data + '&sign=' + m.hexdigest()

嗯就这些,看完虽然称不上精通 = =,起码做黑科技是畅行无阻了。

此外分享几个大概有用的:

B站接口整理:https://github.com/Vespa314/bilibili-api

KnH:http://kanoha.org

各种视频地址解析:http://www.iippcc.com

以上。。。。