带我去一个随机的B站视频!

图片[1]-带我去一个随机的B站视频!-倦意博客

哈喽大家好,我做了一个随机访问一个B站视频的网页。这个是我看到一个随机访问网页的项目而突发奇想的。

功能:

  • 随机访问一个B站视频
  • 针对手机端的适配

地址:

https://jyblog.cn/bilibili/

如果有什么意见和建议都可以写在评论区,我都会看的!

 

以下内容为开发难点和攻克过程:

这个网页由HTML + JS + PHP开发,前端并不难写,主要我花费了很多时间寻找BV号的规律:

1.最开始我是根据作者阿瓦隆系统的BV号规律总结(https://www.bilibili.com/read/cv5262072/)

第一种(绝大部分,从AV2到最新的视频)

BV1++411+7++

第二种(对应的AV号是以7,8,9开头的9位数字)

BV1++4y1+7++

而拼出的bv号地址,发现拼出的BV号很多视频都不存在!

2.后面为了改进这个问题,我在知乎上寻找到了B站的API地址(https://zhuanlan.zhihu.com/p/210779665):

其中根据B站官方的伪随机API:

API:api.bilibili.com/x/web-

说明:每次请求都会有伪随机的视频推荐,推荐视频和当前用户偏好有关

图片[2]-带我去一个随机的B站视频!-倦意博客

而制作的地址

3.得到了API,我本来是想JS直接AJAX-GET获取API的内容,但是存在CORS跨域的而无法获取到数据的问题,

而且我尝试了很多办法都无法克服跨域。正当我一筹莫展的时候,群里的老哥CodeDog给出了意见:

找个http请求的框架请求不就好了

请求头加上个host

意思是你用PHP的话就用curl请求在封装接口

最后我根据一个老哥在菜鸟教程底下的笔记得到了一个curl封装:

因为需要在 php 开发中对接其它接口需要用 php curl 去对接其它接口 我把他们封装成函数 希望能对大家有所帮助。

这里面是封装好的会自动把 data 进行转成 json 格式,同时解码成 php 数组输出。

<?php
function geturl($url){
        $headerArray =array("Content-type:application/json;","Accept:application/json");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
        $output = curl_exec($ch);
        curl_close($ch);
        $output = json_decode($output,true);
        return $output;
}


function posturl($url,$data){
        $data  = json_encode($data);    
        $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return json_decode($output,true);
}


function puturl($url,$data){
    $data = json_encode($data);
    $ch = curl_init(); //初始化CURL句柄 
    curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"PUT"); //设置请求方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置提交的字符串
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output,true);
}

function delurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$put_url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");   
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output,true);
}

function patchurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PATCH");  
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);     //20170611修改接口,用/id的方式传递,直接写在url中了
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output);
    return $output;
}
?>

终于,这个看似简单的HTML界面写成了!非常感谢以上提到的大佬们的帮助!

 

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共2条

请登录后发表评论

    • 头像江湖绵羊0