GithubHelp home page GithubHelp logo

acdzh / douban-book-api Goto Github PK

View Code? Open in Web Editor NEW
105.0 4.0 24.0 853 KB

第三方豆瓣读书 api 接口

License: MIT License

JavaScript 7.89% Dockerfile 0.01% Python 1.08% HTML 91.02%
douban douban-book node koa calibre

douban-book-api's Introduction

Douban Book Api for Calibre

简介

这是一个使用爬虫实现的第三方豆瓣读书 api 接口. 本项目中没有任何数据, 请自行搭建. 鉴于豆瓣关闭 api 接口并封禁 apiKey, 爬虫有被风控的风险, 请控制好抓取频次.

Demo

https://acdzh-douban-book-api.herokuapp.com/

服务部署在 Heroku, 访问量较大可能会被屏蔽, 请不要在正式环境使用该地址的服务.

安装

一键部署

请注意: 一键部署使用 Heroku 环境, 项目不对任何在第三方平台行为造成的后果负责

Deploy

Using Docker

sudo docker run -d \
--name douban-book-api-1 \
-p 3000:3000 \
-v /CACHE_DIR:/cache \
acdzh/douban-book-api

Using node

npm install
npm start

之后访问 http://localhost:3000/ 即可.

API 接口说明

图书搜索接口

请求地址

{HOST}/search?text=<text>

请求方式

GET

请求参数

Header 参数
参数名 必选 类型/参数值 说明
Content-Type application/json 请求参数类型

返回示例

