Aller au contenu
javinfo

Filtrage

Filtre, trie et pagine les résultats de /query, et vois ce que prend en charge chaque fournisseur.

Le filtrage s'applique uniquement à /query. Les endpoints à résultat unique /movie et /random n'acceptent pas de filtres.


1. Démarrage rapide

/query accepte quatre entrées optionnelles en plus de q : filter, sort, page et num (taille de page). GET et POST fonctionnent.

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 est optionnel avec un filtre. Tu peux parcourir une catégorie entière sans mot-clé :

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

Sans q ni filtre → 400 ("provide a search query or at least one filter").

$0.40 pour 1 000 appels avec num=10, et le prix monte avec la taille de page (facturation). Les filtres ne changent pas le prix. Sans résultat (200 avec count: 0) ou en erreur : gratuit.


2. Les entrées

filter

Objet. Tous les champs sont optionnels.

ChampTypeSignification
genrestringCatégorie / genre
actressstringActrice (interprète)
makerstringMaker / studio
seriesstringSérie
directorstringRéalisateur
labelstringLabel
actorstringActeur masculin
censored"censored" | "uncensored"Statut de la mosaïque
runtimeMinnumber (minutes)Durée minimale
runtimeMaxnumber (minutes)Durée maximale
releaseAfterstring YYYY-MM-DDSortie le/après
releaseBeforestring YYYY-MM-DDSortie le/avant
availability"playable" | "magnets" | "subtitle" | "single"Possède flux / aimants / sous-titres / est un titre unique

sort

relevance (par défaut), release, update, rating, views.

  • relevance — pertinence de correspondance textuelle. Par défaut.
  • release — sortie la plus récente en premier.
  • update — ajoutés ou mis à jour récemment en premier.
  • rating — les mieux notés en premier.
  • views — réservé. Aucun fournisseur ne le prend en charge (toujours rejeté).

page

Entier depuis 1. Omis = page 1. La taille est définie par num.

Plafond de pagination profonde. L'index fanza/dmm limite chaque jeu à 1 000 lignes ; page × num doit donc rester ≤ 1000 — avec num: 50, la page 20 est la dernière. Au-delà, tu reçois un 404 (aucun résultat), pas une erreur. Pour aller plus loin, restreins avec filter plutôt que de paginer.

num

Résultats par page. Entier, par défaut 10, max 50 (les valeurs supérieures sont plafonnées, pas rejetées ; num < 1 → 400). missav se limite à son propre nombre de recherche ; les autres paginent. Le décalage de page vient de num (page 2 avec num=10 saute les 10 premiers).

Les entrées numériques sont converties sur les deux méthodes, y compris page et filter[...] ; un GET avec filter[runtimeMin]=120 fonctionne.


3. Matrice des capacités des fournisseurs

/query interroge plusieurs fournisseurs et tous ne prennent pas en charge tous les filtres. Lis la table avant de construire tes requêtes.

Fournisseurs (et ids) : query:fanza, query:dmm (les deux vitrines DMM + FANZA), query:javdatabase, query:sextb, query:javlibrary, query:javbus, query:missav, query:javdb.

Capacitéfanza / dmmmissavjavdbjavdatabasesextbjavlibraryjavbus
genre✅✅❌✅✅✅✅
actress✅✅❌✅✅✅✅
maker✅✅❌✅✅✅✅
series✅✅❌✅✅✅✅
director✅✅❌✅✅✅✅
label✅✅❌✅✅✅✅
actor✅✅❌✅✅✅❌
censored: censored✅✅✅✅✅✅✅
censored: uncensored❌✅✅✅✅❌✅
runtimeMin / runtimeMax✅✅❌✅✅✅✅
releaseAfter / releaseBefore✅✅❌✅✅✅✅
availability❌❌✅❌❌❌❌
Combiner plusieurs filtrestoute combinaisontoute combinaison❌ aucunetoute combinaisontoute combinaisontoute combinaisontoute combinaison
sort: relevance✅✅✅✅✅✅✅
sort: release✅❌✅✅✅✅✅
sort: update❌❌✅❌❌❌❌
sort: rating❌❌✅❌❌❌❌
sort: views❌❌❌❌❌❌❌
page✅❌ (toujours page 1)✅✅✅✅✅

