javinfo

Lọc

Lọc, sắp xếp và phân trang kết quả /query — cùng với những gì mỗi nhà cung cấp hỗ trợ.

Lọc chỉ áp dụng cho /query (tìm kiếm nhiều kết quả). Các endpoint kết quả đơn /movie/random không nhận bộ lọc.


1. Bắt đầu nhanh

Mỗi yêu cầu /query chấp nhận bốn đầu vào tùy chọn bên cạnh cụm từ tìm kiếm q : filter, sort, pagenum (kích thước trang). Hoạt động cả trên GET (chuỗi truy vấn) và POST (nội dung JSON).

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"

qtùy chọn khi có một bộ lọc — bạn có thể duyệt cả một danh mục mà không cần từ khóa :

# 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" } }'

Một yêu cầu không có q lẫn bộ lọc sẽ bị từ chối với 400 ("provide a search query or at least one filter").

Chi phí là 200 đơn vị cố định cho mỗi lần gọi /query thành công bất kể bộ lọc. Một yêu cầu không trả về kết quả nào (404) hoặc bị lỗi thì miễn phí.


2. Các đầu vào

filter

Một đối tượng. Tất cả các trường đều tùy chọn. Chỉ đặt những trường bạn cần.

TrườngKiểuÝ nghĩa
genrestringDanh mục / thể loại
actressstringNữ diễn viên (người biểu diễn)
makerstringNhà sản xuất / studio
seriesstringLoạt phim
directorstringĐạo diễn
labelstringNhãn (label)
actorstringDiễn viên nam
censored"censored" | "uncensored"Trạng thái che mờ (mosaic)
runtimeMinnumber (phút)Thời lượng tối thiểu
runtimeMaxnumber (phút)Thời lượng tối đa
releaseAfterstring YYYY-MM-DDPhát hành vào/sau
releaseBeforestring YYYY-MM-DDPhát hành vào/trước
availability"playable" | "magnets" | "subtitle" | "single"Có stream / magnet / phụ đề / là tựa đề đơn

sort

Một trong: relevance (mặc định), release, update, rating, views.

  • relevance — độ liên quan khớp văn bản (mặc định khi bỏ qua).
  • release — ngày phát hành mới nhất trước.
  • update — mới thêm/cập nhật gần đây trước.
  • rating — được đánh giá cao nhất trước.
  • views — dành riêng ; chưa có nhà cung cấp nào hỗ trợ (luôn bị từ chối).

page

Số nguyên bắt đầu từ 1. Bỏ qua = trang 1. Kích thước trang được đặt bởi num.

num

Số kết quả mỗi trang. Số nguyên, mặc định 10, tối đa 50 (các giá trị lớn hơn bị giới hạn lại, không bị từ chối ; num < 1400). Nỗ lực tối đa tùy theo nhà cung cấp : javdatabase chỉ tôn trọng nó đến giới hạn kích thước trang lưu trữ cố định của trang web (giới hạn số dòng trả về) ; missav giới hạn ở số lượng tìm kiếm của nó. Độ lệch của page được tính từ num (trang 2 với num=10 bỏ qua 10 kết quả đầu tiên).

Ép kiểu số trong GET. num được ép kiểu từ chuỗi truy vấn, nhưng page và các số lồng nhau filter[...] thì chưa — trên GET chúng bị từ chối với 400 "expected number, received string". Hãy gửi page và các bộ lọc số qua POST JSON cho đến khi điều này được sửa.


3. Ma trận khả năng của nhà cung cấp

/query tìm kiếm nhiều nhà cung cấp. Không phải mọi nhà cung cấp đều hỗ trợ mọi bộ lọc. Đây là điểm mấu chốt của hệ thống — hãy đọc nó trước khi xây dựng truy vấn.

Nhà cung cấp (và id của chúng): query:fanza, query:dmm (hai cửa hàng DMM + FANZA), query:missav, query:javdb, query:javdatabase.

Khả năngfanza / dmmmissavjavdbjavdatabase
genre
actress
maker
series
director
label
actor
censored: censored
censored: uncensored
runtimeMin / runtimeMax
releaseAfter / releaseBefore
availability
Kết hợp nhiều bộ lọcbất kỳ tổ hợp nàobất kỳ tổ hợp nào❌ khôngchỉ genre+maker
sort: relevance
sort: release≈ (luôn mới nhất)
sort: update
sort: rating
sort: views
page❌ (luôn trang 1)

Chú thích: ✅ được hỗ trợ · ❌ không được hỗ trợ · ≈ được chấp nhận nhưng hoạt động như mặc định.

