跳到正文
javinfo

分析 API

演员统计、K 线、合作演员、排行榜和每周市场发行量。

/analytics 把目录变成数字:作品量、评分和工作室分布、合作演员、排行榜和每周市场发行量。数字来自发行日期、javlibrary 评分和已有的分面计数。不读播放量,不编造。

六个 GET 端点,都需要密钥。每 1,000 次调用 $0.60 起;排行榜和合作演员图随 num 增长。

演员 id

四个端点接受 q:统计、K 线、时间线和合作演员。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

一次调用拿到资料卡:作品量、跨度、评分、类型和工作室分布,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,相加会放大约四倍。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 是两次连续发行间最长的间隔天数,不是平均值。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。

K 线 — /analytics/idols/ohlc

演员生涯的蜡烛图:累计发行数,按天、周或月分桶。收盘走平表示该桶没有发行;上升表示有新作品。

不是价格,背后也没有播放量历史。唯一能长期观察的是发行时间,K 线画的就是它。

参数类型默认值范围
qstring必填来自 /idols 的 id 或 slug
bucket"day" | "week" | "month""week"
limitinteger50010–2000

limit 是最多 K 线数。桶数超过时,保留最新的,丢掉最旧的。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。十二根月 K 线覆盖最近一年,更旧的丢掉(K 线和 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"
}

K 线字段:

字段含义
t桶的起点,YYYY-MM-DD。周从周一开始,月从 1 号开始。
o桶内第一次发行时的累计发行数。
h桶内达到的最高累计数。
l桶内的最低累计数。
c桶内最后一次发行时的累计数。
v桶内的观察次数。

目录序列中,一次观察就是一条发行记录,v 是桶内发行数。装两次发行的桶在第一次之后开盘、第二次之后收盘,并报告 v: 2。

metric 和 source 说明拿到哪个序列。每日快照任务记录至少两天后,端点切换到 metric: "star_power" 和 source: "snapshots":K 线测量明星分数变化,按 1,000 缩放,totalReleases: 0,truncated: false。

changePct 是从第一个开盘到最后一个收盘的变化,限定在拿回的 K 线内。ema 是收盘价的 7 周期指数移动平均,长度与 candles 相同。

truncated: true 表示为适配 limit 丢掉更旧的 K 线;最新的始终在。totalReleases 是完整生涯计数,与 limit 无关。调高 limit 可拿到整条曲线,最多 2000 根。

费用:每 1,000 次调用 $0.60。状态码:200、400、401、402、404、429。 参考:idolOhlc。

时间线 — /analytics/idols/timeline

每月发行数,加上资料页的四个值:出道、最近发行、最高产月份和最长间隔。全部来自发行日期。

参数类型必填说明
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 是连续发行日期间的最大间隔。

latest 来自独立最新优先查询,truncated 为 true 时仍准确。该标志表示升序分页碰到 10,000 行;月度列表停在新发行之前。

费用:每 1,000 次调用 $0.60。状态码:200、400、401、402、404、429。 参考:idolTimeline。

合作演员 — /analytics/idols/costars

合作对象,按共同影片数排名。一次分面查询生成列表;本人不出现在结果里。

参数类型默认值范围
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 统计两个名字都出现的影片数。

费用:num=15 时每 1,000 次调用 $0.90。num 不超过 10 时 $0.60;之后等比上涨,num=50 时 $3.00。状态码:200、400、401、402、404、429。参考:idolCostars。

排行榜 — /analytics/leaderboard

在窗口内按三种指标之一排名。

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 指标只排至少有一部评分影片的演员,并按评分数量把平均分拉向 3.5/5 先验,所以单个 10/10 拿不到榜首。

momentum 用本窗口发行数除以上一个等长窗口。上一个窗口没有发行时比值为 2,得分 0.667。并列按发行数排序。

name 是分面键:索引有拉丁名时用拉丁名,否则用日文名。nameJa 目前始终为 null。

truncated: true 表示姓名分面碰到值上限:计数只覆盖头部姓名。

枚举值不对是 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 天窗口一条,最旧在前;week 是起始日期。这是从今天回退的滚动窗口,不是自然周。

weeks 决定窗口数;totalReleases 是总和。changePct 比较最新和最旧窗口,保留一位小数。

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

同一状态,两种响应体。按状态码分支,不按 code。

402 额度不足。 不扣费。Retry-After: 3600 只是建议;充值后立刻恢复:

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

429 超过每分钟上限。 在处理器之前生效,Retry-After 以秒为单位:

{ "error": "rate limit exceeded" }

上限按账户计算,不按密钥。见速率限制。

本页内容