--- layout: post # 使用的布局(不需要改) title: Jekyll不使用插件生成「书单」页面 # 标题 subtitle: 调用_data数据,不使用豆瓣API接口 #副标题 date: 2019-10-27 # 时间 author: Duter2016 # 作者 header-img: img/post-bg-coffee.jpeg #这篇文章标题背景图片 header-mask: "0.1" # 博文页面上端的背景图片的亮度,数值越大越黑暗 catalog: true # 开启catalog,将在博文侧边展示博文的结构 istop: false # 设为true可把文章设置为置顶文章 music-id: # 网易云音乐单曲嵌入 music-idfull: # 网易云音乐歌单嵌入 tags: #标签 - Blog --- **效果见[「我的书单页面」](https://duter2016.github.io/books/)** 目前已经有一个在 Hexo 页面中嵌入豆瓣个人主页的小插件项目[「hexo-douban」](https://github.com/mythsman/hexo-douban)。 但是[「hexo-douban」](https://github.com/mythsman/hexo-douban)需要调用豆瓣的API数据接口,还要用到豆瓣帐号,而且据反馈会经常出现爬取失败和部分浏览器加载不正常的问题。而且如果遇到豆瓣书单数量上百时,每次打开站点都要耗费大量资源重新生成页面,严重拖慢相应速度!因此,我想把书单功能本地化! 经过搜集资料,认为可以通过“`Jekyll 支持从 _data 目录下的 YAML、JSON 和 CSV 载入数据`”的特性并新建一些变量来实现, 于是我抓取了[「hexo-douban」](https://github.com/mythsman/hexo-douban)生成的页面CSS样式数据和脚本,多次修改,终于实现了“书单本地化”! 本“书单”功能只调用_data数据,不需使用豆瓣API接口。 ## 1.创建books.html文件 在根目录创建`books.html`文件,代码如下 ```html {% raw %} --- title: 书单 layout: default permalink: /books/ description: 读万卷书,行万里路 header-img: "img/post-bg-coffee.jpeg" ---

{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}

{{ page.description }}

{{ site.data.bookstj.booknote }}

在读 ({{ site.data.bookstj.zdnum }}) 想读 ({{ site.data.bookstj.xdnum }}) 已读 ({{ site.data.bookstj.ydnum }})
{% for book in site.data.bookszd %}
{{ book.author }} | {{ book.translator }}译 | {{ book.press }} | {{ book.publishdate }} | {{ book.price }}
{{ book.readdate }} 在读 | {{ book.booktag }}
{% endfor %}
{% for book in site.data.booksxd %}
{{ book.author }} | {{ book.translator }}译 | {{ book.press }} | {{ book.publishdate }} | {{ book.price }}
{{ book.readdate }} 想读 | {{ book.booktag }}
{% endfor %}
{% for book in site.data.booksyd %}
{{ book.author }} | {{ book.translator }}译 | {{ book.press }} | {{ book.publishdate }} | {{ book.price }}
{{ book.readdate }} 读过 | {{ book.booktag }} | {{ book.stars }} {{ book.rate }}
我的书评:{{ book.review }}
{% endfor %}
在读书单共 本; 想读书单共 本; 已读书单共
{% endraw %} ``` ## 2.创建_data书单数据文件 在根目录创建目录`_data`,然后在`_data`目录下创建如下四个文件:`booksyd.yml`、`bookszd.yml`、`booksxd.yml`、`bookstj.yml`。 ### (1)已读书单数据 已读书单数据文件为`booksyd.yml`,数据格式为: ``` - name: "风雪追击01" #书名 author: "[日] 东野圭吾" #作者 translator: "赵文梅" #翻译者 press: "现代出版社" #出版社 publishdate: "2017-4" #出版日期 price: "39.80元" #价格 bookimg: "https://img1.doubanio.com/view/subject/m/public/s29362779.jpg" #封面图片链接地址 doubanurl: "https://book.douban.com/subject/26971148/" #豆瓣书单地址 readdate: "2018-12-29" #阅读日期 booktag: "文学" #书的分类标签 stars: "★★★☆☆" #评价星级 rate: "还行" #1到5星分别为很差、较差、还行、推荐、力荐 review: "等待也是种信念,海的爱太深,时间太浅。" #书评 ``` 以上数据信息可以在豆瓣上查找。 评价等级(stars)与推荐等级(rate)的对应关系: + ★☆☆☆☆ 很差 + ★★☆☆☆ 较差 + ★★★☆☆ 还行 + ★★★★☆ 推荐 + ★★★★★ 力荐 ### (2)想读书单数据 已读书单数据文件为`booksxd.yml`,数据格式为: ``` - name: "风雪追击03" #书名 author: "[日] 东野圭吾" #作者 translator: "赵文梅" #翻译者 press: "现代出版社" #出版社 publishdate: "2017-4" #出版日期 price: "39.80元" #价格 bookimg: "https://img1.doubanio.com/view/subject/m/public/s29362779.jpg" #封面图片链接地址 doubanurl: "https://book.douban.com/subject/26971148/" #豆瓣书单地址 readdate: "2018-12-29" #阅读日期 booktag: "文学" #书的分类标签 ``` ### (3)在读书单数据 已读书单数据文件为`bookszd.yml`,数据格式为: ``` - name: "风雪追击05" #书名 author: "[日] 东野圭吾" #作者 translator: "赵文梅" #翻译者 press: "现代出版社" #出版社 publishdate: "2017-4" #出版日期 price: "39.80元" #价格 bookimg: "https://img1.doubanio.com/view/subject/m/public/s29362779.jpg" #封面图片链接地址 doubanurl: "https://book.douban.com/subject/26971148/" #豆瓣书单地址 readdate: "2018-12-29" #阅读日期 booktag: "文学" #书的分类标签 ``` ### (4)书单数目统计 已读书单数据文件为`bookstj.yml`,数据格式为: ``` zdnum: "2" #在读书单数目 xdnum: "2" #想读书单数目 ydnum: "12" #已读书单数目 booknote: "本页面正在测试中。" #书单页面的提示语 ``` **完成!**