Hugo 网站优化(8): 在博客上看电视, 使用 hugo shortcodes 支持 bilibili

简介: 保障学习质量, 视频、图、文 一体。

<!--

大家好, 我是老麦

欢迎 关注公众号 Go与云原生订阅网站 https://tangx.in/ 第一时间看后续精彩文章。

觉得好的话,请猛击文章右下角「点赞、关注、转发」 一键三连, 是对我的最大支持。

-->

Hugo 网站优化(8): 使用 hugo shortcodes 支持 bilibili

原文链接: https://tangx.in/posts/2023/01/04/hugo-bilibili-support/

在学习的时候希望资料和笔记内容都能在一起。 这样 查阅、回顾 起来就更方便了。

hugo 短代码(shortcodes) 模版

在搜索的时候, 找到 利用hugo的短代码功能插入b站视频并且自适应 了这篇文章, 实现了嵌入 Bilibili 的播放器。

进一步查询 hugo - 短代码hugo - 自定义段代码模版 , 并参考原文。

终于实现了, 在书房看电视的方案。

Bilibili 视频引用语法

在书房中看电视的语法规则。

支持两个参数

  1. 视频ID视频地址
  2. 合集视频中的 第N集, 默认值为 1。

支持两种语法

  1. 具名语法, 根据参数名传递。

    • src: 视频ID 或 地址
    • page: 分集

named-grammar

建议使用 具名语法, 这样在 markdown 中跳转更方便。
  1. 匿名语法, 根据参数位置传递。

    • 参数1: 视频ID 或 地址
    • 参数2: 分集

unnamed-grammar

仅仅是为了保留语法与兼容性考虑。

代码实现

  1. 主题 代码中, 添加 layouts/shortcodes/<name>.html 。 这里的 name 就是以后 Markdown 中的引用名字。 例如, bilibili.html
  2. 复制代码
<!-- 语法规则
    1. 匿名模式
        <bilibili BV1Wg411t7EE 233>
    2. 具名模式
        <bilibili 
            src="https://www.bilibili.com/video/BV1RK41117eY/" 
            page="332"
        >
-->

<!-- 获取第一个参数 作为视频地址 -->
{{- $dest := ( .Get 0) -}}

<!-- 如果是具名模式, 获取 src -->
{{ if .IsNamedParams }}
    {{ $dest = (.Get "src") }}
{{ end }}

<!-- 判断是否为 全路径, 是则获取视频ID -->
{{ if (hasPrefix $dest "http" )}}
    <!-- https://www.bilibili.com/video/BV1RK41117eY/ -->
    {{ $dest = (strings.TrimPrefix "http" $dest ) }}

    <!-- 解析 URL -->
    {{ $url := urls.Parse $dest }}

    <!-- /video/BV1RK41117eY/ -->
    {{ $dest = $url.Path }}

    <!-- BV1RK41117eY -->
    {{ $dest = (path.BaseName $dest) }}
{{ end }}


<!-- 获取专辑中的视频 ID -->
{{- $page := (.Get 1) -}}

{{ if .IsNamedParams }}
    {{ $page = (.Get "page") }}
{{ end }}

<!-- 默认值为 1 -->
{{ if (not $page) }}
    {{ $page = 1 }}
{{ end }}


<!-- 嵌入 bilibili 播放框 -->
<div style="margin: 10px 0 20px 0;">
  <!-- <h3>视频ID: {{ $dest }} - {{ $page }} </h3> -->
  <div style="margin: 5px 0;">

    <span>本视频一切权利归 <strong>bilibili</strong> 及 <strong>原作者所有</strong></span>
    <span>如果觉得好, 请点击跳转到 <strong>bilibili</strong>给予支持</span>
    <a href="https://www.bilibili.com/video/{{ $dest }}/">{{ $dest }}</a>
  </div>

  <div style="position:relative; padding-bottom:75%; width:100%; height:0">
    frameLabelStart--frameLabelEnd 
  </div>
</div>

这里面使用了几个内置函数

  1. hugo 解析字符串 URL: https://gohugo.io/functions/urls.parse/
  2. hugo 获取 BaseName: https://gohugo.io/functions/path.basename/

测试视频: 跟着王老师作牛肉饼

image.png

还是很安逸了

相关文章
|
数据采集 自然语言处理 Python
如何使用Gensim库进行情感分析?
使用Gensim进行情感分析,需安装Gensim库,导入相关模块(Word2Vec, KeyedVectors, nltk等)。数据预处理涉及分词和去除停用词,然后用Word2Vec训练词向量模型。已训练的模型可加载用于计算句子情感分数,通过平均词向量表示句子情感。代码提供了一个基础的情感分析流程,可按需求调整。
328 1
|
存储 Web App开发 Go
使用Golang上传文件到MinIO对象存储(一)
前一篇文章介绍了开源存储系统 MinIO 的基本内容,今天我们就来看一下,如何使用 Golang 语言将本地的文件上传到 MinIO 对象存储服务上。
3132 2
|
存储 Windows 数据安全/隐私保护
将FTP映射至Windows
在经常使用ftp传输文件的环境中,每次上传和下载文件都需要重新连接然后登录是非常繁琐的一件事情。我们可以将FTP空间映射到本地磁盘空间,免去输入地址以及账号、密码。方便我们日常中文件的上传和下载。 1. 双机桌面上的我的电脑,然后点击映射网络驱动器 2. 选择映射网络驱动器 3. 选择 连接到可用于存储文档和图片的网站 4. 下一步 5. 下一步 5. 根据示例,填写FTP地址 6. 输入用户名。
3712 0
|
10月前
|
自然语言处理 搜索推荐 算法
VectoRex:向量数据库
VectoRex 是一款高性能、可扩展的开源向量搜索引擎,专为现代 AI 和大数据应用设计。它具备轻量级、可嵌入和独立部署等优势,适用于推荐系统、图像搜索、自然语言处理等场景。
557 22
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
259 16
|
Web App开发 API iOS开发
hexo-bilibili-bangumi
hexo-bilibili-bangumi
1971 0
|
测试技术 Windows
基于SpringBoot+Vue人口老龄化社区服务与管理平台(源码+部署说明+演示视频+源码介绍+lw)(4)
基于SpringBoot+Vue人口老龄化社区服务与管理平台(源码+部署说明+演示视频+源码介绍+lw)
178 2
|
Python
在Python中绘制K线图,可以使用matplotlib和mplfinance库
【5月更文挑战第1天】使用Python的matplotlib和mplfinance库可绘制金融K线图。mplfinance提供便利的绘图功能,示例代码显示如何加载CSV数据(含开盘、最高、最低、收盘价及成交量),并用`mpf.plot()`绘制K线图,设置类型为'candle',显示移动平均线(mav)和成交量信息。可通过调整参数自定义图表样式,详情参考mplfinance文档。
783 2
Mac的brew修改国内源
Mac的brew修改国内源
1826 0
|
算法
MATLAB求解矩阵特征值的六种方法
关于这个特征值的求解一共六种方法 幂法 反幂法 QR方法 对称QR方法 jacobi方法 二分法
1374 0