dmm-ranking-lite
# DMM Ranking Lite
抓取 DMM/FANZA 公共排行榜并输出 Top10,默认中文说明 + 日文原片名。
## When To Use
- 用户要 DMM/FANZA `日榜`、`周榜`、`月榜`
- 用户明确要 `Top10`(或可改为 TopN)
- 用户要求无 API Key 的公开页面抓取
## Inputs
- `term`: `daily` | `weekly` | `monthly`
- `count`: 默认 `10`
- `output_lang`: `zh-CN`(保留日文原片名)
## Output Format
必须使用编号块,不要表格:
```text
1.
- 片名(日文):...
- 中文:...
- 封面:...
2.
- 片名(日文):...
- 中文:...
- 封面:...
```
## Workflow
1. 打开榜单页面:
- `https://video.dmm.co.jp/av/ranking/?term=<term>`
2. 如果出现年龄确认,点击 `はい`
3. 使用 `browser(action="act", request.kind="evaluate")` 执行提取脚本
4. 按 rank 升序取前 `count` 条
5. 输出为编号列表,字段固定为:
- `片名(日文)`
- `中文`
- `封面`
6. 结束后关闭标签页:`browser(action="close")`
## Extraction Snippet
```javascript
() => {
const items = Array.from(document.querySelectorAll('main ul > li'));
const rows = [];
for (const li of items) {
const rankMatch = (li.textContent || '').match(/(\d+)位/);
if (!rankMatch) continue;
const rank = Number(rankMatch[1]);
const link =
li.querySelector('h2 a[href*="/av/content/?id="]') ||
li.querySelector('a[href*="/av/content/?id="]');
if (!link) continue;
const href = link.getAttribute('href') || '';
const idMatch = href.match(/[?&]id=([^&]+)/);
const title = (link.textContent || '').replace(/\s+/g, ' ').trim();
const cover = Array.from(li.querySelectorAll('img'))
.map((img) => img.getAttribute('src') || img.getAttribute('data-src') || img.currentSrc || '')
.find((src) => /pics_dig|digital\/video|awsimgsrc\.dmm\.co\.jp/.test(src));
rows.push({
rank,
id: idMatch ? idMatch[1] : null,
title,
content_url: new URL(href, location.origin).href,
cover_url: cover ? new URL(cover, location.origin).href : null,
});
}
rows.sort((a, b) => a.rank - b.rank);
return rows;
}
```
## Translation Rules
- `片名(日文)` 必须保留原文,不可改写
- `中文` 采用简洁自然中文,避免机翻腔
- 标题过长时可适度压缩,不改变核心含义
- 明显敏感措辞可中性化,但不要错译
## Error Handling
- 页面结构变更:先 `snapshot` 检查节点,再调整 selector
- 未拿到 `cover_url`:输出 `封面:无`
- 抓取不足 10 条:按实际条数输出,并说明“本次仅抓取到 N 条”
- 无法通过年龄确认:重试一次后返回失败原因
## Notes
- 仅抓取公开页面,不需要 DMM API 凭据
- 默认 Top10,如需 TopN 请在结果截取阶段改为 `rows.slice(0, N)`
- 若页面改版频繁,优先保持输出格式稳定,必要时更新提取脚本
标签
skill
ai