Ghi chú:

  • fanza/dmm chỉ có nội dung che mờ (censored) — một bộ lọc uncensored sẽ loại trừ chúng.
  • javdb không có bộ lọc theo từng trường (genre/actress/v.v.). Nó chỉ cung cấp tab censored thô, availability và tính năng sắp xếp phong phú. Yêu cầu javdb bất kỳ chiều nào có tên sẽ loại trừ nó.
  • javdatabase chỉ kết hợp genre + maker (một kho lưu trữ genre ∩ studio) ; bất kỳ cặp nào khác sẽ loại trừ nó.
  • missav bỏ qua page — nó luôn trả về trang đầu tiên của các kết quả khớp.
  • missav bỏ qua sort — kết quả chỉ được xếp hạng theo độ liên quan.

4. Cách hoạt động của việc chọn nhà cung cấp (thác nước)

/query thử các nhà cung cấp theo thứ tự, kết quả hợp lệ đầu tiên sẽ thắng :

FANZA → DMM → missav → javdb → javdatabase

Điều gì xảy ra với một bộ lọc mà nhà cung cấp không thể đáp ứng phụ thuộc vào việc bạn có ghim nhà cung cấp hay không.

Không ghim (mặc định) — bỏ qua và tiếp tục

Nếu bạn không gửi providers, mọi nhà cung cấp đã đăng ký đều là ứng viên. Bất kỳ nhà cung cấp nào không thể đáp ứng đầy đủ bộ lọc của bạn sẽ bị bỏ qua âm thầm, và thác nước chuyển sang nhà cung cấp tiếp theo. Bạn nhận được kết quả từ nhà cung cấp đầu tiên có thể đáp ứng toàn bộ yêu cầu.

# sort=rating is javdb-only → fanza/dmm/missav/javdatabase are 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", ... }

Nếu không có nhà cung cấp nào có thể đáp ứng yêu cầu, bạn nhận được 422 kèm thông báo giải thích lý do.

Đã ghim — lỗi cứng

Gửi providers để buộc một nhà cung cấp cụ thể (hoặc một tập hợp). Nếu một nhà cung cấp đã ghim không thể đáp ứng bộ lọc, yêu cầu sẽ thất bại với 422 và một message nêu rõ lý do — nó không bao giờ bị bỏ qua âm thầm.

# 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 chấp nhận danh sách phân tách bằng dấu phẩy hoặc mảng, có hoặc không có tiền tố query: : "providers": ["fanza","missav"] hoặc "providers": "javdb".


5. Các giá trị được truyền nguyên văn (quan trọng)

Đây là thiết kế truyền thẳng v1 : bất cứ giá trị nào bạn đặt trong một bộ lọc đều được gửi đến backend riêng của nhà cung cấp đó nguyên trạng. Không có phân loại chung và không có khớp mờ giữa các nhà cung cấp. Một giá trị hoạt động trên một nhà cung cấp thường sẽ không khớp trên nhà cung cấp khác, vì mỗi nguồn lưu trữ metadata của nó theo cách khác nhau.

Những hệ quả bạn phải lường trước :

  • Thể loại khác nhau theo từng nhà cung cấp.

    • fanza/dmm và javdatabase sử dụng tên thể loại tiếng Anh ("Big Tits", "creampie").
    • Thể loại của missav là tiếng Nhật ("巨乳", "フィスト"). Một thể loại tiếng Anh sẽ không trả về gì trên missav.
  • Tên phải khớp chính xác. Bộ lọc là khớp chính xác, không phải chuỗi con. Trên chỉ mục DMM + FANZA, một nữ diễn viên được lưu trữ với các bí danh gộp vào tên, ví dụ "Ema Kisaki (HARUKI, Haruki Kato)". Lọc actress: "Ema Kisaki" sẽ trả về không dòng nào ở đó — bạn cần chuỗi đầy đủ đã được lưu. (Đây là một điểm hạn chế đã biết của v1.)

  • censored mang ý nghĩa khác nhau theo từng nguồn. Trên missav không có cờ "censored/uncensored" theo nghĩa đen ; API ánh xạ censored → các tựa đề che mờ phổ thông và uncensored → mọi thứ còn lại (Caribbeancom, 10musume, Tokyo-Hot, 1pondo, FC2, các bản rò rỉ không che, …).

  • Đường dẫn của javdatabase được chuyển thành slug. maker: "S1 NO.1 STYLE" tự động trở thành kho lưu trữ studio s1-no-1-style — truyền tên dễ đọc, slug sẽ được tạo cho bạn.

