基于 Next.js 开发的豆瓣读书 AI 推荐系统,通过分析用户在豆瓣的已读书籍来提供个性化推荐。
- 获取豆瓣用户已读书籍列表
- 书籍详情展示
- AI 智能推荐(支持 Grok 和 OpenAI)
- 灵活的筛选和推荐设置
- Next.js 14
- TypeScript
- Tailwind CSS
- Axios
- OpenAI SDK
- Google Generative AI SDK
- Puppeteer
- 安装依赖:
npm install
-
配置环境变量:
复制
.env.local.example
到.env.local
并填写相应的配置:cp .env.local.example .env.local
编辑
.env.local
文件:# 豆瓣 cookies(必须,用于爬取用户书单) DOUBAN_COOKIES=your_douban_cookies_here # Grok API配置(可选) GROK_API_KEY=your_grok_api_key_here # OpenAI API配置(可选) OPENAI_API_KEY=your_openai_api_key_here # Gemini API配置(可选) GEMINI_API_KEY=your_gemini_api_key_here
注意:至少需要配置一个 API 密钥才能使用 AI 推荐功能。DOUBAN_COOKIES 用于爬取豆瓣书单数据。
- 打开浏览器访问 豆瓣读书
- 登录你的豆瓣账号
- 按 F12 打开开发者工具
- 切换到 "Network" 标签页
- 刷新页面或点击任意链接
- 找到任意请求,查看 "Request Headers" 中的 "Cookie" 字段
- 复制完整的 Cookie 值到
.env.local
文件中 3. 启动开发服务器:
npm run dev
- 打开浏览器访问 http://localhost:3000
项目提供了两个测试脚本用于验证爬取功能:
npm run test-scraper
此脚本使用 Puppeteer 进行完整的浏览器爬取,支持查看浏览器窗口。
npm run test-axios
此脚本使用 Axios + Cheerio 进行静态网页爬取,兼容 Vercel 等无服务器环境。
注意:运行脚本前请确保在 .env.local
文件中设置了有效的 DOUBAN_COOKIES
。
项目支持两种爬取方式:
- 使用完整的浏览器实例
- 支持动态内容加载
- 需要 Railway、Render 等支持 Docker 的平台
- 使用 HTTP 请求 + Cheerio 解析
- 完全兼容 Vercel 无服务器环境
- 默认方法,推荐用于 Vercel 部署
API 调用示例:
// 使用 axios 静态爬取(默认)
fetch("/api/douban/scrape", {
method: "POST",
body: JSON.stringify({
cookies: "your_cookies_here",
method: "axios", // 可省略,默认为 axios
}),
});
// 使用 puppeteer(需要支持的环境)
fetch("/api/douban/scrape", {
method: "POST",
body: JSON.stringify({
cookies: "your_cookies_here",
method: "puppeteer",
}),
});
系统支持两种 AI 模型进行书籍推荐:
- Grok (xAI):xAI 开发的 AI 模型,注重真实性和帮助性
- OpenAI GPT:OpenAI 的 GPT 模型系列,提供强大的文本生成能力
- Gemini (Google):Google 开发的 Gemini 模型,具有优秀的理解和生成能力
- 在筛选设置中选择想要使用的 AI 模型
- 配置相应的 API 密钥到环境变量
- 点击"AI 推荐书籍"按钮生成个性化推荐
- 系统会根据你的阅读历史和筛选条件生成推荐
- 评分筛选:设置最低评分要求
- 包含关键词:指定推荐书籍的主题关键词
- 排除关键词:排除不感兴趣的书籍类型
- 换一批:生成新的推荐结果,避免重复
- Grok API 密钥:从 xAI 平台 获取
- OpenAI API 密钥:从 OpenAI 平台 获取
- Gemini API 密钥:从 Google AI Studio 获取
- 三个 API 密钥都可以配置,根据需要选择使用
- 自动化爬取:使用 Puppeteer 或浏览器脚本自动提取数据
- 演示数据:提供预设数据用于功能演示
- 错误处理:友好的错误提示和使用指导
- 使用 Puppeteer 进行自动化浏览器操作
- 浏览器脚本自动翻页提取数据
- 简洁的双选项卡界面设计
由于 Vercel 是无服务器环境,不支持直接运行 Puppeteer,以下是几种解决方案:
Railway 支持 Docker 容器,可以运行完整的 Node.js 应用。
# 1. 安装 Railway CLI
npm install -g @railway/cli
# 2. 登录并部署
railway login
railway init
railway up
优点:
- 支持 Puppeteer
- 自动检测 Next.js 项目
- 持续部署
类似 Railway,也支持 Docker 容器。
需要安装额外的依赖:
npm install chrome-aws-lambda puppeteer-core
项目已经集成了浏览器脚本生成功能,无需服务器端 Puppeteer。
优点:
- 完全兼容 Vercel
- 在用户浏览器中执行
- 无需额外配置
使用方法:
// 前端调用
const extensionCode = BrowserScriptGenerator.generateBrowserExtensionCode();
// 在浏览器控制台中执行生成的代码
在本地环境开发和测试,然后部署到支持的环境。
- 选择支持的云服务商(Railway/Render/AWS 等)
- 推送到 GitHub
- 连接到云服务
- 配置环境变量
- 部署完成
- 豆瓣个人书单页面需要登录才能访问
- 自动化爬取需要提供有效的 cookies
- 浏览器脚本方式更稳定,推荐使用
- 请遵守豆瓣的使用条款和隐私政策
- 避免频繁请求,以免被反爬虫机制限制
- 完善豆瓣 API 集成
- 添加 AI 推荐算法(支持 Grok、OpenAI 和 Gemini)
- 用户认证功能
- 推荐结果展示
- 用户反馈机制