大约半年前开始对豆瓣书影音有了兴趣,注册并开始使用,把看过的电影都记录下来,并且用idouban把书影音引入到hexo,几天前idouban出问题了,书影音不能正常显示,就开始研究了一下。

idouban

项目地址:mythsman/idouban
引用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<body>
<div id="douban"></div>
</body>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/idouban/dist/index.css"
/>
<script
src="https://cdn.jsdelivr.net/npm/idouban/dist/index.js"
onload="idouban.init({
selector:'#douban',
lang: 'zh',
douban_id: '162448367',
type: 'book',
quote: 'This is my books',
actions: ['do','wish','collect'],
page_size: 10,
max_line: 4
})"
></script>

原理:
插件内部会请求一个豆瓣数据缓存服务 mouban,获取响应后直接直接以列表的形式渲染出来。类似功能的插件还有 hexo-douban。
首次访问时会触发 mouban 的初始化收录。这个过程可能比较久,没有排队的情况下需要等待的时间至少为 条目数/15*5秒 。如果一不小心排队了,则可能需要等待半天。
首次初始化好之后,后续会随着页面的不断访问定时进行增量更新,期间均可正常使用。

出问题的是豆瓣数据缓存服务 mouban,服务器无法连接。

mouban

项目地址:mythsman/mouban
作为 idouban 项目的后台数据获取服务,用于根据用户的豆瓣ID,获取用户在豆瓣的书、影、音、游中的标注信息,方便用户快速提取。

简要的处理流程如下:
用户输入个人豆瓣ID。
访问读书首页获取用户头像、域名等信息。
访问个人 rss 页面获得用户最新更新时间用于去重。
访问用户书、影、音、游的首页获取总数等信息。
滚动访问用户书、影、音、游的评论页获取评论信息、条目概览。
访问条目详情页获取详细信息,并自动发现其他推荐的用户和条目。
每天定时更新书、影、音、游的首页,获取最新条目。

作者提供了docker镜像以自部署服务。
docker-compose.yml

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
services:
mouban:
image: mythsman/mouban
container_name: mouban
restart: always
# ports:
# - "8080:8080"
network_mode: host
environment:
- GIN_MODE=release
- agent__enable=true
- agent__flow__discover=false
- agent__discover__level=1
- agent__item__concurrency=5
- agent__item__max=10000
- http__timeout=30000
- http__retry_max=20
- http__interval__user=5000
- http__interval__item=2000
- http__auth=288237448:6pQ2AP6aTeo,
- server__cors=https://domain.com
- server__limit=30m
- datasource__host=localhost
- datasource__username=root
- datasource__password=123456

格式经deepseek修正。
此处还需有mysql服务,可用docker部署。
docker-compose.yml

1
2
3
4
5
6
7
8
9
10
services:
mysql:
image: mysql:5.7
container_name: mysql
restart: always
privileged: true
ports:
- '3306:3306'
environment:
- 'MYSQL_ROOT_PASSWORD=123456'

mysql部署成功后,docker exec -it mysql sh进入,建立数据库mouban。
mysql和mouban部署成功后,设置反向代理内网地址到域名。

用户录入/更新:
https://one.qs100371.vip:8888/guest/check_user?id=288237448
输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"result": {
"id": 288237448,
"domain": "",
"name": "qqsss",
"thumbnail": "https://minio.mythsman.com/douban/d40b863d867af65343c4c36d19c49fdb.png",
"book_wish": 0,
"book_do": 0,
"book_collect": 0,
"game_wish": 0,
"game_do": 0,
"game_collect": 0,
"movie_wish": 0,
"movie_do": 0,
"movie_collect": 57,
"song_wish": 0,
"song_do": 0,
"song_collect": 0,
"publish_at": 0,
"sync_at": 0,
"check_at": 0
},
"success": true
}

查看已观看的电影列表:
https://one.qs100371.vip:8888/guest/user_movie?id=288237448&action=collect
输出:

1
2
3
4
{
"msg": "服务内部错误,请联系开发者处理",
"success": false
}

爬取信息出错,进入容器内部,发现只有一个命令main,并且镜像已经有7个月没有更新了。
作者指出最重要的是 http__auth 参数,用于配置登陆态的用户信息和走的http代理,格式为 <dbcl2>,http://<user>:<password>@<proxyIp>:<proxyPort>; ,可以配置多个。豆瓣对于未登录的账号有概率会投毒,所以采用登陆态账号来处理。
自部署只用了一个帐号,很容易就被封控了,提示 有异常请求从你的 IP 发出,请登录使用豆瓣
这里正确地抓取了已观影的数目,其他的不能得到正常结果。

