MENU

给你的博客插入bilibili视频

February 4, 2018 • 代码

说在前面:
1.本文的标题很纯洁
2.以下的内容简直就是黑历史,简直没眼看,不过为了以史为鉴,保留于此

是这样的,寒假闲来无事,想折腾些东西(虽然还有几个坑没填)
昨天突发奇想,想说在typecho里面用一些短代码来插入b站视频捏Σ(゚ω゚)
于是撸起袖子就开始干了


首先

首先,请检查一下你的typeho版本是不是测试版,比如这样子

banben.PNG

不是的就去升升级
那么定义一下短标签的形式,我用的是这样子<bili>av号</bili>

开始操作

在主题文件的functions.php里面新建一个函数

    function bili2post($content){
      //....  
    }

在post.php找到输出文章的代码<?php echo $this->content; ?>,改成<?php bili2post($this->content); ?>

首先要获取一下文章内容

    function bili2post($content){
      $str = $content;
    }

因为要在文章中匹配短标签,那就要用正则匹配啦,根据定义的标签来写正则式
以上面的为样本,由题得

/<bili>(.*)<\/bili>/U

然后就把文章匹配一下,得到一个数组

    function bili2post($content){
      $str = $content;
      preg_match_all ("/<bili>(.*)<\/bili>/U", $str, $av);
    }

如果想插入多个视频,那就用上了for循环

    function bili2post($content){
      $str = $content;
      preg_match_all ("/<bili>(.*)<\/bili>/U", $str, $av);

      $i = count($av[0]);
      $x = 0;
      for ($x; $x<$i; $x++)
      {
        //...
      }
    }

把正则匹配到的短代码优化一下
因为匹配的是<bili>xxx</bili>,所以要去掉两边的标签,获得“干净”的av号
这个时候

    $avnum = ltrim($av[0][$x],"<bili>");
    $avnum = rtrim($avnum,"</bili>");

那么我们可以从b站视频页看到,b站的外链播放器格式为

    <embed height="415" width="544" quality="high" allowfullscreen="true" type="application/x-shockwave-flash" src="//static.hdslb.com/miniloader.swf" flashvars="aid=5616151&p=1"></embed>

看到了找到av号的位置,把这代码截取一下(事后:多此一举)

    $bili1 = "<embed height='415' width='544' quality='high' allowfullscreen='true' type='application/x-shockwave-flash' src='https://static.hdslb.com/miniloader.swf' flashvars='aid=";
    $bili2 = "&page=1' pluginspage='https://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash'></embed><br>";

然后合成一下

    $ex2 = $bili1.$avnum.$bili2;

于是开始替换了

    $ex = "/<bili>(.*)<\/bili>/U";
    $str = preg_replace($ex,$ex2,$str);

综上所述,可得

    function bili2post($content){
  $str = $content;

  preg_match_all ("/<bili>(.*)<\/bili>/U", $str, $av);
  $i = count($av[0]);

  $x = 0;
  for ($x; $x<$i; $x++)
  {
    $ex = "/<bili>(.*)<\/bili>/U";

    $avnum = ltrim($av[0][$x],"<bili>");
    $avnum = rtrim($avnum,"</bili>");

    $bili1 = "<embed height='415' width='544' quality='high' allowfullscreen='true' type='application/x-shockwave-flash' src='https://static.hdslb.com/miniloader.swf' flashvars='aid=";
    $bili2 = "&page=1' pluginspage='https://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash'></embed><br>";
    $ex2 = $bili1.$avnum.$bili2;

    $str = preg_replace($ex,$ex2,$str);
  }
  echo $str;
}

收工

然后在编辑器中插入短代码就可以解析出来啦,试试看

test.PNG

看一下成果吧

end.PNG

好像成功了。。

很唠的地方

为什么说是很唠呢?

gg.PNG

WTF

吓得我又回去检查了一下我的代码
没毛病啊,结果去问了客服,说是那个外链播放器暂时不支持博客

dasima2.jpg

多唠哦

但是我们不能思维江化了,我们可以举一反三,你懂我意思吧
不一定是解析B站视频,这里给了一个思路,对吧(捂脸)

Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

21 Comments
  1. Hello There. I discovered your blog the use of msn. This is a very well written article.
    I'll be sure to bookmark it and come back to read extra
    of your useful information. Thank you for the post. I will definitely return.

  2. 多捞哦!这是…熟悉的…东北大碴子味儿???哈哈哈哈哈 @(chaiquanku)

    1. @初夏阳光惊,我可是纯种南方人 @(yinxian)

    2. @季悠然 @(chaiquanbugaoxin) @(chaiquanbugaoxin) @(chaiquanbugaoxin) 我的东北室友总这么说,多捞哦! @(chaiquanku)

  3. 操宇 操宇

    233

  4. 操宇 操宇

    233

  5. 本来我博客也支持类似功能的,后来b站调整了好几次视频分享代码,我就把这个功能给删了