Nếu một giá trị không khớp, bạn chỉ đơn giản nhận được ít/không có dòng nào từ nhà cung cấp đó (và nếu không ghim, thác nước sẽ tiếp tục). Không có gì báo lỗi — một kết quả khớp rỗng không phải là lỗi.


6. Định dạng phản hồi

Nội dung là tập kết quả từ nhà cung cấp chiến thắng :

{
  "q": "ema kisaki",        // your query, echoed
  "source": "fanza",        // which provider answered
  "count": 10,              // 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 là một tập cha — chỉ những khóa mà nhà cung cấp trả lời tạo ra mới có mặt. Các trường cốt lõi (id, dvdId, title, cover, releaseDate) đều nhất quán trên mọi nhà cung cấp.

Các header phản hồi mang metadata : X-Response-Time-Ms, X-Balance-Remaining.


7. Bảng tra cứu nhanh theo nhà cung cấp

fanza / dmm (các cửa hàng DMM + FANZA) — bộ lọc có cấu trúc phong phú nhất.

  • Tất cả các chiều có tên, kết hợp tự do. Giá trị genre/tên bằng tiếng Anh.
  • runtimeMin/runtimeMax tính bằng phút. sort: release. Có phân trang.
  • Chỉ danh mục censored — không có uncensored, không có availability, không có khoảng phát hành.
# Big-tits titles over 120 min, newest first
-d '{ "filter": { "genre": "Big Tits", "runtimeMin": 120 }, "sort": "release" }'

missav — bề mặt lọc rộng nhất, chỉ xếp hạng theo độ liên quan.

  • Tất cả các chiều có tên (thể loại bằng tiếng Nhật), khoảng thời lượng khoảng phát hành, censored cả hai chiều.
  • Không có sort (chỉ độ liên quan), không có phân trang thực sự (chỉ trang 1), không có availability.
# Uncensored titles matching "caribbean"
-d '{ "q": "caribbean", "filter": { "censored": "uncensored" } }'
# Japanese genre browse
-d '{ "q": "SSIS", "filter": { "genre": "巨乳" } }'

javdb — không có bộ lọc theo trường, nhưng có sắp xếp tốt nhất + availability.

  • Chỉ censored (cả hai), availabilitysort (relevance/release/update/rating).
  • Có phân trang. Không có genre/actress/maker/v.v.
# Playable, highest rated
-d '{ "q": "ABP", "filter": { "availability": "playable" }, "sort": "rating" }'

javdatabase — duyệt kho lưu trữ theo một chiều (hoặc genre ∩ maker).

  • genre, actress, maker, series, director ; chỉ genre+maker kết hợp được. Censored + uncensored. Giá trị tiếng Anh, tự động chuyển thành slug. Có phân trang.
  • Không có khoảng thời lượng/phát hành, không có label/actor, không có sắp xếp thực sự (mới nhất trước).
# Creampie titles from S1
-d '{ "filter": { "genre": "creampie", "maker": "S1 NO.1 STYLE" } }'

8. Những gì KHÔNG thể (v1)

  • Chuẩn hóa giá trị giữa các nhà cung cấp. Không có từ vựng genre/actress thống nhất — bạn phải nói phương ngữ của từng nhà cung cấp (tiếng Anh vs tiếng Nhật, chuỗi chính xác).
  • sort: views — dành riêng, không có nhà cung cấp nào triển khai.
  • Nhiều giá trị cho mỗi chiều. Một giá trị cho mỗi trường (không có genre: ["a","b"]).
  • Các khoảng nằm ngoài nhà cung cấp của chúng. Khoảng thời lượng chỉ dành cho fanza/dmm/missav ; khoảng phát hành chỉ dành cho missav.
  • availability ở bất kỳ đâu ngoài javdb.
  • Kết hợp các bộ lọc tùy ý trên javdb (không có) hoặc javdatabase (chỉ genre+maker).
  • Phân trang / sắp xếp trên missav.
  • Lọc /movie hoặc /random.

Khi một tổ hợp không khả thi : đã ghim → 422 kèm lý do ; không ghim → nhà cung cấp đó bị bỏ qua và nhà cung cấp tiếp theo được thử.

Tiếp theo

  • Duyệt tài liệu tham khảo API đầy đủ — thao tác /query liệt kê mọi tham số bộ lọc kèm playground trực tiếp.
  • Xem Lỗi cho các trường hợp 400422.

On this page