本文へスキップ
javinfo

分析 API

出演者の統計、ローソク足、共演者、ランキング、週次のマーケット量。

/analytics はカタログを数字に変えます:作品量、評価、スタジオ分布、共演者、ランキング、 週次発売量。すべて発売日、javlibrary の評価、保持済みのファセット件数から計算します。 再生回数は読まず、シリーズも捏造しません。

6つの GET エンドポイント、キーが必要です。1,000 コールあたり $0.60 から。ランキングと 共演グラフは num が増えると高くなります。

出演者 ID

q を受け付けるのは4つです:統計、ローソク足、年表、共演者。q は /idols の ID で、javdatabase の slug(yua-mikami など)または DMM のみの dmm-1005467 です。

q はドキュメントのルックアップで、検索ではありません。三上悠亜 のような日本語名は 404 を 返します。名前も別名も照合しません。先に /idols を検索し、id を渡してください:

curl -s -X POST https://api.javinfo.dev/idols \
  -H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
  -d '{ "q": "yua" }'

統計 — /analytics/idols/stats

1回でプロフィールカードを取得します:作品量、期間、評価、ジャンルとスタジオ分布、 0〜1 のスタースコア。

パラメータ型必須説明
qstringはい/idols の ID または slug
curl -s 'https://api.javinfo.dev/analytics/idols/stats?q=yua-mikami' \
  -H "x-javinfo-key: jvi_your_key_here"

レスポンス 200(配列は省略):

{
  "idol": {
    "id": "yua-mikami",
    "name": "Yua Mikami",
    "nameJa": "三上悠亜",
    "image": "https://pics.dmm.co.jp/mono/actjpgs/mikami_yua.jpg",
    "tags": [
      "Twenties",
      "Big Tits"
    ],
    "age": 33,
    "heightCm": 159,
    "cup": "G",
    "debut": null,
    "birthplace": "Aichi",
    "aliases": [
      "みかみゆあ"
    ]
  },
  "works": 1127,
  "worksBySource": {
    "fanza": 1127,
    "javdatabase": 365,
    "javlibrary": 457,
    "javbus": 417,
    "missav": 358
  },
  "firstRelease": "2015-06-01",
  "lastRelease": "2026-11-20",
  "releasesLast90": 30,
  "avgRating": 8.02,
  "ratedTitles": 168,
  "studioCount": 8,
  "topGenres": [
    {
      "genre": "Big Tits",
      "count": 765
    },
    {
      "genre": "Over 4 Hours",
      "count": 610
    },
    "…"
  ],
  "topStudios": [
    {
      "studio": "S1 NO.1 STYLE",
      "count": 991
    },
    {
      "studio": "ROOKIE",
      "count": 48
    },
    "…"
  ],
  "cadenceDays": 115,
  "starPower": 0.885,
  "starPower100": 88,
  "asOf": "2026-11-08T07:34:17.700Z"
}

works は単一ソースの最大件数で、合計ではありません。同じ作品が fanza、javdatabase、 javlibrary、javbus、missav にあるため、足すと約4倍に膨らみます。worksBySource はその重複を 示し、合計は works になりません。

avgRating は javlibrary の 1〜10 平均で、最大200作品の評価付き作品が対象です。 ratedTitles は入った評価数を示します。

studioCount、topGenres、topStudios は重複を除いた作品数を数え、ソース間で合計せず works を超えません。三上悠亜:works 1127、studioCount 8、最多ジャンル "Big Tits" 765 作品、最多スタジオ "S1 NO.1 STYLE" 991。

cadenceDays は連続する2つの発売間の最長日数で、平均ではありません。starPower は作品量、評価、 直近90日の生産量、スタジオ分布、活動期間、最後の発売の新しさを合成した 0〜1 の値。 starPower100 はその 0〜100 尺度です。

ミス:404。

curl -s 'https://api.javinfo.dev/analytics/idols/stats?q=nobody-zzzz-qq' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "defined": false,
  "code": "NOT_FOUND",
  "status": 404,
  "message": "idol not found"
}

