天然パーマです。

PHPでDMM Webサービスを叩いてメロディー・雛・マークスを出す

どうしても「メロディー・雛・マークス」を出したい。それもPHPで。

DMM Webサービスを利用すれば、FANZAの情報が取ってこれる。DMM Webサービスdmm.com、つまりNOT アダルトな一般の商品情報も取得できるが、dmm.co.jp、つまりFANZAの結果が充実してて、中でも女優検索APIなんてあってオシャレ!利用するためには、アフィリエイト利用登録をしてゲットできるAPI IDとアフィリエイトIDが必要です。

なんでPHPか?は置いておいて、おとといまでphp -SでビルトインHTTPサーバが動くことすら知らなかった初心者です(なんか昔書いてた記憶があるけど…)。お手柔らかにお願いします。

 $ php dmm.php 雛 

と実行すると「雛」をキーワードとしてFANZAから検索してきて、50名分の女優名とルビを表示するというしごく簡単なもの。キーワードはこのようにコマンドライン引数で渡すものとし、もしなかった場合のデフォルトは空とする(「あ」からAV女優全員が検索される)。

コマンドライン引数を解釈するためにargcargvという定義済みの変数を使う。APIへのアクセスは、パラメータを含んだURLに対しGETリクエストをかけて、返ってきたJSONをデコードする。パラメータは定数で定義したAPI IDとアフィリエイトIDをapi_idaffiliate_idに入れて、hitskeywordで返却する女優の人数とキーワードを指定する。クエリ文字列を生成するのにPHPでは、基本モジュールのURLsにあるhttp_build_query関数を使うとよいみたい。HTTPのアクセスにはcURLを利用した。JSONのデコードをする必要があるが、これもまたPHP標準でjson_decodeという関数がある。標準バンザイ!

以下コード。

 <?php

const API_ID = 'YOUR_API_ID';
const AFFILIATE_ID = 'YOUR_AFFILIATE_ID';

$keyword = $argc > 1 ? $argv[1] : '';

$url = 'https://api.dmm.com/affiliate/v3/ActressSearch';
$params = array(
    'api_id' => API_ID,
    'affiliate_id' => AFFILIATE_ID,
    'hits' => 50,
    'keyword' => $keyword
);
$query = http_build_query($params);
$url .= "?" . $query;

echo "Search actresses from dmm.co.jp - Keyword: $keyword\n";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

$data = json_decode($content);
$actresses = $data->result->actress;

foreach ($actresses as $actress) {
    echo sprintf("- %s(%s)\n", $actress->name, $actress->ruby);
}

vimシンタックスハイライト、派手だな。

以下スクショ。

f:id:kamawada:20191226172909p:plain

メロディー・雛・マークスでた!黒船襲来!