大约半年前开始对豆瓣书影音有了兴趣,注册并开始使用,把看过的电影都记录下来,并且用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= 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
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/