料金:1,000 コールあたり $0.60。ステータスコード:200、400、401、402、404、429。 リファレンス:idolStats。

ローソク足 — /analytics/idols/ohlc

出演者のキャリアのローソク足です。測定値は累計発売数を日・週・月のバケットに分けたもの。 終値が横ばいなら発売なし、上昇なら新作あり。

価格ではなく、再生回数の履歴もありません。長期に観測できるのは発売時期だけです。

パラメータ型デフォルト範囲
qstring必須/idols の ID または slug
bucket"day" | "week" | "month""week"
limitinteger50010〜2000

limit は返るローソク足の最大数。バケット数が超える場合、新しいものが残り、古いものは 落ちます。limit が10未満、または bucket が day、week、month 以外は 400。

curl -s 'https://api.javinfo.dev/analytics/idols/ohlc?q=yua-mikami&bucket=month&limit=12' \
  -H "x-javinfo-key: jvi_your_key_here"

レスポンス 200。12本の月次ローソク足が直近1年をカバーし、古いものは落ちます (ローソク足と ema は省略):

{
  "id": "yua-mikami",
  "metric": "cumulative_releases",
  "source": "catalogue",
  "bucket": "month",
  "candles": [
    {
      "t": "2025-12-01",
      "o": 1075,
      "h": 1083,
      "l": 1075,
      "c": 1083,
      "v": 9
    },
    {
      "t": "2026-01-01",
      "o": 1084,
      "h": 1091,
      "l": 1084,
      "c": 1091,
      "v": 8
    },
    "…",
    {
      "t": "2026-11-01",
      "o": 1125,
      "h": 1127,
      "l": 1125,
      "c": 1127,
      "v": 3
    }
  ],
  "changePct": 4.84,
  "ema": [
    1083,
    1085,
    "…"
  ],
  "totalReleases": 1127,
  "truncated": true,
  "asOf": "2026-11-08T07:34:17.117Z"
}

ローソク足のフィールド:

フィールド意味
tバケットの開始日、YYYY-MM-DD。週は月曜始まり、月は1日始まりです。
oバケット内の最初の発売時点の累計発売数。
hバケット内で到達した最高累計数。
lバケット内の最低累計数。
cバケット内の最後の発売時点の累計数。
vバケット内の観測数。

カタログ系列では1観測が1発売行なので、v はバケット内の発売数です。2つ含むバケットは 1つ目の後で始まり、2つ目の後で終わり、v: 2 を報告します。

metric と source は得た系列を示します。日次スナップショットが2日分以上を記録すると、 metric: "star_power" と source: "snapshots" に切り替わります:ローソク足はスタースコア の推移を 1,000 倍で測り、totalReleases: 0、truncated: false です。

changePct は最初の始値から最後の終値までの変化率で、返ったローソク足の範囲で計算します。 ema は終値の7期間指数移動平均で、candles と同じ長さです。

truncated: true は limit に収めるため古いローソク足が落ちたことを意味します。最新は 常に含まれます。totalReleases は limit に関係なくキャリア全体の件数です。limit を 上げると曲線全体、最大2000本です。

料金:1,000 コールあたり $0.60。ステータスコード:200、400、401、402、404、429。 リファレンス:idolOhlc。

年表 — /analytics/idols/timeline

月ごとの発売数と、プロフィールページの4つの値:デビュー、最新、最多の月、最長の 間隔。すべて発売日から。

パラメータ型必須説明
qstringはい/idols の ID または slug
curl -s 'https://api.javinfo.dev/analytics/idols/timeline?q=yua-mikami' \
  -H "x-javinfo-key: jvi_your_key_here"

レスポンス 200(months は省略):

{
  "id": "yua-mikami",
  "debut": "2015-06-01",
  "latest": "2026-11-24",
  "peakMonth": "2023-07",
  "longestGapDays": 115,
  "months": [
    { "month": "2015-06", "releases": 2 },
    { "month": "2015-09", "releases": 2 }
  ],
  "truncated": false,
  "asOf": "2026-11-06T18:31:34.750Z"
}

