Chuyển đến nội dung
javinfo

Phân giải API

Chuẩn hóa mọi cách viết mã và lấy biến thể, nguồn, thẻ, nguồn gốc và stream cho một tựa.

/resolve cho biết mã này là gì và mỗi nguồn nói gì. /movie trả về nhà cung cấp đầu tiên trả lời; các endpoint này xem mọi nguồn và giữ những bất đồng.

Dùng để chuẩn hóa abp002, ABP-002 hoặc ABP-2, liệt kê mọi nguồn của một tựa, hoặc lấy thẻ chia sẻ hay bản đồ stream.

EndpointTrả vềMỗi 1.000 lần gọi
GET /resolveMã chuẩn, biến thể, nguồn, liên kết, thẻ nội tuyến$1.20
POST /resolve/batchTìm thấy hoặc không cho tối đa 100 mã$0.40 cho mỗi nhóm 10 mã duy nhất đã bắt đầu
GET /resolve/compareHai tựa đề cạnh nhau$0.40
GET /resolve/provenanceNguồn và độ tin cậy theo từng trường$0.40
GET /resolve/streamsKhả dụng stream, mẫu và magnet$0.40

GET /resolve

Chuẩn hóa mọi cách viết thành một mã chuẩn và trả về mọi thứ gắn với nó: biến thể, nguồn, liên kết tới /movie, thẻ 1200×630.

Tham sốKiểuBắt buộcÝ nghĩa
qstringcóMã hoặc cách viết cần phân giải. Ít nhất 2 ký tự.
formatpng, jpg hoặc svgkhôngMã hóa thẻ. Mặc định là png.
curl -s 'https://api.javinfo.dev/resolve?q=abp002&format=jpg' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "input": "abp002",
  "code": "ABP-002",
  "shareSlug": "85150B9G60S0M",
  "found": true,
  "variants": ["ABP-002", "ABP002"],          // 7 total
  "contentIdGuess": "118abp00002",
  "sources": ["fanza", "javdatabase"],        // 6 total
  "link": "/movie?q=ABP-002",
  "card": {
    "format": "jpg",
    "mime": "image/jpeg",
    "dataUri": "data:image/jpeg;base64,…"
  }
}

Thẻ nằm trong card.dataUri, nên phản hồi rất lớn: khoảng 1,1 MB với png (mặc định), 900 KB với svg, 180 KB với jpg. Chọn jpg khi kích thước quan trọng: raster nén mất dữ liệu, nhỏ hơn png khoảng sáu lần. Payload base64 bị cắt trong ví dụ; dataUri là URI data: đầy đủ cho <img src>.

TrườngÝ nghĩa
inputChuỗi bạn đã gửi, không đổi.
codeMã chuẩn.
variantsMọi cách viết trỏ đến cùng tựa đề, chuẩn nhất trước.
sourcesid công khai của các nguồn liệt kê tựa đề.
contentIdGuessid nội dung DMM khi chỉ mục cửa hàng có, ngược lại null.
linkĐường dẫn API cho cùng tựa đề, /movie?q=<code>. Tương đối so với https://api.javinfo.dev và cần header x-javinfo-key.
cardThẻ 1200×630 dưới dạng data URI, hoặc null.
foundtrue trên 200. Trượt là 404.
shareSlugSlug có checksum cho mã chuẩn.

Thẻ hiển thị mã, tiêu đề tiếng Anh (rút gọn hoặc mã nếu không có), tối đa ba tên và studio, tối đa bốn nhãn thể loại, rồi điểm đánh giá, thời lượng, ngày phát hành và số magnet khi biết. Huy hiệu STREAMABLE đánh dấu stream. Ảnh bìa bên phải, trên bản sao mờ. null nếu không render được: coi là tùy chọn và giữ metadata.

Mã không khớp gì: 404, không phải thẻ rỗng:

{
  "defined": false,
  "code": "NOT_FOUND",
  "status": 404,
  "message": "no title found for \"ZZZZ-99999\""
}

POST /resolve/batch

Kiểm tra tối đa 100 mã mỗi yêu cầu: dọn danh sách người dùng hoặc đối chiếu danh mục mà không cần 100 lần gọi.

Trường trong bodyKiểuBắt buộcÝ nghĩa
codesmảng stringcó1 đến 100 chuỗi không rỗng.
curl -s -X POST 'https://api.javinfo.dev/resolve/batch' \
  -H "x-javinfo-key: jvi_your_key_here" \
  -H 'content-type: application/json' \
  -d '{"codes":["ABP-002","beb001","ZZZZ-99999"]}'
{
  "count": 3,
  "found": 2,
  "results": [
    { "input": "ABP-002", "code": "ABP-002", "found": true },
    { "input": "beb001", "code": "BEB-001", "found": true },
    { "input": "ZZZZ-99999", "code": "ZZZZ-99999", "found": false }
  ]
}

Mã không tìm thấy là found: false trong 200 bình thường, không phải 404; code giữ phỏng đoán chuẩn tốt nhất. count là số mã sau khử trùng lặp; found là số khớp.