[{HOST}/search?text=刘慈欣: DEMO

{
  "success": true,
  "data": [
    {
      "title": "刘慈欣 Cixin Liu",
      "abstract_2": "作者 / 1963-06-01 / 三体 / 三体Ⅱ / 三体Ⅲ",
      "labels": [],
      "url": "https://book.douban.com/author/4561353/",
      "id": 4561353,
      "abstract": "8693 人收藏",
      "cover_url": "https://img9.doubanio.com/view/celebrity/raw/public/p1543395922.04.jpg",
      "more_url": "",
      "tpl_name": "search_common"
    },
    {
      "id": 33146,
      "labels": [],
      "tpl_name": "search_simple",
      "abstract": "**工人出版社 / 共3册",
      "title": "[丛书] 刘慈欣作品",
      "url": "https://book.douban.com/series/33146"
    },
    {
      "more_url": "onclick=\"moreurl(this,{i:'0',query:'%E5%88%98%E6%85%88%E6%AC%A3',subject_id:'2567698',from:'book_subject_search',cat_id:'1001'})\"",
      "url": "https://book.douban.com/subject/2567698/",
      "extra_actions": [
        {
          "url": "https://book.douban.com/subject/2567698/?channel=subject_list&platform=web",
          "color": "#CF5B40",
          "text": "豆瓣书店有售"
        }
      ],
      "labels": [],
      "label_actions": [],
      "rating": {
        "rating_info": "",
        "star_count": 4.5,
        "count": 410716,
        "value": 8.8
      },
      "cover_url": "https://img1.doubanio.com/view/subject/m/public/s2768378.jpg",
      "interest": null,
      "topics": [],
      "tpl_name": "search_subject",
      "title": "三体 : “地球往事”三部曲之一",
      "id": 2567698,
      "abstract": "刘慈欣 / 重庆出版社 / 2008-1 / 23.00",
      "abstract_2": ""
    }
  ],
  "is_cache": false
}

这个返回的结果对应 https://search.douban.com/book/subject_search?search_text=刘慈欣, 见下图:

备注

考虑到大部分的预期结果都出现在第一页, 所以搜索暂未设计翻页. 如果后续发现此需求确有必要, 会考虑升级.

根据豆瓣 id 或 isbn 获取图书详情

请求地址

{HOST}/subject/<id>
{HOST}/isbn/<isbn>

请求方式

GET

请求参数

Header 参数
参数名 必选 类型/参数值 说明
Content-Type application/json 请求参数类型

返回示例

{HOST}/subject/27012117: DEMO
{HOST}/isbn/9787208140400: DEMO

{
  "success": true,
  "data": {
    "title": "政治的逻辑",
    "subtitle": "马克思主义政治原理",
    "original_title": "",
    "id": "27012117",
    "isbn": "9787208140400",
    "author": ["王沪宁", "林尚立","孙关宏"],
    "translator": [],
    "publish": "上海人民出版社",
    "producer": "",
    "publishDate": "2016-10",
    "pages": "650",
    "price": "98.00元",
    "binding": "精装",
    "series": "",
    "book_intro": "《政治的逻辑》是高校社会科学....",
    "author_intro": "王沪宁,复旦大学政治学教授...",
    "catalog": ["序言", "......", "后记"],
    "original_texts": ["阶级消亡...", "国家是..."],
    "labels": ["政治学", "马克思主义", "王沪宁", "政治", "政治经济学", "马克思", "**", "社会学"],
    "cover_url": "https://img2.doubanio.com/view/subject/l/public/s29602841.jpg",
    "url": "https://book.douban.com/subject/27012117/",
    "rating": {
      "count": 176,
      "info": "",
      "value": 8.7,
      "five_star_per": 53.4,
      "four_star_per": 33,
      "three_star_per": 8,
      "two_star_per": 2.8,
      "one_star_per": 2.8
    },
    "comments": [{
      "vote": 1,
      "user_name": "乔治 ♘",
      "user_page": "https://www.douban.com/people/165208204/",
      "rating": 4,
      "date": "2021-04-07",
      "content": "**马克思主义的集大成..."
      }],
    "reviews": [{
      "user_avatar": "https://img1.doubanio.com/icon/u1566359-9.jpg",
      "user_name": "月之仙者",
      "user_page": "https://www.douban.com/people/yuezhixianzhe/",
      "rating": 3,
      "time": "2008-08-06 09:53:30",
      "publisher": "上海人民出版社2004版",
      "publisher_page": "https://book.douban.com/subject/1003659/",
      "title": "政治的逻辑:马克思主义政治学原理",
      "url": "https://book.douban.com/review/1463309/",
      "short_content": "经过十天左右的时间终于看完了...",
      "useful_count": 53,
      "useless_count": 2,
      "reply_count": 8
    }],
    "notes": []
  },
  "is_cache": false
}

这个返回的结果对应 https://book.douban.com/subject/27012117/ 或者 https://book.douban.com/isbn/9787208140400/, 见下图:

数据格式

首级标签 次级标签 三级标签 名称 类型 示例 备注
title 标题 string "政治的逻辑"
subtitle 副标题 string "马克思主义政治原理"
original_title 原标题 string 适用于译著
id 豆瓣 id string "27012117"
author 作者 string[] ["王沪宁", "林尚立", "孙关宏"] 顺序与豆瓣页面一致, 不进行排序
translator 译者 string[] [] 顺序与豆瓣页面一致, 不进行排序
publish 出版社 string "上海人民出版社"
producer 出品方 string ""
publishDate 出版年 string "2016-10"
pages 页数 string "650"
price 定价 string "98.00元"
binding 装帧 string "精装"
series 丛书 string ""
book_intro 内容简介 string "《政治的逻辑》是.."
author_intro 作者简介 string "王沪宁,复旦大学..."
catalog 目录 string[] ["序言", "..."]
original_texts 原文摘录 string[] ["阶级消亡..."]
labels 标签 string[] ["政治学","马克思主义"]
cover_url 封面地址 string "https://img2.doubanio.com/view/subject/l/public/s29602841.jpg"
url 豆瓣页面地址 string "https://book.douban.com/subject/27012117/" 政治的逻辑 (豆瓣)
rating 豆瓣评分 object
count 评分人数 number 176
info 评分信息 "" \ "目前无人评价" \ "评价人数不足"
value 分数 number 8.7
five_star_per 五星占比 number 53.4 百分数
four_star_per 四星占比 number 33 百分数
three_star_per 三星占比 number 8 百分数
two_star_per 二星占比 number 2.8 百分数
one_star_per 一行占比 number 2.8 百分数
comments 短评 object[] 该项为数组, 包括最新短评与热门短评, 短评有字数限制
vote 有用数 number 1
user_name 用户昵称 string "乔治 ♘"
user_page 用户主页 string "https://www.douban.com/people/165208204/" 乔治 ♘
rating 评分 number 4
date 日期 string "2021-04-07"
content 内容 string "**马克思主义..."
reviews 书评 object[] 此项为数组, 包含热门书评与最新书评
user_avatar 用户头像 string "https://img2.doubanio.com/icon/u176380444-1.jpg"
user_name 用户昵称 string "东风一号"
user_page 用户主页 string "https://www.douban.com/people/176380444/" 东风一号
rating 评分 number 4
time 日期 string "2018-04-27 00:35:23"
publisher 版本 string "上海人民出版社2004版" 同一本书不同版本下的书评, 如果该项为空, 则说明用户所读的是当前版本
publisher_page 对应版本页面 string "https://book.douban.com/subject/1003659/" 政治的逻辑 (豆瓣)
title 标题 string "王沪宁《政治的逻辑》读后感"
url 书评链接 string "https://book.douban.com/review/9320713/" 王沪宁《政治的逻辑》读后感(政治的逻辑)书评
short_content 书评摘要 string "花了十几天的时间终于..."
useful_count 有用数 number 16
useless_count 没用数 number 1
reply_count 回应数 number 2
notes 读书笔记 object[] 开发中...
discussion 论坛 object[] 开发中...

缓存

查询会强制写缓存. 缓存文件夹路径由环境变量 CACHE_DIR 决定, 缺省情况下是 ./.cache, docker 中该路径为 /cache. 缓存存于这个文件夹下的 books.sqlite 中.

默认会先从缓存中查询, 如果需要最新数据可以指定 api 参数 update=1.

Calibre 插件

打包 calibre 目录为 zip, 拖入 Calibre 安装即可. 注意需要在设置里更改为自己的 api 地址.

油猴脚本

自动刷新豆瓣图书 api 缓存 @Greasy Fork

这个脚本可以在浏览豆瓣时自动提交图书信息. 第一次使用需要先设置 api 服务器地址.

其他

因为是通过抓取 html 页面来获取数据, 因此抓取较慢且有一定概率遭到反爬测率限制或数据解析失败. 如果解析规则失效或解析数据有误, 请提 issure 或 pr, 谢谢茄子🍆.

请确保 issure 中包含以下信息:

  • 你遇到的问题.
  • 测试用例. 最好是豆瓣图书链接.

如果要提 pr, 请在提供上述信息的同时, 另外确保所有测试用例没有问题. 可以使用 npm run test 来运行测试.

douban-book-api's People

Contributors

acdzh avatar aemoncao avatar fmwww avatar hanjianwei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

douban-book-api's Issues

有部分 isbn 查不到结果

isbn: 9787540483913
豆瓣链接: https://book.douban.com/subject/27194504/

<-- GET /isbn/9787540483913
  xxx GET /isbn/9787540483913 500 1,720ms -

  TypeError: Cannot read property 'data' of undefined
      at D:\DEV\douban-book-api\douban\libs\parseHtml.js:64:99
      at Array.map (<anonymous>)
      at getAuthorIntro (D:\DEV\douban-book-api\douban\libs\parseHtml.js:64:70)
      at parseHTML (D:\DEV\douban-book-api\douban\libs\parseHtml.js:216:19)
      at getBookInfoByHtml (D:\DEV\douban-book-api\douban\info.js:19:18)
      at getBookInfoByUrl (D:\DEV\douban-book-api\douban\info.js:34:10)
      at processTicksAndRejections (internal/process/task_queues.js:95:5)
      at async getBookInfoByIsbn (D:\DEV\douban-book-api\douban\info.js:42:10)
      at async D:\DEV\douban-book-api\app.js:172:22
      at async bodyParser (D:\DEV\douban-book-api\node_modules\koa-bodyparser\index.js:95:5)

关于油猴api!

你好,我想问一下,我安装了油猴的刷新缓存插件,但是我输入的api server 是我的nas地址加端口号,他好像并没有保存?每次刷新豆瓣页面都提示我输入api server,就是我不输入,也得保存到nas的cache里的数据库,这是怎么回事?谢谢!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.