Légende : ✅ pris en charge · ❌ non pris en charge.

Notes :

  • fanza/dmm sont censurés uniquement. Un filtre uncensored les exclut.
  • javdb n'a pas de filtres par champ. Seulement l'onglet censuré, availability et un tri riche ; demander une dimension nommée l'exclut.
  • javlibrary est censuré uniquement. Un filtre uncensored l'exclut.
  • javbus n'a pas de dimension actor. Un filter.actor épinglé renvoie 422. Il ne trie que par relevance ou release ; sort: rating est rejeté.
  • javbus accepte les noms japonais ou anglais. Ses clauses d'actrice, de maker et de genre lisent les deux champs, donc 三上悠亜 et Yua Mikami correspondent. Les genres sont les noms anglais, avec les équivalents japonais à côté.
  • javdatabase est en anglais uniquement. Son corpus est le site anglais ; une requête japonaise (巨乳) ne correspond à rien et il est ignoré. Passe du romaji ou de l'anglais.
  • missav ignore page et sort. Il renvoie toujours la première page, classée par pertinence.
  • javdatabase, sextb, javlibrary et javbus viennent de notre catalogue. Filtrage et pagination rapides et complets, sans plafond en amont.

4. La sélection du fournisseur

/query essaie les fournisseurs dans l'ordre, le premier résultat valide l'emporte :

FANZA → DMM → javdatabase → sextb → javlibrary → javbus → missav → javdb