Mã được cắt khoảng trắng và khử trùng lặp trước khi đếm. "ABP-002" và " ABP-002 " tốn một chỗ và xuất hiện một lần trong results. Sau khi cắt, khớp chính xác: abp-002 và ABP-002 là hai chỗ.

Một mảng codes rỗng, hơn 100 mã, hoặc một chuỗi rỗng là 400:

{
  "defined": false,
  "code": "BAD_REQUEST",
  "status": 400,
  "message": "Input validation failed",
  "data": {
    "issues": [
      {
        "origin": "array",
        "code": "too_small",
        "minimum": 1,
        "inclusive": true,
        "path": ["codes"],
        "message": "Too small: expected array to have >=1 items"
      }
    ]
  }
}

Cùng dạng đó bao phủ lỗi kiểm tra khác, với mục issues khác.

GET /resolve/compare

Hai tựa cạnh nhau: thẻ cốt lõi mỗi bên, trường chung, điểm tương đồng.

Tham sốKiểuBắt buộcÝ nghĩa
astringcóMã thứ nhất. Ít nhất 2 ký tự.
bstringcóMã thứ hai. Ít nhất 2 ký tự.
curl -s 'https://api.javinfo.dev/resolve/compare?a=SSIS-001&b=ABP-002' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "a": {
    "input": "SSIS-001",
    "code": "SSIS-001",
    "shareSlug": "AD9MJMSD60R32E",
    "found": true,
    "variants": [
      "SSIS-001",
      "SSIS001",
      "…"
    ],
    "contentIdGuess": "ssis00001",
    "sources": [
      "fanza",
      "javdatabase",
      "javlibrary",
      "javbus",
      "missav",
      "sextb"
    ],
    "link": "/movie?q=SSIS-001"
  },
  "b": {
    "input": "ABP-002",
    "code": "ABP-002",
    "shareSlug": "85150B9G60S0M",
    "found": true,
    "variants": [
      "ABP-002",
      "ABP002",
      "…"
    ],
    "contentIdGuess": "118abp00002",
    "sources": [
      "fanza",
      "javdatabase",
      "javlibrary",
      "javbus",
      "missav",
      "sextb"
    ],
    "link": "/movie?q=ABP-002"
  },
  "shared": {
    "actresses": [],
    "categories": [],
    "maker": null
  },
  "similarity": 0.05
}

Mỗi bên có dạng /resolve, không có thẻ. sources liệt kê nguồn khớp; contentIdGuess là id nội dung DMM khi chỉ mục cửa hàng có, như trên /resolve.

shared giữ phần giao không phân biệt hoa thường của actresses và categories; maker chỉ điền khi cả hai tựa mang đúng cùng chuỗi nhà sản xuất.

similarity là hỗn hợp 0 đến 1, chủ yếu diễn viên chung (0.34) và thể loại chung (0.26), cộng cùng nhà sản xuất (0.1), thời lượng (0.06) và độ gần ngày phát hành (0.06), làm tròn 3 chữ số. Nếu một mã không tìm thấy, bên đó found: false, shared rỗng, similarity 0. Không bao giờ trả 404.

GET /resolve/provenance

Cho thấy nguồn mỗi trường, độ tin của API và các nguồn khác nói gì.

Tham sốKiểuBắt buộcÝ nghĩa
qstringcóMã hoặc cách viết cần phân giải. Ít nhất 2 ký tự.
curl -s 'https://api.javinfo.dev/resolve/provenance?q=ABP-002' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "code": "ABP-002",
  "found": true,
  "sources": ["fanza", "javbus"],            // 6 total, alphabetical
  "fields": {
    "title": {
      "value": "NEW TOKYO Style 01 - Aikarin",
      "source": "fanza",
      "confidence": 1,
      "candidates": [                        // 6 total, trust order
        { "source": "fanza", "value": "NEW TOKYO Style 01 - Aikarin" },
        { "source": "javdatabase", "value": "NEW TOKYO Style 01 - Aikarin" }
      ]
    },
    "titleJa": {
      "value": "NEW TOKYO流儀 01 あいかりん",
      "source": "javlibrary",
      "confidence": 0.8,
      "candidates": [                        // 4 total
        { "source": "javlibrary", "value": "NEW TOKYO流儀 01 あいかりん" },
        { "source": "javbus", "value": "NEW TOKYO流儀 01 あいかりん" }
      ]
    },
    "rating": {
      "value": 8.1,
      "source": "javlibrary",
      "confidence": 0.8,
      "candidates": [{ "source": "javlibrary", "value": 8.1 }]
    }
    // releaseDate, runtimeMins, maker, label, series, categories,
    // actresses and cover follow the same shape
  },
  "data": {
    "title": "NEW TOKYO Style 01 - Aikarin",
    "titleJa": "NEW TOKYO流儀 01 あいかりん",
    "rating": 8.1
    // the merged value for every field above
  }
}

fields bao gồm title, titleJa, releaseDate, runtimeMins, maker, label, series, categories, actresses, cover và rating.

Giá trị vô hướng lấy từ nguồn trọng số cao nhất; mảng như categories và actresses được hợp nhất, không bị thay thế. candidates liệt kê mọi nguồn đã đưa giá trị, tốt nhất trước, nên bất đồng hiện trong phản hồi.

