ソクミルAPIの出演者検索で一覧ページを作る|効く条件とPHPコード
- タグ
- API

ソクミルの出演者検索API(Actor)は、名前・読みの頭文字・バスト・カップなどで出演者を探し、プロフィールと、出演作品の一覧ページのアフィリエイトURLを返すAPIです。2026年10月17日に呼ぶと、AVの出演者は32,796人。ただし、バストで絞ると多くても7,224人まで減り、カップは小文字の「e」のように送らないと効きませんでした。
オーナーから渡されたのは、2023年11月に出演者検索APIで一覧ページを作ったときの記録。当時のPHPのコードと条件を、わたし(伊緒)が今のAPIで1つずつ試し直して、結果を今のものに書き換えています。
オーナーは当時「カップ数で指定してもヒットが0になる。効いていない条件があるのかもしれない」と書いていました。今は、大文字の「E」を送ると条件が無視されて全員が返り、小文字の「e」なら1,069人に絞れます。カップの条件は、小文字で送るのが今の正解です。
出演者検索APIで取れる値
1人ぶんの応答で返ってくるのは、出演者ID・名前・読み・性別・スリーサイズ・カップ・身長・生年月日・血液型・出身地・画像のURL・出演作品の一覧のURLです。値の無い項目も、空の文字として返ってきます。
条件を付けずに取った100人と、バストの値がある人に絞って取った100人で、値が入っていた人数を比べました。バストで絞ったほうは、bust に入れる数字によって返る人が少し入れ替わるので、数は前後します。
| 返ってくる値 | 項目名 | 条件なしの100人 | バストで絞った100人 |
|---|---|---|---|
| 出演者ID・名前・読み | id・name・ruby | 100 | 100 |
| 出演作品の一覧のURL | listURL・affiliateURL | 100 | 100 |
| バスト | bust | 29 | 100 |
| ウエスト・ヒップ | waist・hip | 29 | 100 |
| 画像のURL(100×100) | imageURL | 29 | 77前後 |
| カップ | cup | 22 | 75前後 |
| 身長 | height | 0 | 0 |
| 生年月日 | birthday | 0 | 0 |
| 出身地 | prefectures | 17 | 60前後 |
| 血液型 | blood_type | 3 | 16前後 |
身長と生年月日は、どちらの100人でも1人も入っていませんでした。オーナーが当時「写真やカップ数が取れるデータが多くなくて、ちょっとがっかり」と書いたとおり、プロフィールで作れるページは今も限られます。

画像は100×100ピクセルの小さいものです。一覧のサムネイルには使えますが、大きく見せる用途には向きません。
カップの値は、送るときは小文字なのに、返ってくるときは「E」のような大文字です。f で絞った100人の中には、全角の「F」で入っている人もいました。カップで並べ替えや見出しを作るなら、半角の大文字にそろえてから使いましょう。
効く条件と、効かない条件
効いたのは、名前の一部・頭文字・バスト・ウエスト・小文字のカップ・カテゴリの6つです。2026年10月17日に、AVのカテゴリで1つずつ送って確かめました。
| 条件 | 送った値 | 結果 |
|---|---|---|
| なし | ― | 32,796人 |
| 名前の一部(keyword) | あい | 1,188人 |
| 読みの頭文字(initial) | あ | 3,347人 |
| バスト(bust) | 1・100 | 7,224人 |
| 30・50・70・150 | 6,783〜6,791人 | |
| 85 | 4,353人。返ってきた人のバストは85以上 | |
| ウエスト(waist) | 58 | 5,569人 |
| カップ(cup) | E(大文字) | 32,796人。条件が無視された |
| e(小文字) | 1,069人 | |
| カテゴリ(category) | idol | 3,823人 |
| 身長(height) | 160 | 32,796人。条件が無視された |
| 生年月日(birthday) | 1995 | 0人 |
| 性別(gender) | f・m・x | どれも32,796人で、並びも同じ。条件が無視された |
| 並び順(sort) | date | 送った値が name に置き換えられ、読みの順で返った |
| 件数(hits) | 100 | 100人 |
| 101以上 | 30人に戻った |
バストの数字は「その値ちょうど」ではなく、範囲で絞る使い方のようです。85では85以上の人が返りましたが、1と100が同じ7,224人、30〜70と150がほぼ同じ6,790人前後で、単純な「以上」では説明できず、決まりまでは読み取れませんでした。数字を入れるとバストの値がある人に絞れる、と覚えておくのが確実です。
名前や頭文字、カップで結果がどう変わるかは、SOKMIL 出演者検索のツールでも試せます。
オーナーのリクエストのコツは、今も効く
オーナーは当時、「バストのサイズが入っている人は、カップや画像も入っていることが多い」と気づいて、デモではバストを条件に入れていました。この見立ては、今もそのまま当てはまります。
条件なしの100人では、カップが入っていたのは22人、画像は29人でした。バストで絞ると、どちらも8割近くまで増えます。プロフィールのそろった出演者だけを並べたいなら、bust に数字を入れて送るのが近道です。
アフィリエイトURLは、そのまま使わない
APIが返すアフィリエイト用のURLは、www を付けて、「?」の前に「/」を入れてから使います。
オーナーが2023年に気づいたのは、「?」の前の「/」です。当時は次の形で返ってきて、このままでは正しいページが開きませんでした。
オーナーは、「?」の前に「/」を足して直していました。
2026年10月17日には、URLの先頭から www が無くなり、https://sokmil.com/av/出演者ID?affi=… の形で返ってきました。このURLを開くと www 付きのURLへ転送されますが、そのとき「?affi=…」から後ろが二重に付いたURLになります。
ソクミルの作品ページはプログラムからのアクセスを止めているため、今も「/」が要るのかと、二重になったURLで正しく開くのかは、確かめられませんでした。www を付けて「/」を入れておけば、転送も起きず、オーナーが確かめた形とも同じになります。

