DMM(FANZA)アフィリエイトではWebサービス(WebAPI)を使って様々な情報を取得できます。
そこで、APIを利用して商品情報の取得と簡易的な商品一覧ページのHTMLを出力するPHPのサンプルコードを書きました。
まずはじめに、DMMのWebAPIを利用する為にはDMMアフィリエイトへ登録し「アフィリエイトID」と「API ID」を取得する必要があります。
まだの方は以下を参考にDMMアフィリエイトへの登録とIDの取得を行なって下さい。
DMM API PHPサンプルコード
サンプルでは最低限必要なリクエストパラメータ(抽出条件)を指定し、20件のFANZAの動画作品の情報を取得して表示します。
※コード自体は全てのリクエストパラメータを指定できる様にしています
リクエストパラメータや取得データについてなど、コードの内容は後ほど詳しく説明しますので、コード上のコメントは少なめです。
以下がサンプルコードになります。
<?php // リクエストパラメータ $request_param = array( // 必須項目 'api_id' => '自分のAPI ID', 'affiliate_id' => '自分のアフィリエイトID(末尾990-999)', 'site' => 'FANZA', // オプション項目 'service' => 'digital', 'floor' => '', 'hits' => '', 'offset' => '', 'sort' => '', 'keyword' => '', 'cid' => '', 'article' => '', 'article_id' => '', 'gte_date' => '', 'lte_date' => '', 'mono_stock' => '', 'output' => 'xml', 'callback' =>'', ); // 「商品情報API」の基本リクエストURL $url = "https://api.dmm.com/affiliate/v3/ItemList?"; // リクエストURL生成 $first_flag = 1; //ループ初回判定フラグ foreach($request_param as $key => $value) { if($first_flag) { $url .= "{$key}={$value}"; $first_flag = 0; } else { $url .= "&{$key}={$value}"; } } // 商品データのXMLを取得しオブジェクトに変換 $xml = simplexml_load_file( $url ); // 取得した商品データを$result_dataに格納 $result_data = $xml->result->items->item; // データを取扱易くする為に$item_listに格納 foreach( $result_data as $item ){ $item_list = array( 'content_id' => $item->content_id, // 商品のコンテンツID 'title' => $item->title, // 商品タイトル 'affiliateURL' => $item->affiliateURL, // アフィリエイトリンク 'imageURL_list' => $item->imageURL->list, // 商品画像 リスト用 'imageURL_small' => $item->imageURL->small, // 商品画像 サイズ小 'imageURL_large' => $item->imageURL->large, // 商品画像 サイズ大 ); // HTML生成 $post_html = <<< EOM <div style="float:left;margin:5px;height:320px;width:20em;font-size:50%"> <a href="{$item_list['affiliateURL']}"><img src="{$item_list['imageURL_small']}" target="_blank" rel="noopener" alt="{$item_list['title']}"><br>{$item_list['content_id']}<br>{$item_list['title']}</a> </div> EOM; // HTML出力 echo $post_html."\n"; } ?>
サンプルの使い方
サンプルコードの「api_id」と「affiliate_id」を自分のIDに書き換えて実行すると、HTMLタグが出力されます。
- 本サンプルは商品情報をxmlで取得する事が前提なので、「output」は必ず「xml」にしてください
- また、サンプルはFANZAの商品情報を取得しますのでご注意下さい(18禁)
サンプルの出力結果
出力されたHTMLをブラウザで確認するとこの様なFANZAの商品一覧ページが表示されます。(モザイクでわかりにくくてすみません)
情報としては以下を出力しています。
- 商品画像
- 商品パッケージ画像のSサイズのURLを取得しimgタグのsrcに入れているます。画像は他にSサイズより小さい一覧サイズと最も大きいLサイズが取得可能
- 商品ID
- DMM( FANZA)側で独自に設定している商品IDを取得し表示しています。aタグにアフィリエイトURLを設定しています
- 商品タイトル
- 商品タイトルを取得し表示しています。aタグにアフィリエイトURLを設定しています
今回のサンプルで出力しているHTMLは力技で商品一覧ページの様な外観にしているので、かなり汚くてすみません。。
コードの説明
リクエストパラメータ(抽出条件)の設定
// リクエストパラメータ $request_param = array( // 必須項目 'api_id' => '自分のAPI ID', 'affiliate_id' => '自分のアフィリエイトID(末尾990-999)', 'site' => 'FANZA', // オプション項目 'service' => 'digital', 'floor' => '', 'hits' => '', 'offset' => '25', 'sort' => '', 'keyword' => '', 'cid' => '', 'article' => '', 'article_id' => '', 'gte_date' => '', 'lte_date' => '', 'mono_stock' => '', 'output' => 'xml', 'callback' =>'', );
取得する情報の抽出条件を設定します。
リクエストURLの作成をループで回したかったので配列に格納しました。
サンプルに汎用性を持たせる為に全てのリクエストパラメータを入力できる様にしています。
リクエストパラメータの説明
項目 | 説明 |
---|---|
api_id | webサービス登録時に割り振られたID |
affiliate_id | アフィリエイトID(末尾990-999) |
site | 一般は”DMM.com”、アダルトは”FANZA” |
service | フロアAPIの「/result/site/item/service/item/code」を指定 |
floor | フロアAPIの「/result/site/item/service/item/floor/item/code」を指定 |
hits | 取得件数「初期値:20 最大:100」 |
offset | 検索開始位置「初期値:1 最大:50000」 |
sort | ソート順「初期値:rank 他 “price”,”-price”,”date”,”review”,”match”」 |
keyword | 検索キーワード(UTF−8) |
cid | 商品に振られているcontent_id |
article | 絞り込み項目「女優:actress 作者:author ジャンル:genre シリーズ:series メーカー:maker」 |
article_id | 絞り込み項目のID(各検索APIから取得可能) |
gte_date | 日付以降に発売された商品に絞り込む「フォーマット: 2016-04-01T00:00:00」 |
lte_date | 日付以前に発売された商品に絞り込む(フォーマットはgte_dateと同じ) |
mono_stock | 「初期値:絞り込み無し 在庫あり:stock 予約受付中:reserve DMM通販のみ:mono マーケットプレイスのみ:dmp」 |
output | 出力形式「初期値:json」 |
callback | jsonで出力指定した場合にコールバック関数を指定するとJSONP形式で出力される |
リクエストURLの生成
// 「商品情報API」の基本リクエストURL $url = "https://api.dmm.com/affiliate/v3/ItemList?"; // リクエストURL生成 $first_flag = 1; //ループ初回判定フラグ foreach($request_param as $key => $value) { if($first_flag) { $url = $url."{$key}={$value}"; $first_flag = 0; } else { $url = $url."&{$key}={$value}"; } }
リクエストパラメータからリクエストURLを生成します。
リクエストパラメータはキー名だけで値が無くても問題ないので、配列のキー毎のデータの有無で分岐を入れていません(ズボラですみません笑)
データの取得
// 商品データのXMLを取得しオブジェクトに変換 $xml = simplexml_load_file( $url ); // 取得した商品データを$result_dataに格納 $result_data = $xml->result->items->item; // データを取扱易くする為に$item_listに格納 foreach( $result_data as $item ){ $item_list = array( 'content_id' => $item->content_id, // 商品のコンテンツID 'title' => $item->title, // 商品タイトル 'affiliateURL' => $item->affiliateURL, // アフィリエイトリンク 'imageURL_list' => $item->imageURL->list, // 商品画像 リスト用 'imageURL_small' => $item->imageURL->small, // 商品画像 サイズ小 'imageURL_large' => $item->imageURL->large, // 商品画像 サイズ大 );
simplexml_load_fileを使ってAPIにリクエストを投げデータを取得しオブジェクトに変換しています。
更にループを回しながら「$item_list[‘キー名’]」で取り出せる様に配列に格納しています。
なお、今回はサンプルを動作させるのに最低限必要な情報だけを扱っていますがもちろん他の情報も要素として追加すれば利用可能です。
「$result_data」をvar_dumpすれば構造と値がわかりますので、それを見ながら要素を追加してください。
元データにはオブジェクトリストもあったりするので、その場合は別途処理が必要になります。
また、APIリファレンスにも全データの情報があるのでよければ参照下さい。
HTMLの生成と出力
// HTML生成 $post_html = <<< EOM <div style="float:left;margin:5px;height:320px;width:20em;font-size:50%"> <a href="{$item_list['affiliateURL']}"><img src="{$item_list['imageURL_small']}" target="_blank" rel="noopener" alt="{$item_list['title']}"><br>{$item_list['content_id']}<br>{$item_list['title']}</a> </div> EOM; // HTML出力 echo $post_html."\n";
ループの中で商品毎にHTMLの生成と出力を行います。
ヒアドキュメントを利用し必要なHTMLタグをそのまま記入、必要な箇所に「$item_list[‘キー名’]}」で取得したデータを展開しています。
また、今回はHTMLの生成も出力もループの中で実施していますが、
// HTML生成 $post_html .= <<< EOM //←「.=」にして$post_htmlに追記する形に変更 <div style="float:left;margin:5px;height:320px;width:20em;font-size:50%"> <a href="{$item_list['affiliateURL']}"><img src="{$item_list['imageURL_small']}" target="_blank" rel="noopener" alt="{$item_list['title']}"><br>{$item_list['content_id']}<br>{$item_list['title']}</a> </div> EOM; } // HTML出力(ループの外に出す) echo "<h1>商品一覧</h1>\n"; //←商品情報の前にタイトルを追記 echo $post_html."\n"; ?>
↑この様にループの外で実行する事で、商品情報一覧の前後に好きにタグ等を追加できます。
サンプルを本番環境に組み込む場合
サンプルコードで動的サイトを作ったりWordpressに組み込んだりする場合、以下にご注意下さい
- 今回は簡単なサンプルなのでエスケープ処理を何も入れていませんが、動的ページを作ったりWordpressに組み込むなど環境に合わせたエスケープ処理が必要になります
- 動的にページを生成する様なサイトを作る場合は、APIへ過度なリクエストを防ぐ為にも、取得したデータをキャッシュする様な設計をお願い致します
まとめ
今回初めてDMM APIを利用しましたが、結構作り込まれていて比較的簡単に取り扱う事ができたので、サンプルコードもめちゃくちゃ簡単なもので済みました。
ただ、データによってはオブジェクトリストだったりする為、そのあたりを網羅しようと思うともっと複雑なコードになってきます。
今回も本当はサンプル画像の取得と出力についても取り扱おうと思ったのですが、サンプル画像のURLはオブジェクトリストなのでそれ用の処理が必要で記事ボリュームが増えてしまうので省きました。
という事もあり、DMM APIの記事は今回のサンプルコードを元にどんどん機能を追加していく連載モノにします。
今回出力したHTMLは商品一覧ページ的なものでしたが、次回はサンプル画像とサンプル動画を取得して各々の商品詳細ページを作成しようと思います。
コメント