筛选
筛选、排序和分页 /query 结果,并查看各提供商支持的筛选。
筛选仅适用于
/query。单结果的/movie和/random不接受筛选。
1. 快速开始
/query 在 q 之外接受四个可选输入:filter、sort、page、num(每页数量)。GET 和
POST 都适用。
KEY="jvi_..." # your API key, sent as the x-javinfo-key header
# POST — genre + runtime filter, newest first
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{
"q": "ema kisaki",
"filter": { "genre": "Big Tits", "runtimeMin": 120 },
"sort": "release",
"page": 1
}'
# GET — same thing, flattened into query params
curl -s "https://api.javinfo.dev/query?q=ema%20kisaki&filter[genre]=Big%20Tits&filter[runtimeMin]=120&sort=release" \
-H "x-javinfo-key: $KEY"有筛选条件时,q 可选。没有关键词也能浏览整个分类:
# All "creampie" titles, no search term
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "filter": { "genre": "creampie" } }'既没有 q 也没有筛选条件 → 400("provide a search query or at least one filter")。
默认 num=10 时每 1,000 次调用 $0.40,随页大小上涨(见计费)。
筛选不改变价格。无结果(200 带 count: 0)或出错免费。
2. 输入参数
filter
对象。所有字段可选,只设需要的。
| 字段 | 类型 | 含义 |
|---|---|---|
genre | 字符串 | 分类 / 类型 |
actress | 字符串 | 女优(演员) |
maker | 字符串 | 制作商 / 工作室 |
series | 字符串 | 系列 |
director | 字符串 | 导演 |
label | 字符串 | 厂牌 |
actor | 字符串 | 男演员 |
censored | "censored" | "uncensored" | 马赛克状态 |
runtimeMin | 数字(分钟) | 最短时长 |
runtimeMax | 数字(分钟) | 最长时长 |
releaseAfter | 字符串 YYYY-MM-DD | 在此日期或之后发布 |
releaseBefore | 字符串 YYYY-MM-DD | 在此日期或之前发布 |
availability | "playable" | "magnets" | "subtitle" | "single" | 有流媒体 / 磁力 / 字幕 / 属于单一作品 |
sort
取 relevance(默认)、release、update、rating、views。
relevance:文本相关度。默认。release:最新发布优先。update:最近添加或更新优先。rating:评分最高优先。views:保留。没有提供商支持,始终拒绝。
page
从 1 开始的整数。省略即第 1 页。num 决定页大小。
深度翻页上限。 fanza/dmm 索引把结果集限制在 1,000 条,
page × num必须 ≤ 1000 ——num: 50时第 20 页是最后一页。再往后是404(无结果),不是错误信息。要更 深,用filter收窄。
num
每页结果数。整数,默认 10,最大 50。超出会截断,不拒绝;num < 1 → 400。
missav 以自身搜索数为上限;其他提供商都分页。page 偏移由 num 算出(num=10 时
第 2 页跳过前 10 条)。
两种方法都会转换数字输入,包括 page 和嵌套 filter[...]。带 filter[runtimeMin]=120
的 GET 可用。
3. 提供商能力矩阵
/query 搜索多个提供商,并非每个都支持每种筛选。构建查询前先读表。
提供商及 ID:query:fanza、query:dmm(DMM + FANZA 两个店面)、query:javdatabase、
query:sextb、query:javlibrary、query:javbus、query:missav、query:javdb。
| 能力 | fanza / dmm | missav | javdb | javdatabase | sextb | javlibrary | javbus |
|---|---|---|---|---|---|---|---|
genre | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actress | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
maker | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
series | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
director | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
label | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actor | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
censored: censored | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
censored: uncensored | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
runtimeMin / runtimeMax | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
releaseAfter / releaseBefore | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
availability | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| 组合多个筛选条件 | 任意组合 | 任意组合 | ❌ 无 | 任意组合 | 任意组合 | 任意组合 | 任意组合 |
sort: relevance | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: release | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: update | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: rating | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: views | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
page | ✅ | ❌(始终第 1 页) | ✅ | ✅ | ✅ | ✅ | ✅ |
图例:✅ 支持 · ❌ 不支持。
注意事项:
- fanza/dmm 仅有码。
uncensored会排除它们。 - javdb 没有字段筛选。 只有有码分类、
availability和丰富排序;请求具名维度即排除。 - javlibrary 仅有码。
uncensored会排除它。 - javbus 没有
actor维度。 固定filter.actor返回422。只按relevance或release排序;sort: rating拒绝。 - javbus 接受日文或英文名。 演员、制作商和类型同时读两种字段,所以
三上悠亜和Yua Mikami都匹配。类型是英文名,附日文对应。 - javdatabase 仅英文。 语料是英文站点;日文查询(
巨乳)匹配不到,该提供商被跳过。 传罗马字或英文。 - missav 忽略
page和sort。 只返回第 1 页,按相关度。 - javdatabase、sextb、javlibrary、javbus 来自我们自己的目录。 筛选和分页快而完整, 无上游上限。
4. 提供商选择的工作方式(瀑布流)
/query 按顺序尝试提供商,第一个有效结果胜出:
FANZA → DMM → javdatabase → sextb → javlibrary → javbus → missav → javdb前七个(到 missav)来自我们自己的索引。javdb 实时抓取,作为兜底。
无法满足的筛选如何处理,取决于是否固定提供商。
未固定(默认)— 跳过并前进
不发送 providers 时,所有注册提供商都是候选。无法完全满足的会被静默跳过,瀑布流
前进。第一个能兑现整个请求的提供商作答。
# sort=rating is javdb-only → every other provider is skipped, javdb answers.
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "ABP", "sort": "rating" }'
# → { "source": "javdb", ... }没有提供商能满足 → 422 和原因。
固定 — 硬性错误
发送 providers 强制指定一个或一组。被固定的提供商无法满足时,请求以 422 失败,
message 说明原因。绝不静默丢弃。
# Pin javdb, ask for a genre it can't filter → 422
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "x", "providers": ["query:javdb"], "filter": { "genre": "creampie" } }'
# → 422 { "message": "does not support filter \"genre\"" }
# Pin fanza, ask for uncensored → 422
# → { "message": "does not support uncensored content" }providers 接受逗号列表或数组,可带或不带 query: 前缀:
"providers": ["fanza","missav"] 或 "providers": "javdb"。
5. 值原样透传
v1 透传:筛选值原样发往该提供商的后端。没有共享分类体系,也没有跨提供商模糊匹配。 在一个提供商上有效的值,在另一个上往往不匹配,因为各源存储元数据的方式不同。
需要预先考虑:
-
类型因提供商而异。
- fanza/dmm、javdatabase、sextb 用英文类型名(
"Big Tits"、"creampie")。 - missav 用日文(
"巨乳"、"フィスト");英文类型返回空。 - javbus 两种都接受,并同时匹配。
- fanza/dmm、javdatabase、sextb 用英文类型名(
-
名称必须完全匹配。 精确匹配,不是子串。DMM + FANZA 索引把别名并入名称,例如
"Ema Kisaki (HARUKI, Haruki Kato)";筛选actress: "Ema Kisaki"返回零行。需要 完整的存储字符串。(v1 已知粗糙处。) -
censored各源含义不同。 missav 没有字面标志;API 把censored映射为主流马赛克 作品,uncensored映射为其他一切(Caribbeancom、10musume、Tokyo-Hot、1pondo、FC2、 无码流出等)。 -
javdatabase 仅英文。 传英文或罗马字;日文
q或值匹配不到,该提供商被跳过。
不匹配时只会得到更少或没有结果;未固定时瀑布流继续。不会报错。
6. 响应结构
响应体是获胜提供商的结果集:
{
"q": "ema kisaki", // your query, echoed
"source": "fanza", // which provider answered
"count": 10, // page size (default 10, set by num)
"results": [
{
"id": "118abp00999", // stable id (content id or dvd id)
"dvdId": "ABP-999",
"title": "…",
"cover": "https://…/…ps.jpg",
"releaseDate": "2019-01-04",
"extra": { // provider-specific, keys vary by source
"runtimeMins": 130,
"maker": "…",
"categories": ["Big Tits", "…"],
"actresses": [{ "name": "…", "image": "https://…|null" }],
"duration": 7800, // missav (seconds)
"genres": ["巨乳"], // missav
"studio": "…", "url": "…" // javdatabase
// …
}
}
]
}extra 是超集:只出现应答提供商的键。核心字段(id、dvdId、title、cover、
releaseDate)各提供商一致。
响应头携带元数据:X-Response-Time-Ms、X-Balance-Remaining。
7. 各提供商速查表
fanza / dmm(DMM + FANZA 店面):最丰富的结构化筛选。
- 所有具名维度,自由组合。英文类型和名称。
runtimeMin/runtimeMax以分钟计。sort: release。分页。- 仅有码。无
uncensored、availability。
# Big-tits titles over 120 min, newest first
-d '{ "filter": { "genre": "Big Tits", "runtimeMin": 120 }, "sort": "release" }'按名字搜索。 英文标题只到 2022 年中,更新的只有日文。演员名(罗马字)单独索引, 所以
q搜"Yua Mikami"仍能到新作。加"sort": "release"让最新优先:默认relevance下,英文标题提到该名字的老片更靠前。
# Newest Yua Mikami titles first
-d '{ "q": "Yua Mikami", "providers": ["fanza"], "sort": "release" }'
# Exact-match browse (see §5 on stored name strings)
-d '{ "filter": { "actress": "Yua Mikami" }, "sort": "release" }'missav:最广的筛选面,仅相关度。
- 所有具名维度(类型为日文)、时长和发布范围、
censored双向。 - 无
sort、无真正分页(仅第 1 页)、无availability。
# Uncensored titles matching "caribbean"
-d '{ "q": "caribbean", "filter": { "censored": "uncensored" } }'
# Japanese genre browse
-d '{ "q": "SSIS", "filter": { "genre": "巨乳" } }'javdb:无字段筛选,排序和 availability 最好。
- 仅
censored(双向)、availability、sort(relevance/release/update/rating)。 - 分页。无 genre、actress、maker。
# Playable, highest rated
-d '{ "q": "ABP", "filter": { "availability": "playable" }, "sort": "rating" }'javdatabase:完整英文目录。有码和无码,所有具名维度,两种范围。仅英文值(日文 q
跳过)。sort: release。分页。无 availability。
# Creampie titles from S1
-d '{ "filter": { "genre": "creampie", "maker": "S1 NO.1 STYLE" } }'sextb:含流媒体,我们自己的目录。所有具名维度,两种范围,censored 双向。
sort: release。分页。无 availability。
javlibrary:仅有码,我们自己的目录。所有具名维度,两种范围。sort: release。分页。
无 availability。
javbus:种子和广泛的日文目录,我们自己的索引。除 actor 外的所有具名维度,两种范围,
censored 双向。演员、制作商和类型接受日文或英文。sort: relevance / release。分页。
无 availability。种子随 /movie 以 extra.downloadLinks 返回。
# Japanese actress, newest first (POST)
-d '{ "providers": ["javbus"], "filter": { "actress": "三上悠亜" }, "sort": "release", "num": 2 }'
# Japanese genre + runtime, over GET
curl -s 'https://api.javinfo.dev/query?providers=javbus&filter%5Bgenre%5D=%E5%B7%A8%E4%B9%B3&filter%5BruntimeMin%5D=120&num=2' \
-H "x-javinfo-key: $KEY"
# Uncensored releases since 2026, newest first (POST)
-d '{ "providers": ["javbus"], "filter": { "censored": "uncensored", "releaseAfter": "2026-01-01" }, "sort": "release", "num": 2 }'固定 javbus 并请求它做不到的事 → 真正的 422:
# No male-actor dimension → 422
-d '{ "providers": ["javbus"], "filter": { "actor": "Shimiken" } }'
# → { "defined": false, "code": "BAD_REQUEST", "status": 422, "message": "does not support filter \"actor\"" }
# No rating sort → 422
-d '{ "providers": ["javbus"], "q": "ABP", "sort": "rating" }'
# → { "defined": false, "code": "BAD_REQUEST", "status": 422, "message": "does not support sort \"rating\"" }结果形状是 §6 的标准 /query 响应体。/movie 记录和种子列表见
javbus 一节。
8. v1 的限制
- 跨提供商值规范化。 没有统一词汇;用各提供商的方言(英文 vs 日文,精确字符串)。
sort: views保留,无人实现。- 单维多值。 每字段一个值(不支持
genre: ["a","b"])。 - javdb 的范围。 其他提供商都支持。
- javdb 之外的
availability。 - javdb 组合任意筛选。 它没有字段筛选。
- javbus 的
actor。 没有男演员维度。 - javbus 的
sort: update、rating、views。 只支持relevance和release。 - missav 的分页或排序。
- fanza/dmm 翻页超过 1000 条(
page × num≤ 1000)。 - 筛选
/movie或/random。
组合不可能时:固定 → 422 和原因;未固定 → 跳过并试下一个。