---
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"
---
{{ site.data.bookstj.booknote }}
{% 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 }}
{% 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: "本页面正在测试中。" #书单页面的提示语
```
**完成!**