confidence là trọng số nguồn thắng chia trọng số tốt nhất của phản hồi: 1 cho nguồn hàng đầu, thấp hơn cho phần còn lại. Trọng số, cao nhất trước: cửa hàng 1, javdatabase 0.85, javlibrary 0.8, javbus 0.7, missav 0.6, sextb 0.55. sources theo bảng chữ cái; candidates theo độ tin.

Mã không tồn tại: 404 với nội dung GET /resolve.

GET /resolve/streams

Nơi xem hoặc tải tựa: stream HLS, mẫu, magnet, phụ đề, kích thước gallery.

Tham sốKiểuBắt buộcÝ nghĩa
qstringcóMã hoặc cách viết cần phân giải. Ít nhất 2 ký tự.
curl -s 'https://api.javinfo.dev/resolve/streams?q=ABP-002' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "code": "ABP-002",
  "found": true,
  "playback": "hls",
  "availability": {
    "magnets": 47,
    "stream": true,
    "sample": false,
    "trailer": false,
    "gallery": 0,
    "subtitles": [],
    "uncensored": false,
    "score": 0.7
  },
  "streams": {
    "master": "https://surrit.com/c511196b-b4f8-47bf-a6b0-64ba625fc2a4/playlist.m3u8",
    "variants": [
      "https://surrit.com/c511196b-b4f8-47bf-a6b0-64ba625fc2a4/1280x720/video.m3u8",
      "https://surrit.com/c511196b-b4f8-47bf-a6b0-64ba625fc2a4/842x480/video.m3u8"
    ]
  },
  "sampleUrl": null,
  "galleryCount": 106,
  "sources": ["fanza", "javdatabase"]        // 6 total
}

playback trả lời một dòng: hls khi có stream, magnet khi có magnet, sample khi chỉ có mẫu hoặc trailer, còn lại none.

availability thêm chi tiết:

TrườngÝ nghĩa
magnetsSố info hash magnet khác nhau trên mọi nguồn.
streamCó HLS master.
sampleCó clip mẫu hoặc trailer.
trailerCụ thể là trailer.
gallerySố ảnh gallery từ nguồn được chọn cho media.
subtitlesNgôn ngữ phụ đề phát hiện trong metadata. Hiện chỉ zh được gắn thẻ.
uncensoredMetadata đánh dấu tựa đề là uncensored.
scoreĐộ đầy đủ 0 đến 1: magnet 0.35, stream 0.35, mẫu 0.15, gallery 0.1, phụ đề 0.05.

streams là {master, variants} khi có HLS, nếu không null. master là playlist cho trình phát; variants theo độ phân giải. sampleUrl là clip mẫu khi có; galleryCount là số gallery lớn nhất trên các nguồn.

Mã không tồn tại: 404 với nội dung GET /resolve.

Chi phí

Chỉ 200 mới bị tính phí. Lượt trúng bộ nhớ đệm (X-Cache: HIT), phản hồi 4xx và câu trả lời suy giảm (X-Degraded) miễn phí. /resolve, compare và provenance cache 1 giờ; streams 15 phút. Batch không cache.

GET /resolve tốn $1.20 mỗi 1.000 lần gọi vì render thẻ; endpoint resolve khác $0.40 mỗi 1.000 lần gọi.

Batch tính giá theo số mã còn lại sau khi cắt và khử trùng lặp, theo nhóm 10 đã bắt đầu:

Mã duy nhấtMỗi 1.000 lần gọi
1–10$0.40
11–20$0.80
21–30$1.20
100$4.00

Mã trạng thái

EndpointMã
GET /resolve200, 400, 401, 402, 404, 429
POST /resolve/batch200, 400, 401, 402, 429
GET /resolve/compare200, 400, 401, 402, 429
GET /resolve/provenance200, 400, 401, 402, 404, 429
GET /resolve/streams200, 400, 401, 402, 404, 429

q ngắn hơn 2 ký tự, format không xác định và lỗi nội dung batch ở trên là 400.

Lỗi thường gặp

Không khóa hoặc khóa sai: 401, nội dung khác nhau.

# No key
curl -s 'https://api.javinfo.dev/resolve?q=ABP-002'
{
  "defined": false,
  "code": "UNAUTHORIZED",
  "status": 401,
  "message": "Unauthorized"
}
# Bad key
curl -s 'https://api.javinfo.dev/resolve?q=ABP-002' \
  -H "x-javinfo-key: jvi_not_a_real_key"
{ "error": "invalid api key" }

402 nghĩa là số dư thấp hơn giá lần gọi. Không gì bị tính phí; Retry-After: 3600 là gợi ý cho máy khách tự động.

{
  "defined": false,
  "code": "PAYMENT_REQUIRED",
  "status": 402,
  "message": "insufficient balance"
}

429 là giới hạn mỗi phút theo tài khoản; Retry-After mang số giây cần chờ.

{ "error": "rate limit exceeded" }

Phía tài khoản: Giới hạn tốc độ & thanh toán và Lỗi. Tham khảo từng thao tác: /docs/api/discovery/resolve.

Trong trang này