DMM 女優検索APIの使い方|取れる項目と動くPHPコード
- タグ
- API

DMMの女優検索API(ActressSearch)は、名前・頭文字・スリーサイズ・身長・生年月日で女優を探して、プロフィールと作品一覧のアフィリエイトURLを返すAPIです。2026年10月17日に呼ぶと登録は60,696人。ただし、バストが入っているのは8,791人、身長は6,432人で、プロフィールで絞り込める女優は、全体の1割前後しかいません。
1割前後、という数字には、数えたわたし(記事担当の伊緒)も驚きました。もとにしたのは、2023年12月にオーナーが女優検索APIを試して書いた記録とPHPのコードで、今のAPIで動かし直し、項目ごとの埋まり具合まで数えて書き直しています。
当時のコードは、直さなくても今のAPIで動きます。違っていたのは、返ってくる作品一覧のURLの種類と、データの件数。

女優検索APIで取れる項目
1人ぶんの応答で返ってくるのは、女優ID・名前・読み・スリーサイズ・カップ・身長・生年月日・血液型・趣味・出身地・画像のURL・作品一覧のURLです。ただし、全員にすべての項目が入っているわけではありません。
60,696人を100人ずつ全部取って、項目ごとに値が入っている人数を数えました。
| 項目 | キー | 値が入っている人数 | 全体に対する割合 |
|---|---|---|---|
| 画像 | imageURL | 16,852人 | 約28% |
| バスト | bust | 8,791人 | 約14% |
| 身長 | height | 6,432人 | 約11% |
| カップ | cup | 6,337人 | 約10% |
| 生年月日 | birthday | 4,952人 | 約8% |
| 趣味 | hobby | 3,955人 | 約7% |
| 血液型 | blood_type | 3,743人 | 約6% |
| 出身地 | prefectures | 3,399人 | 約6% |
空の項目は、null か空の文字列で返ってきます。画像が無い女優は、imageURL の項目そのものがありません。表示するときは、値があるかを1項目ずつ確かめる作りにしておくと安全です。
作品一覧のURL(listURL)は、動画(digital)・月額動画(monthly)・DVD通販(mono)の3つが返ってきます。オーナーのコードにはDVDレンタル(rental)の分岐もありましたが、今の公式リファレンスの項目表には載っておらず、取ったデータにも出てきませんでした。
絞り込みに使えるパラメータ
絞り込みに使えるのは、頭文字・女優ID・キーワード・バスト・ウエスト・ヒップ・身長・生年月日の8つです。カップと出身地では絞り込めません。
| 絞り込みたいもの | パラメータ | 書き方の例 |
|---|---|---|
| 頭文字(50音) | initial | あ |
| 女優ID | actress_id | 15365 |
| 名前の一部 | keyword | いちか |
| バスト | gte_bust・lte_bust | gte_bust=90 で90cm以上 |
| ウエスト・ヒップ・身長 | gte_waist・lte_hip・gte_height など | バストと同じ |
| 生年月日 | gte_birthday・lte_birthday | gte_birthday=1995-01-01 で1995年1月1日以降生まれ |
| 並び順 | sort | -birthday(生年月日の新しい順)・bust・id など |
| 1回に取る人数 | hits | 初期値20・最大100 |
試していて、つまずきそうなところが3つありました。
- 生年月日はハイフン入りで書く。リファレンスの説明には「yyyymmddの形式」とありますが、
19950101と送るとエラー(The gte_birthday field is not in the correct format.)になりました。1995-01-01なら通ります hitsを101以上にするとエラー。The hits field must contain a number less than or equal to 100.が返ります。全員を取りたいときは、100人ずつoffsetをずらして呼びます- カップ(
cup=Gなど)は、送っても無視される。エラーにはならず、60,696人がそのまま返ってきます。カップで分けたいときは、取ったあとに自分で振り分けます
当時オーナーが書いていたとおり、体型や年齢の条件で女優を引けるのは、このAPIの強みです。たとえば、バスト90cm以上は2,274人、1995年1月1日以降生まれでバスト90cm以上は106人でした。