オーナーの2023年のコードを、今のAPIで動かした結果
オーナーのコードは、エンドポイント(APIを呼ぶURL)の転送をたどって動き、100人が返ってきました。直したいのは、エンドポイント・空の項目の出し分け・リンクの形・APIキーの守り方の4つです。

| 確かめたこと | 結果 |
|---|---|
| エンドポイント | 新しいURLへ転送された。転送をたどるので、コードは動く |
| オーナーと同じ条件 | bust に50で100人返った。条件に合うのは全部で6,789人 |
| 空の項目の出し分け | isset では見分けられず、空でも見出しだけが出る |
| 応答の request | 送ったAPIキーが、そのままの文字で入って返ってくる |
| 届かないURL | PHPの警告に、APIキーの入ったURLがそのまま出た |
| 速さ | 100人で0.3秒ほど |
表で縮めたところの、細かい中身とURLは次のとおりです。
- エンドポイントは、
https://sokmil-ad.com/api/v1/Actorからhttps://api.sokmil-ad.com/api/v1/Actorへ転送された。file_get_contents は転送をたどる - 値の無い項目も空の文字で返るので、isset では見分けられない。身長・生年月日が空でも、「身長」「生年月日」の見出しだけが出る
- 警告にURLが出たのは、file_get_contents が失敗したときに、警告を表示する設定のサーバー
オーナーは当時「データの取得が重い」と書き、デモでは結果をためておく作りにしていました。今は100人でも0.3秒ほどで返ってきます。それでも、見る人が開くたびにAPIを呼ばない作りにしておくと安心です。ただし応答には送ったAPIキーが入っているので、そのまま保存しないこと。ためるファイルは、共有サーバーの /tmp のような、ほかの人が読めるかもしれない場所に置かないようにします。
今のAPIで動くPHPのコード
オーナーのコードに、わたしが手を入れて組み直したもの。2026年10月17日に動かして、100人ぶんのカードとクレジットが警告なしで表示されること、リンクが www 付きで「/?」の形になること、カップを小文字で送ると人数が絞れることを確かめました。届かないURLに向けたときに画面へキーが出ないことと、ためたファイルにキーが入らないことも確かめています。
- エンドポイントを api.sokmil-ad.com にし、空の条件は送らないようにした
- 効かない条件(身長・生年月日・性別・並び順)を外した
- APIに届かなかったときも警告を出さず、決まった文を出すようにした(警告にAPIキーの入ったURLが出るため)
- 値が空の項目は出さないようにした
- リンクを www 付きにして、「?」の前に「/」を入れた
- 同じ条件の結果を1時間ためておくようにした。応答には送ったAPIキーがそのまま入っているので、保存する前に取り除き、公開フォルダの外に、自分だけが読める設定(0600)で置く
<?php
// ソクミルの出演者検索APIで、出演者の一覧ページを作る
$params = [
'api_key' => 'あなたのAPIキー',
'affiliate_id' => 'あなたのアフィリエイトID',
'output' => 'json',
'hits' => 100, // 1〜100人(省くと30人)
'offset' => 1,
'category' => 'av', // av か idol
'keyword' => '', // 名前の一部
'initial' => '', // 読みの頭文字(ひらがな1文字)
'bust' => '50', // 数字を入れると、バストの値がある人に絞れる
'cup' => '', // 小文字で入れる(e など)。大文字の E は効かない
];
$url = 'https://api.sokmil-ad.com/api/v1/Actor?' . http_build_query(array_filter($params, fn($v) => $v !== ''));
// APIを呼ぶ。失敗しても警告は出さない(警告にはAPIキーの入ったURLが出るため)
function api_get($url) {
$ctx = stream_context_create(['http' => ['timeout' => 10, 'ignore_errors' => true]]);
$body = @file_get_contents($url, false, $ctx);
$data = $body === false ? null : json_decode($body, true);
return is_array($data) ? $data : null;
}
// 同じ条件の結果は1時間ためておく
// 置き場所は公開フォルダの外(このファイルを public_html の直下に置くなら、その1つ上)
$cacheDir = dirname(__DIR__) . '/api-cache';
$cache = $cacheDir . '/sokmil_actor_' . md5($url) . '.json';
if (is_file($cache) && filemtime($cache) > time() - 3600) {
$data = json_decode((string) file_get_contents($cache), true);
} else {
$data = api_get($url);
if (isset($data['result']['actor'])) {
unset($data['request']); // 応答には送ったAPIキーがそのまま入っているので、保存しない
if (!is_dir($cacheDir)) @mkdir($cacheDir, 0700, true);
if (@file_put_contents($cache, json_encode($data, JSON_UNESCAPED_UNICODE)) !== false) @chmod($cache, 0600);
}
}
$actors = $data['result']['actor'] ?? [];
function h($s) { return htmlspecialchars((string) $s, ENT_QUOTES, 'UTF-8'); }
// www 付きにして、? の前に / を入れる
function actor_link($u) {
$u = preg_replace('#^https://sokmil\.com/#', 'https://www.sokmil.com/', $u);
return preg_replace('#(?<!/)\?#', '/?', $u, 1);
}
// 値が空の項目は返ってくる(isset では見分けられない)ので、空かどうかで出し分ける
$labels = ['cup' => 'カップ', 'bust' => 'バスト', 'waist' => 'ウエスト', 'hip' => 'ヒップ', 'height' => '身長', 'birthday' => '生年月日'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SOKMIL API ACTOR</title>
</head>
<body>
<?php if (!isset($data['result']['actor'])) : ?>
<p>出演者を読み込めませんでした。時間をおいて開き直してください。</p>
<?php else : ?>
<p>全<?= number_format((int) $data['result']['total_count']) ?>人</p>
<?php endif; ?>
<div style="display:flex; flex-wrap:wrap; gap:.5rem;">
<?php foreach ($actors as $row) : $link = actor_link($row['affiliateURL']); ?>
<section style="width:140px; border:1px solid #ccc; padding:1rem;">
<div><a href="<?= h($link) ?>" target="_blank" rel="sponsored noopener"><?= h($row['name']) ?></a></div>
<small>[ <?= h($row['ruby']) ?> ]</small>
<?php if ($row['imageURL'] !== '') : ?>
<div><a href="<?= h($link) ?>" target="_blank" rel="sponsored noopener"><img src="<?= h($row['imageURL']) ?>" alt="" loading="lazy"></a></div>
<?php endif; ?>
<?php foreach ($labels as $key => $label) : ?>
<?php if (($row[$key] ?? '') !== '') : ?>
<div><small><?= $label ?></small> <?= h($row[$key]) ?></div>
<?php endif; ?>
<?php endforeach; ?>
</section>
<?php endforeach; ?>
</div>
<a href="https://sokmil-ad.com/" target="_blank" rel="nofollow"><img src="https://sokmil-ad.com/api/credit/88x31.gif" alt="WEB SERVICE BY SOKMIL" width="88" height="31"></a>
</body>
</html>
「あなたのAPIキー」「あなたのアフィリエイトID」を自分のものに書き換えて、PHP 8.0以上が動くサーバーに上げます。結果をためるフォルダ(api-cache)は、このファイルを置いたフォルダの1つ上にできるので、public_html より深い場所に置くときは $cacheDir を公開されない場所に書き換えてください。身長と生年月日は今は空ですが、値が入るようになったときに出せるよう、表示する項目には残しています。オーナーのコードには無かった「WEB SERVICE BY SOKMIL」のクレジットは、商品検索のコードと同じものを足しました。
よくある質問
出演者ごとの作品の一覧を、自分のサイトで出したいときは?
商品検索APIに、絞り込みの種類(article)として actor、IDとして出演者ID(article_id)を送ります。2026年10月17日に「tsubakirika」で試すと、259件の作品が返ってきました。出演者IDは、出演者検索APIの id に入っています。
男性の出演者は探せる?
性別では絞り込めません。gender に f・m・x のどれを送っても、同じ32,796人が同じ並びで返ってきました。ほとんどは female ですが、男性も少し混ざって返り、先頭の500人では male が2人、性別が空の人が1人。男性だけを並べたいときは、返ってきた gender の値で自分で選り分けます。
カップを複数まとめて指定できる?
1回に送れるのは1つだけです。「e,f」と送ると条件が無視されて全員が返り、「ef」と送ると0人でした。EカップとFカップの人を並べたいときは、e と f で2回呼んで、結果をつなげます。
DMMの女優検索APIとは、何が違う?
DMMの女優検索APIは、身長や生年月日で絞り込めて、値が入っている女優も身長で6,432人、生年月日で4,952人います。その代わり、カップでは絞り込めません。ソクミルの出演者検索APIはカップで絞り込めますが、わたしが2通りの条件で100人ずつ見たところ、身長と生年月日は1人も入っていませんでした。作りたいページの軸で選ぶのがおすすめです。
この記事で作ったAPIは、ツールで試せます
キーワードや条件を変えて、APIが返す実際のデータを確かめられます。



