分析 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 のスタースコア。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
q | string | はい | /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
出演者のキャリアのローソク足です。測定値は累計発売数を日・週・月のバケットに分けたもの。 終値が横ばいなら発売なし、上昇なら新作あり。
価格ではなく、再生回数の履歴もありません。長期に観測できるのは発売時期だけです。
| パラメータ | 型 | デフォルト | 範囲 |
|---|---|---|---|
q | string | 必須 | /idols の ID または slug |
bucket | "day" | "week" | "month" | "week" | |
limit | integer | 500 | 10〜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つの値:デビュー、最新、最多の月、最長の 間隔。すべて発売日から。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
q | string | はい | /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回のファセットクエリでリストを作り、 本人は除きます。
| パラメータ | 型 | デフォルト | 範囲 |
|---|---|---|---|
q | string | 必須 | /idols の ID または slug |
num | integer | 15 | 1〜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 |
| パラメータ | 型 | デフォルト | 範囲 |
|---|---|---|---|
range | integer | 90 | 7〜365、日数 |
metric | "releases" | "rating" | "momentum" | "releases" | |
num | integer | 20 | 1〜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 カタログの週次発売量と、期間内で伸びる・落ちるジャンルです。
| パラメータ | 型 | デフォルト | 範囲 |
|---|---|---|---|
weeks | integer | 12 | 2〜52 |
movers | integer | 10 | 1〜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/ohlc | limit=500 | $0.60 |
/analytics/idols/timeline | $0.60 | |
/analytics/idols/costars | num=15 | $0.90 |
/analytics/leaderboard | num=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" }上限はキーではなくアカウント単位です。レート制限を参照してください。