{
  "openapi": "3.0.1",
  "info": {
    "title": "Douban Book Scraper 豆瓣读书: Top 250, Tags, New Releases, Changes",
    "description": "Scrape public Douban Book (豆瓣读书) Top 250, topic tag lists and new releases with rating, rating count, publisher, price, ISBN and star split. Filter by rating, year, price or author, and track rank movers and new entries on a schedule. 豆瓣读书数据采集 to JSON, CSV or Excel. No login.",
    "version": "0.3",
    "x-build-id": "jNtgteUqICxH5LYVI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~douban-book-rankings-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-douban-book-rankings-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/getascraper~douban-book-rankings-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-douban-book-rankings-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/getascraper~douban-book-rankings-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-douban-book-rankings-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "rankingLists": {
            "title": "Ranking lists",
            "type": "array",
            "description": "Which public Douban book lists to read. Top 250 is the all-time rated list. Topic tag lists follow the tags you enter below. New releases are Douban's latest published books. Leave empty to collect only the books in Book URLs.",
            "items": {
              "type": "string",
              "enum": [
                "top250",
                "tag",
                "latest"
              ],
              "enumTitles": [
                "Top 250 books",
                "Topic tag lists",
                "New releases"
              ]
            },
            "default": [
              "top250"
            ]
          },
          "tags": {
            "title": "Topic tags",
            "type": "array",
            "description": "Douban topic tags to read when Topic tag lists is selected, one per row. Chinese names work best, for example 小说, 科幻, 历史, 经济学, 心理学, 漫画.",
            "default": [
              "小说"
            ],
            "items": {
              "type": "string"
            }
          },
          "latestCategories": {
            "title": "New release categories",
            "type": "array",
            "description": "Which categories of the new releases page to read when New releases is selected. Pick All books for the combined list.",
            "items": {
              "type": "string",
              "enum": [
                "all",
                "文学",
                "小说",
                "历史文化",
                "社会纪实",
                "科学新知",
                "艺术设计",
                "商业经管",
                "绘本漫画"
              ],
              "enumTitles": [
                "All books",
                "Literature",
                "Fiction",
                "History and culture",
                "Non-fiction and reportage",
                "Science",
                "Art and design",
                "Business",
                "Picture books and comics"
              ]
            },
            "default": [
              "all"
            ]
          },
          "bookUrls": {
            "title": "Book URLs or IDs",
            "type": "array",
            "description": "Specific Douban books to collect with full detail, one per row. Paste a book page link such as https://book.douban.com/subject/1007305/ or just the number 1007305.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tagSort": {
            "title": "Tag list order",
            "enum": [
              "T",
              "S",
              "R"
            ],
            "type": "string",
            "description": "How books are ordered inside each topic tag list. Highest rated is useful for finding quality titles, newest is useful for tracking releases.",
            "default": "T"
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Only keep books with a Douban rating at or above this score on the 0 to 10 scale. Use 0 to switch off.",
            "default": 0
          },
          "minRatingCount": {
            "title": "Minimum number of ratings",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep books rated by at least this many people. Helps avoid high scores based on a handful of votes. Use 0 to switch off.",
            "default": 0
          },
          "publishedFromYear": {
            "title": "Published from year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Only keep books published in this year or later, for example 2015. Use 0 to switch off.",
            "default": 0
          },
          "publishedToYear": {
            "title": "Published up to year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Only keep books published in this year or earlier, for example 2000. Use 0 to switch off.",
            "default": 0
          },
          "maxListPrice": {
            "title": "Maximum listed price",
            "minimum": 0,
            "type": "number",
            "description": "Only keep books whose listed price is at or below this amount in Chinese yuan. Books priced in another currency or with no price are left out. Use 0 to switch off.",
            "default": 0
          },
          "publisherContains": {
            "title": "Publisher contains",
            "type": "string",
            "description": "Only keep books whose publisher name contains this text, for example 人民文学出版社 or 译林. Leave empty to switch off.",
            "default": ""
          },
          "authorContains": {
            "title": "Author or contributor contains",
            "type": "string",
            "description": "Only keep books whose author or translator text contains this name, for example 村上春树 or 余华. Leave empty to switch off.",
            "default": ""
          },
          "keyword": {
            "title": "Title or summary keyword",
            "type": "string",
            "description": "Only keep books whose title, subtitle or summary line contains this text. Leave empty to switch off.",
            "default": ""
          },
          "fetchDetails": {
            "title": "Add full book details",
            "type": "boolean",
            "description": "Open each book page to add ISBN, page count, binding, translators, series, original title, the full 1 to 5 star rating split, how many readers are reading, have read or want to read it, and the full description. Slower, one extra page per book.",
            "default": false
          },
          "includeAuthorBio": {
            "title": "Add author biography",
            "type": "boolean",
            "description": "Adds the author biography text shown on each book page. Turns on the book page visit even if full details are off.",
            "default": false
          },
          "includeTableOfContents": {
            "title": "Add table of contents",
            "type": "boolean",
            "description": "Adds the chapter list shown on each book page, when Douban has one. Turns on the book page visit even if full details are off.",
            "default": false
          },
          "trackChanges": {
            "title": "Track changes since last run",
            "type": "boolean",
            "description": "Remembers each list between runs and adds rank change, new entry, rating change and rating count change to every book. The first run only saves the baseline. Use with a schedule for weekly or daily monitoring.",
            "default": false
          },
          "onlyChangedRows": {
            "title": "Only return changed books",
            "type": "boolean",
            "description": "When change tracking is on, return only books that are new on the list, moved position or changed rating since the last run. Books that dropped off the list are named in the run summary.",
            "default": false
          },
          "monitorScope": {
            "title": "Monitor name",
            "type": "string",
            "description": "A label for this watch. Runs with the same name are compared with each other, so use a different name for each separate monitor you schedule.",
            "default": "default"
          },
          "maxItems": {
            "title": "Maximum books per list",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of matching books to collect from each list. Top 250 never returns more than 250.",
            "default": 25
          },
          "dedupeAcrossLists": {
            "title": "Remove duplicate books",
            "type": "boolean",
            "description": "When the same book appears in more than one list or in Book URLs, return it only once, from the first list that shows it.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional Apify Proxy configuration for public Douban pages. Leave the default unless your account needs a custom route.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}