提取豆瓣数据并生成Hexo足迹页面

唠嗑

快过年了,看着自己去年一共才发布了7篇文章,比我QQ动态一年更新的数量还要少,我知道不能再鸽了,于是刚好有这么一个需求,就简简单单水一篇教程吧。

前言

前段时间总觉得Hexo-douban插件实现的页面效果不合我的心意,于是上网找有没有其他展现豆瓣数据的方法,这时找到:足迹页|爱吃肉的猫,一整个屏幕占满加上大大的显示封面一下子捕获了我的心,于是照猫画虎操作一番后成功实现了原博主的效果,效果预览

由于这个页面是本地部署,需要自行创建数据,格式如下:

可见一本书或一部电影需要填写名称、作者、封面等字段,我那总共加起来一百多条来自豆瓣上的数据一个个手动复制效率和速度也太慢了吧,同时有个问题,数据从哪来呢?从豆瓣复制吗,图片封面有防盗链,而且繁琐。

这时候发现了Hexo-douban插件的作者mythsman为插件写了个豆瓣数据提取服务mouban以供大家备份数据和使用,好了,这下路走通了。

为了解决上面提到的手动复制效率低的问题,萌生了写段python自动提取生成的想法,这篇文章应运而生。(我知道很水哎呀但是说不定能帮后来者省一点时间呢是吧,水就水点吧大家见谅不然可能今年都没新文章了[doge])

mouban接口使用方法

&action=后面可接wishdocollect,分别对应“想读”、“在读”、“已读”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 将 {your_douban_id} 改为你的豆瓣数字ID

# 用户录入/更新

https://mouban.mythsman.com/guest/check_user?id={your_douban_id}

# 查询用户的读书评论

https://mouban.mythsman.com/guest/user_book?id={your_douban_id}&action=collect

# 查询用户的电影评论

https://mouban.mythsman.com/guest/user_movie?id={your_douban_id}&action=collect

# 查询用户的游戏评论

https://mouban.mythsman.com/guest/user_game?id={your_douban_id}&action=collect

# 查询用户的音乐评论

https://mouban.mythsman.com/guest/user_song?id={your_douban_id}&action=collect

生成足迹页数据字段

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

import requests
import json

response = requests.get('https://mouban.mythsman.com/guest/user_book?id=231261343&action=collect') # 替换为你的mouban接口链接
data = json.loads(response.text)

def remove_spaces_and_newlines(input_string):
input_string = input_string.replace("-", "/")
return input_string

num = 0

for comment in data["result"]["comment"]:
douban_id = comment["item"]["douban_id"]
title = comment["item"]["title"]
author = comment["item"]["author"]
mark_date = remove_spaces_and_newlines(comment["mark_date"])
rate = comment["rate"]
thumbnail = comment["item"]["thumbnail"]
if num == 0:
print(f"- class_name: 📖 书籍清单\n class_desc: 静下来慢慢感受着,流淌的故事。\n link_list: \n - name: {title}\n score: {rate}\n premiere: {author}\n time: {mark_date}\n img: {thumbnail}\n link: http://aciano.top/redirect/?target=https://book.douban.com/subject/{douban_id}/\n")
if num != 0:
print(f" - name: {title}\n score: {rate}\n premiere: {author}\n icon: fa-solid fa-book-bookmark\n time: {mark_date}\n img: {thumbnail}\n link: http://aciano.top/redirect/?target=https://book.douban.com/subject/{douban_id}/\n")
num += 1

运行后在终端即可得到collect.yml中所需填写的数据了。

若需要生成电影/游戏的数据请自行替换class_name等数据。

批量下载封面

接口终归是别人的,图片链接能使用多久也是个未知数,还是保存至本地再上传到自己的图床稳定安全些。

save_path改成你要保存图片的本地文件夹路径,记得在文件名中加上{num},这是图片序号。

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

import requests
import json
import os

num = 0
response = requests.get('https://mouban.mythsman.com/guest/user_book?id=231261343&action=collect') # 替换为你的mouban接口链接
data = json.loads(response.text)

def remove_spaces_and_newlines(input_string):
input_string = input_string.replace("-", "/")
return input_string

def download_image(url, save_path):
response = requests.get(url)
if response.status_code == 200:
with open(save_path, 'wb') as f:
f.write(response.content)
print(f"图片已保存到 {save_path}")
else:
print("下载失败")

for comment in data["result"]["comment"]:
num += 1
save_path = f"E:/Users/Pictures/UbisoftConnect/image{num}.jpg" # 替换为你要保存图片的本地文件夹路径
download_image(comment["item"]["thumbnail"], save_path)

结语

好啦,这么一篇水文章就结束啦,下次更新又不知道是什么时候咯。

快过年了,拜个早年,祝大家身体健康,心想事成!

And…

Goodbye ~ See you next time ~