Les sept premiers (jusqu'à missav) viennent de notre index. javdb est récupéré en direct.

Un filtre impossible dépend de si tu as épinglé des fournisseurs.

Non épinglé (par défaut) — ignorer et avancer

Sans providers, tous les fournisseurs sont candidats. Celui qui ne peut pas satisfaire le filtre est ignoré silencieusement et la cascade avance. Répond le premier qui honore toute la requête.

# 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", ... }

Si aucun ne peut, tu reçois 422 avec la raison.

Épinglé — erreur stricte

Envoie providers pour forcer un fournisseur ou un ensemble. S'il ne peut pas satisfaire le filtre, la requête échoue avec 422 et un message nommant la raison ; elle n'est jamais abandonnée silencieusement.

# 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 accepte une liste séparée par des virgules ou un tableau, avec ou sans query: : "providers": ["fanza","missav"] ou "providers": "javdb".


5. Les valeurs passent telles quelles

Transmission directe v1 : la valeur part vers le backend du fournisseur telle quelle. Pas de taxonomie partagée, pas de correspondance approximative. Une valeur qui marche sur un fournisseur ne correspondra souvent pas sur un autre, car chaque source stocke ses métadonnées différemment.

À prévoir :

  • Les genres diffèrent selon le fournisseur.

    • fanza/dmm, javdatabase et sextb utilisent l'anglais ("Big Tits", "creampie").
    • missav utilise le japonais ("巨乳", "フィスト"). Un genre anglais ne renvoie rien.
    • javbus accepte les deux langues et correspond aux deux.
  • Les noms doivent correspondre exactement. Correspondance exacte, pas sous-chaîne. Sur l'index DMM + FANZA, une actrice est stockée avec ses alias dans le nom, p. ex. "Ema Kisaki (HARUKI, Haruki Kato)" ; actress: "Ema Kisaki" renvoie zéro ligne. Il faut la chaîne complète. (Limitation connue de la v1.)

  • censored signifie des choses différentes selon la source. missav n'a pas de drapeau littéral ; l'API associe censored aux titres à mosaïque grand public et uncensored à tout le reste (Caribbeancom, 10musume, Tokyo-Hot, 1pondo, FC2, fuites, …).

  • javdatabase est en anglais uniquement. Passe de l'anglais ou du romaji ; un q ou une valeur en japonais ne correspond à rien et le fournisseur est ignoré.

Si une valeur ne correspond pas, tu obtiens juste moins de lignes ou aucune de ce fournisseur (et, sans épinglage, la cascade continue). Rien ne génère d'erreur : une correspondance vide n'en est pas une.


6. Format de la réponse

Le corps est l'ensemble du fournisseur gagnant :

{
  "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 est un sur-ensemble : seules les clés du fournisseur qui répond sont présentes. Les champs principaux (id, dvdId, title, cover, releaseDate) sont identiques partout.

Les en-têtes portent des métadonnées : X-Response-Time-Ms, X-Balance-Remaining.


7. Aide-mémoire par fournisseur

fanza / dmm (DMM + FANZA) — le filtrage structuré le plus riche.

  • Toutes les dimensions nommées, combinées librement. Genre et nom en anglais.
  • runtimeMin/runtimeMax en minutes. sort: release. Paginé.
  • Catalogue censuré uniquement. Pas d'uncensored, pas d'availability.
# Big-tits titles over 120 min, newest first
-d '{ "filter": { "genre": "Big Tits", "runtimeMin": 120 }, "sort": "release" }'

Rechercher par nom. Le catalogue n'a des titres anglais que jusqu'à mi-2022 ; les plus récents sont en japonais seul. Les noms d'interprètes (romaji) sont indexés à part, donc q avec "Yua Mikami" atteint les sorties récentes. Ajoute "sort": "release" pour voir les nouvelles d'abord : en relevance, les anciens titres qui citent le nom remontent.

# 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 — la plus large surface de filtres, classée par pertinence seulement.

  • Toutes les dimensions nommées (genres en japonais), plages de durée et de sortie, censored dans les deux sens.
  • Pas de sort, pas de vraie pagination (page 1), pas d'availability.
# Uncensored titles matching "caribbean"
-d '{ "q": "caribbean", "filter": { "censored": "uncensored" } }'
# Japanese genre browse
-d '{ "q": "SSIS", "filter": { "genre": "巨乳" } }'

javdb — pas de filtres par champ, mais le meilleur tri et l'availability.

  • Seulement censored (les deux), availability et sort (relevance/release/update/rating).
  • Paginé. Pas de genre/actress/maker.
# Playable, highest rated
-d '{ "q": "ABP", "filter": { "availability": "playable" }, "sort": "rating" }'

javdatabase — le catalogue anglais complet. Censuré et non censuré, toutes les dimensions nommées, les deux plages. Valeurs anglaises uniquement (un q japonais est ignoré). sort: release. Paginé. Pas d'availability.

# Creampie titles from S1
-d '{ "filter": { "genre": "creampie", "maker": "S1 NO.1 STYLE" } }'

sextb — flux inclus, depuis notre catalogue. Toutes les dimensions nommées, les deux plages, censored dans les deux sens. sort: release. Paginé. Pas d'availability.

javlibrary — censuré uniquement, depuis notre catalogue. Toutes les dimensions nommées, les deux plages. sort: release. Paginé. Pas d'availability.

javbus — torrents et un large catalogue japonais, depuis notre index. Toutes les dimensions nommées sauf actor, les deux plages, censored dans les deux sens. Actrice, maker et genre acceptent le japonais ou l'anglais. sort: relevance / release. Paginé. Pas d'availability. Les torrents voyagent sur /movie via 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 }'

Épingle javbus et demande ce qu'il ne sait pas faire → le vrai 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\"" }

Le résultat est le corps /query standard du §6. Pour /movie et sa liste de torrents, voir la section javbus.


8. Limites de la v1

  • Normalisation entre fournisseurs. Pas de vocabulaire unifié ; parle le dialecte de chaque fournisseur (anglais vs japonais, chaînes exactes).
  • sort: views — réservé, non implémenté.
  • Plusieurs valeurs par dimension. Une par champ (genre: ["a","b"] non).
  • Plages sur javdb. Elles marchent partout ailleurs.
  • availability hors de javdb.
  • Combiner des filtres arbitraires sur javdb. Aucun filtre par champ.
  • actor sur javbus. Pas de dimension d'acteur masculin.
  • sort: update, rating ou views sur javbus. Seulement relevance et release.
  • Pagination ou tri sur missav.
  • Paginer au-delà de 1 000 sur fanza/dmm (page × num ≤ 1000).
  • Filtrer /movie ou /random.

Combinaison impossible : épinglé → 422 avec raison ; non épinglé → ignoré, le suivant est essayé.

Suite

Sur cette page