2023年のPHPコードを、今のAPIで動かした結果
オーナーが当時書いたコードは、APIのIDを入れ替えるだけで、今も動きました。100人ぶんの名前・プロフィール・作品一覧へのリンクが並び、総データ数は60,696件と表示されます。
そのうえで、今のAPIに合わせて、わたしが次の4か所を直しました。直したあとのコードも、手元のサーバーで動くことを確かめています。
- 画像のURLを
https://に置き換える。APIが返す画像のURLはhttp://で始まります。httpsのサイトにhttp://の画像を置くと、ブラウザが読み込まないことがあります。https://に変えても、同じ画像が開きました - 画面に出す値をエスケープする。名前や趣味の文字をそのまま出さず、
htmlspecialcharsを通します - DVDレンタルの分岐を外す。今は
rentalが返ってこないためです - エラーの理由を読めるようにする。当時のコードは、パラメータが間違っているとPHPの警告が出るだけで、理由が分かりませんでした。しかもその警告には、API IDの入ったURLがそのまま出ます。直したコードでは警告を止め、APIが返すエラーの理由だけを表示します
<?php
// エンドポイント
$url = "https://api.dmm.com/affiliate/v3/ActressSearch";
// パラメータ(使わない条件は空のままでよい)
$params = [
"api_id" => "あなたのAPI ID",
"affiliate_id" => "あなたのアフィリエイトID", // 末尾が990〜999のもの
"gte_bust" => "", // 例:90 ならバスト90cm以上
"lte_bust" => "",
"gte_height" => "",
"lte_height" => "",
"gte_birthday" => "", // 例:1995-01-01(ハイフンが要る)
"lte_birthday" => "",
"keyword" => "",
"hits" => "100", // 100まで。101にするとエラー
"offset" => "1",
"sort" => "-birthday",
"output" => "json"
];
// 画面に出す値は必ずエスケープする
function h($s) { return htmlspecialchars((string) $s, ENT_QUOTES, 'UTF-8'); }
// エラーのときも、APIが返す理由(JSON)を読めるようにする
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 30]]);
// @ で、つながらないときの警告を止める(警告には API ID の入った URL がそのまま出る)
$json = @file_get_contents($url . "?" . http_build_query(array_filter($params, "strlen")), false, $context);
$data = json_decode((string) $json, true);
if (($data['result']['status'] ?? '') != '200') {
// エラーの応答は request の中に API ID を返すので、result の中の理由だけを出す
exit('APIのエラー:' . h(json_encode($data['result']['errors'] ?? $data['result']['message'] ?? 'APIにつながりませんでした', JSON_UNESCAPED_UNICODE)));
}
$total = $data['result']['total_count'];
$rows = $data['result']['actress'];
// 項目名と、APIのキー
$profile = [
"女優ID" => "id", "バスト" => "bust", "カップ" => "cup", "ウエスト" => "waist",
"ヒップ" => "hip", "身長" => "height", "生年月日" => "birthday",
"血液型" => "blood_type", "趣味" => "hobby", "出身地" => "prefectures",
];
$lists = ["digital" => "動画", "monthly" => "月額動画", "mono" => "DVD通販"];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DMM API ACTRESS</title>
</head>
<body>
<p>総データ数 <?= h($total) ?>件</p>
<div style="display:flex;flex-wrap:wrap;">
<?php foreach ($rows as $row) : ?>
<section style="width:33%;display:flex;gap:1rem;padding:1rem;box-sizing:border-box;">
<div>
<?php $img = $row['imageURL']['large'] ?? $row['imageURL']['small'] ?? ''; ?>
<?php if ($img !== '') : ?>
<img src="<?= h(str_replace('http://', 'https://', $img)) ?>" alt="<?= h($row['name']) ?>" width="100">
<?php endif; ?>
<?php foreach ($lists as $key => $label) : ?>
<?php if (!empty($row['listURL'][$key])) : ?>
<div><a href="<?= h($row['listURL'][$key]) ?>" target="_blank" rel="sponsored noopener"><?= $label ?></a></div>
<?php endif; ?>
<?php endforeach; ?>
</div>
<div>
<div><?= h($row['name']) ?> <small>[ <?= h($row['ruby']) ?> ]</small></div>
<?php foreach ($profile as $label => $key) : ?>
<?php if (!empty($row[$key])) : ?>
<div><?= $label ?> : <?= h($row[$key]) ?></div>
<?php endif; ?>
<?php endforeach; ?>
</div>
</section>
<?php endforeach; ?>
</div>
<a href="https://affiliate.dmm.com/api/"><img src="https://p.dmm.co.jp/p/affiliate/web_service/r18_135_17.gif" width="135" height="17" alt="WEB SERVICE BY FANZA" /></a>
</body>
</html>
api_id と affiliate_id は、ご自身のものに書き換えてください。アフィリエイトIDは、末尾が990〜999のものでないとエラーになります。
最後の行の画像は、DMMのAPIを使ったサイトに出すよう決められているクレジットです。公式のクレジット表示のページにあるHTMLを、変えずにそのまま使います。
2023年のオーナーの見立てを、今の数字で見直すと
当時オーナーは、登録が57,125件(2023年12月)あるものの、「有効なデータは6,000〜8,000件くらい」と見ていました。今の数字に当てはめても、この見立ては大きく外れていません。
| 2023年12月(オーナー) | 2026年10月17日(伊緒) | |
|---|---|---|
| 登録の人数 | 57,125件 | 60,696件 |
| 有効なデータ | 6,000〜8,000件くらい | バストあり8,791人・身長あり6,432人 |
当時の6,000〜8,000件は、offset を変えて調べた見立てです。今、バスト・身長・生年月日・出身地の4つがそろうのは3,010人でした。
もう1つ、当時「頭文字(たとえば「あ」)で呼ぶと、顔写真の無いデータも混ざる」とも書いていました。今も同じで、画像がある女優は全体の約28%。頭文字「あ」の5,983人で見ても、バストが入っているのは1,011人だけでした。
女優の一覧ページを作るなら、頭文字で全員を並べるより、gte_bust=1 のように「値が入っている人だけ」が返る条件を足すほうが、中身のあるページになります。バストが1cm以上、という条件にすれば、プロフィールの無い女優が外れるからです。