months は昇順の YYYY-MM で、発売のあった月だけです。peakMonth は最多の月、 longestGapDays は連続する2つの発売日の最大間隔です。

latest は独自の新しい順クエリから来るため、truncated が true でも正確です。このフラグは 昇順ページが10,000行に達したことを意味し、月次リストは最新まで届きません。

料金:1,000 コールあたり $0.60。ステータスコード:200、400、401、402、404、429。 リファレンス:idolTimeline。

共演者 — /analytics/idols/costars

共演者を共通作品数でランク付けします。出演作への1回のファセットクエリでリストを作り、 本人は除きます。

パラメータ型デフォルト範囲
qstring必須/idols の ID または slug
numinteger151〜50
curl -s 'https://api.javinfo.dev/analytics/idols/costars?q=yua-mikami&num=3' \
  -H "x-javinfo-key: jvi_your_key_here"

レスポンス 200(results は省略):

{
  "id": "yua-mikami",
  "count": 3,
  "results": [
    { "name": "Aika Yumeno", "sharedTitles": 771 },
    { "name": "Miharu Usa", "sharedTitles": 675 }
  ],
  "asOf": "2026-11-06T18:31:34.119Z"
}

sharedTitles は2つの名前がカタログにある作品を数えます。

料金:num=15 で 1,000 コールあたり $0.90。num が10以下なら $0.60。超えると上がり、 num=50 で $3.00。ステータスコード:200、400、401、402、404、429。 リファレンス:idolCostars。

ランキング — /analytics/leaderboard

期間内の出演者を3指標でランク付けします。

metricランク付けの基準score
releases期間内の作品量彼女の発売数 ÷ 首位の発売数、0〜1
rating調整済み javlibrary 平均0〜1
momentum前の期間との比較比率 ÷ 3、上限1
パラメータ型デフォルト範囲
rangeinteger907〜365、日数
metric"releases" | "rating" | "momentum""releases"
numinteger201〜100
curl -s 'https://api.javinfo.dev/analytics/leaderboard?range=30&metric=releases&num=3' \
  -H "x-javinfo-key: jvi_your_key_here"

レスポンス 200(results は省略):

{
  "metric": "releases",
  "range": 30,
  "count": 3,
  "truncated": false,
  "results": [
    {
      "name": "Yui Hatano",
      "nameJa": null,
      "releases": 67,
      "avgRating": null,
      "studios": 10,
      "lastRelease": "2026-11-06",
      "score": 1
    },
    {
      "name": "Yui Tenma",
      "nameJa": null,
      "releases": 55,
      "avgRating": null,
      "studios": 4,
      "lastRelease": "2026-11-06",
      "score": 0.821
    }
  ],
  "asOf": "2026-11-06T18:31:35.824Z"
}

releases は期間内の正確なファセット件数です。studios と lastRelease は最新1,000ヒット から来るため、range が長いと少なく数えることがあります。

avgRating は期間内の評価付き作品の javlibrary 1〜10 平均で、ない場合 null です。 rating 指標は評価付き作品が1つ以上ある出演者だけを対象にし、その数に応じて平均を 3.5/5 の事前分布へ引き寄せるため、1つの 10/10 では首位になれません。

momentum は今期の発売数を同じ長さの前期で割ります。前期に発売がない場合、比率 2 で スコアは 0.667。同点は発売数で解決します。

name はファセットキーで、ラテン名があればそれ、なければ日本語名です。 nameJa は現在常に null です。

truncated: true は名前ファセットがインデックスの値上限に達したことを意味し、件数は上位の名前だけです。

不正な enum は 400 で、失敗したパラメータは data.issues[].path にあります:

curl -s 'https://api.javinfo.dev/analytics/leaderboard?metric=views' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "defined": false,
  "code": "BAD_REQUEST",
  "status": 400,
  "message": "Input validation failed",
  "data": {
    "issues": [
      {
        "code": "invalid_value",
        "values": ["releases", "rating", "momentum"],
        "path": ["metric"],
        "message": "Invalid option: expected one of \"releases\"|\"rating\"|\"momentum\""
      }
    ]
  }
}

