每周书单停更
每周书单是“码农真经”公众号的一个系列文章。由我将“码农读书交流群”的群友推荐的书籍,整理成一篇文章,每周推送给大家。
这个专题已经更新了一年多,推送了57期。停更的原因是:我希望大家能够静下心来好好读书。我们拥有的电子书越来越多,但是读的书却越来越少。我希望能够通过这个专题,让大家读更多的书,而不是收藏更多的书。而我自己也希望能够有更多的时间读书。
当然,我们的读书交流群还是会继续的,只是每周书单专题停更了。欢迎大家加入读书交流群,一起交流读书心得。
每周书单推荐文章生成器
前期我都是手动整理这些书单,但是随着书单的增多,手动整理的工作量也越来越大。于是我用Nodejs写了一个脚本,可以自动生成每周书单推荐文章。这个脚本的好处是:
- 生成的文章markdown格式,结构清晰,利于排版和美化。
- 生成的文章内容丰富,包含了书籍的封面、书名、作者、豆瓣评分、豆瓣链接、书籍简介等信息。
缺点是:
- 生成的文章内容有时候会有重复,需要手动删除。
- puppeteer爬虫的速度有点慢,需要等待一段时间。
分享这个脚本,可能会对同类型的博主有帮助。如果你也有类似的需求,可以参考这个脚本。
实现原理
这个脚本的实现原理非常简单,就是通过爬虫,从豆瓣和京东网站上获取书籍的信息,然后将这些信息整理成一篇文章。
- 先在豆瓣上搜索书籍,获取书籍的豆瓣链接。
- 通过豆瓣链接,获取书籍的封面、书名、作者、豆瓣评分、书籍简介等信息。
- 豆瓣上的书籍封面有反爬虫机制,简单起见,通过书名在京东上搜索,获取书籍的封面。
使用方法
代码
mzhren/weeklybooks-script: Node Script to quickly generate recommended book list
主要代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
const searchDoubanBooks = require('./douban_search_books');
const getDoubanBookInfo = require('./douban_book_info');
const getJDBookCover = require('./jd_book_cover');
const fs = require('fs');
const get_files = (dir) => {
const files = fs.readdirSync(dir);
// exclude .md files
for (let i = 0; i < files.length; i++) {
const file = files[i];
if (file.includes('.md')) {
files.splice(i, 1);
}
}
return files;
}
const current_dir = process.argv.slice(2);
console.log(current_dir);
const get_book_links = async (files) => {
const book_links = [];
for (let i = 0; i < files.length; i++) {
const file = files[i];
const book_name = file.split('.')[0];
const book_link = await searchDoubanBooks(book_name);
if (book_link.length > 0) {
book_links.push(book_link[0].url);
}
}
return book_links;
}
const files = get_files(current_dir[0]);
get_book_links(files).then(async (book_links) => {
console.log(book_links);
books_info = [];
for (let i = 0; i < book_links.length; i++) {
const book_link = book_links[i];
let info = await getDoubanBookInfo(book_link)
info.cover = await getJDBookCover(info.title);
books_info.push(info);
}
const markdown = await json_to_markdown(books_info);
console.log(markdown);
write_to_file(markdown);
});
const get_current_week_order = () => {
const today = new Date();
const firstDayOfYear = new Date(today.getFullYear(), 0, 1);
const pastDaysOfYear = (today - firstDayOfYear) / 86400000;
const currentWeek = Math.ceil((pastDaysOfYear + firstDayOfYear.getDay() + 1) / 7);
return currentWeek;
}
const json_to_markdown = async (books_info) => {
let titles = books_info.map((book) => book.title).join('、');
let markdown = '';
markdown += titles;
markdown += "\n\n";
const current_week_order = get_current_week_order();
markdown += `
本周是2023年第${current_week_order}周,本周推荐书单均来自群友推荐。欢迎大家在群里推荐书籍,我们会在每周整理出来。也欢迎您的加入,可先加群主微信(微信号:gameboy1000)备注“加群”,群主会拉你进群。
`;
for (let i = 0; i < books_info.length; i++) {
const book_info = books_info[i];
markdown += `
## ${book_info.title}
![${book_info.title}](${book_info.cover})
评分:${book_info.rating}
${book_info.intro}
`;
}
markdown += `
### 往期推荐
+ 推荐
+ 推荐
+ 推荐
+ 推荐
+ 推荐
> 关注 码农真经
>
> 点赞、转发、广告,更多优质资源等你来...
>
>( 2023${current_week_order} )
欢迎关注我的公众号“**码农真经**”,原创技术文章第一时间推送。
`;
console.log(markdown)
return markdown;
}
const write_to_file = (markdown) => {
const markdown_file = current_dir[0] + '/books.md';
fs.writeFileSync(markdown_file, markdown);
}
|