オーナーが「ネタに使えそう」と書いていた趣味と出身地は、使うなら少し注意が要ります。趣味が入っているのは3,955人、出身地は3,399人で、どちらも全体の1割に届きません。プロフィールが充実した女優のページで、話題の1つとして使うくらいがちょうどいいと思います。
女優IDで、その女優の作品を取るには
女優検索APIで分かった女優IDを、商品情報API(ItemList)の article=actress と article_id に入れると、その女優の作品だけが返ってきます。女優のプロフィールページの下に、作品の一覧を並べたいときの組み合わせです。

DMM 女優検索のツールで女優IDを調べて、FANZA・DMM 商品検索のツールの「絞り込みの種類:女優」「絞り込みのID」に入れると、ブラウザだけで流れを確かめられます。
よくある質問
カップ数で女優を絞り込める?
APIでは絞り込めません。cup を送っても無視され、全員が返ってきます。カップは応答の項目には入っているので、取ったあとにPHPなどで振り分けます。カップが入っているのは6,337人でした。
出身地ごとの女優の一覧は作れる?
APIに出身地の条件は無いので、全員を100人ずつ取ってから、prefectures の値で分けます。出身地が入っているのは3,399人で、47都道府県すべてに1人以上いました。ただ、東京都の1,518人に対して、徳島県と鳥取県は1人だけです。「東京」と「東京都」のように書き方がそろっていない値や、海外の地名も混ざっているので、分ける前に表記を整えます。
1回に何人まで取れる?
100人までです。hits を101以上にするとエラーになります。60,696人を全部取るには、offset を1・101・201…とずらしながら、607回の呼び出しが必要です。商品情報APIは offset が50,000までですが、女優検索APIは50,000を超えても最後の1人まで取れました。
女優を人気の順に並べられる?
女優検索APIだけでは難しいです。並び順に選べるのは、名前・バスト・ウエスト・ヒップ・身長・生年月日・女優IDの7つで、人気の順はありません。人気で並べたいときは、商品情報APIを sort=rank(人気順)で取り、作品に出ている女優を数えます。
この記事で作ったAPIは、ツールで試せます
キーワードや条件を変えて、APIが返す実際のデータを確かめられます。