作者部署的服务

https://mouban.mythsman.com/
今天服务正常了,重新用上面的命令。
https://mouban.mythsman.com/guest/check_user?id=288237448

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"result": {
"id": 288237448,
"domain": "",
"name": "qqsss",
"thumbnail": "https://minio.mythsman.com/douban/d40b863d867af65343c4c36d19c49fdb.png",
"book_wish": 0,
"book_do": 0,
"book_collect": 0,
"game_wish": 0,
"game_do": 0,
"game_collect": 0,
"movie_wish": 4,
"movie_do": 1,
"movie_collect": 57,
"song_wish": 0,
"song_do": 0,
"song_collect": 0,
"publish_at": 1755792477,
"sync_at": 1755936544,
"check_at": 1755940034
},
"success": true
}

https://mouban.mythsman.com/guest/user_movie?id=288237448&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
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
{
"result": {
"comment": [
{
"item": {
"douban_id": 36188176,
"title": "超人:遗产 Superman: Legacy",
"style": "动作 / 科幻 / 冒险",
"director": "詹姆斯·古恩",
"writer": "詹姆斯·古恩",
"actor": "",
"publish_date": "2025-07-11(美国)",
"alias": "超人:传承",
"thumbnail": "https://minio.mythsman.com/douban/78a4ade526d4d71cc5c5dda5962affe9.jpg"
},
"rate": 2,
"label": "",
"comment": "",
"action": 2,
"mark_date": "2025-08-22"
},
{
"item": {
"douban_id": 25828589,
"title": "黑寡妇 Black Widow",
"style": "动作 / 科幻 / 冒险",
"director": "雅克·舍费尔 / 内德·本森 / 埃里克·皮尔森 / 斯坦·李 / 唐·赫克 / 唐·里科",
"writer": "雅克·舍费尔 / 内德·本森 / 埃里克·皮尔森 / 斯坦·李 / 唐·赫克 / 唐·里科",
"actor": "斯嘉丽·约翰逊 / 弗洛伦丝·皮尤 / 蕾切尔·薇兹 / 大卫·哈伯 / 艾尔·安德森 / 维奥莱特·麦格劳 / 欧嘉·柯瑞兰寇 / O·T·法格本 / 威廉·赫特 / 雷·温斯顿 / 赖恩·基拉·阿姆斯特朗 / 米歇尔·李 / 拉娜·布隆代尔 / Claudia Heinz / 露西·詹·穆雷 / 乔治亚·柯蒂斯 / 约恩·巴特勒 / 库尔特·岳 / 奥利维尔·里希特斯 / 安得烈·拜伦 / 卡利·内勒 / 罗伯特·普拉尔戈 / 贾辛特·布兰肯希普 / 乔希·亨利 / 阿里娅·布鲁克斯 / 泰·赫尔利 / 马里安·洛伦西克 / 茱莉亚·路易斯-德瑞弗斯 / 亚当·普里克特 / 史蒂芬·萨姆森 / 乔基姆·斯卡利 / 利亚尼·塞缪尔 / 西蒙娜·齐夫科夫斯卡 / 刘易斯·扬",
"publish_date": "2021-07-07(中国香港) / 2021-07-09(美国/美国网络)",
"alias": "The Black Widow",
"thumbnail": "https://minio.mythsman.com/douban/052369cdf5766b0434784a3d69372ffd.jpg"
},
"rate": 3,
"label": "",
"comment": "",
"action": 2,
"mark_date": "2025-08-21"
},
...

],
"user": {
"id": 288237448,
"domain": "",
"name": "qqsss",
"thumbnail": "https://minio.mythsman.com/douban/d40b863d867af65343c4c36d19c49fdb.png",
"book_wish": 0,
"book_do": 0,
"book_collect": 0,
"game_wish": 0,
"game_do": 0,
"game_collect": 0,
"movie_wish": 4,
"movie_do": 1,
"movie_collect": 57,
"song_wish": 0,
"song_do": 0,
"song_collect": 0,
"publish_at": 1755792477,
"sync_at": 1755936544,
"check_at": 1755940034
}
},
"success": true
}

这里都得到了正确结果。
有一个意外的收获,原来的豆瓣影音记录有修改,但idouban得到的记录只增不减,所以显示数目不对。
通过以下命令刷新之后记录数目正常。
https://mouban.mythsman.com/admin/refresh_user?id=288237448
用作者提供的idouban得到的书影音记录:
https://qs100371.vip/douban/