同じ形が他のパラメータを覆います:範囲外の range、100 を超える num、不正な bucket。 issues がパラメータを示します。

料金:num=20 で 1,000 コールあたり $1.20。num が10以下なら $0.60。超えると上がり、 num=100 で $6.00。ステータスコード:200、400、401、402、429。リファレンス: leaderboard。

マーケット — /analytics/market

DMM + FANZA カタログの週次発売量と、期間内で伸びる・落ちるジャンルです。

パラメータ型デフォルト範囲
weeksinteger122〜52
moversinteger101〜50
curl -s 'https://api.javinfo.dev/analytics/market?weeks=4&movers=3' \
  -H "x-javinfo-key: jvi_your_key_here"

レスポンス 200(省略):

{
  "weeks": 4,
  "volume": [
    { "week": "2026-10-09", "releases": 1319 },
    { "week": "2026-10-16", "releases": 1421 }
  ],
  "totalReleases": 5740,
  "changePct": 1,
  "truncated": false,
  "genres": {
    "gainers": [
      { "genre": "Knee-High Socks", "changePct": 700, "current": 8, "previous": 1 },
      { "genre": "Widow", "changePct": 700, "current": 16, "previous": 2 }
    ],
    "losers": [
      { "genre": "Female Soldier", "changePct": -100, "current": 0, "previous": 19 },
      { "genre": "Fisting", "changePct": -100, "current": 0, "previous": 5 }
    ]
  },
  "asOf": "2026-11-06T18:31:37.397Z"
}

volume は7日間のウィンドウごとに1件、古い順です。week は開始日。今日からさかのぼる ローリングウィンドウで、暦週ではありません。

weeks はウィンドウ数を決め、totalReleases はその合計です。changePct は最新と最古を 比較し、小数1桁です。

genres は直近 floor(weeks ÷ 2) 週を、その前の同じ長さの期間と比較します。両方で5件未満の ジャンルは除外され、小さなジャンルはノイズになりません。changePct は current 対 previous で、前半に発売がない場合は 100。gainers と losers は movers に 切り詰めます。

truncated: true はジャンルファセットが値上限に達したことを意味し、リストは上位だけです。

料金:1,000 コールあたり $0.60。weeks と movers は料金を変えません。ステータスコード:200、400、401、402、429。リファレンス:market。

料金

エンドポイントデフォルトのページ1,000 コールあたり
/analytics/idols/stats$0.60
/analytics/idols/ohlclimit=500$0.60
/analytics/idols/timeline$0.60
/analytics/idols/costarsnum=15$0.90
/analytics/leaderboardnum=20$1.20
/analytics/market$0.60

他のエンドポイントのサイズは料金に影響しません:limit、weeks、movers は無料で上げられます。

課金されるのは新しい 200 だけです。キャッシュヒット、エラー、縮退した回答は無料。 レスポンスは30〜60分キャッシュされ、その間の再呼び出しはヒットです。レート制限と 料金を参照してください。

よくあるエラー

401 キーなし。 ゲートは通し、ハンドラーが拒否します:

curl -s 'https://api.javinfo.dev/analytics/leaderboard'
{
  "defined": false,
  "code": "UNAUTHORIZED",
  "status": 401,
  "message": "Unauthorized"
}

401 不正なキー。 より早くゲートに拒否され、ボディは短くなります:

curl -s 'https://api.javinfo.dev/analytics/leaderboard' \
  -H "x-javinfo-key: jvi_not_a_real_key"
{ "error": "invalid api key" }

同じステータス、2つのボディ。分岐は code ではなくステータスコードで。

402 クレジット不足。 課金はありません。Retry-After: 3600 は目安で、チャージすればすぐ解除されます:

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

429 1分あたりの上限超過。 ハンドラーの前に適用され、Retry-After は秒単位です:

{ "error": "rate limit exceeded" }

上限はキーではなくアカウント単位です。レート制限を参照してください。

このページの内容