【DMM API】「商品情報API」でデータを取得・出力する例|WordPress・PHP

「DMMアフィリエイト」のWebサービスでは、DMM内の商品データを扱えるAPIを提供しています。

今回は、そのAPIの中の「商品情報API」を利用し、WordPressのサイトでDMM.comの商品情報を取得・出力する例となります。

「商品情報API」でDMM内の商品情報を取得し出力する例

DMM APIのアフィリエイトID、API IDを取得

DMMのAPIでアフィリエイトを利用するには、「アフィリエイトID」と「API ID」が必要となります。そのため、まずDMMアフィリエイトの登録とAPIの利用登録をします。

DMMアフィリエイトの登録とAPIの利用登録については、それぞれ以下のリンク先を参考にしてみてください。

DMM内の商品情報を取得し出力

例では、WordPressでDMM APIの「商品情報API 」を利用し、DMM.com内のレンタルの簡単な商品データを3件、表示します。

また、表示する商品データは、タイトルと画像(DMM内の商品ページへのリンク付き)となります。

以下、ソースコードの例となり商品情報を出力する箇所に記述します。

<?php
// リクエストURLのパラメータで指定する値を変数に格納
$api_id    = "xxxxxxxxxxxxx"; // 自身のAPI IDを指定
$aff_id = "xxxxxxxxxxxxx"; // 自身のアフィリエイトIDを指定
$site      = "DMM.com"; // サイト名を指定
$service   = "rental"; // サービス名を指定
$hits      = "3"; // 取得する商品数を指定
$format    = "xml"; // 出力形式を指定
// 「商品情報API」のリクエストURL
$url = "https://api.dmm.com/affiliate/v3/ItemList?api_id={$api_id}&affiliate_id={$aff_id}&site={$site}&service={$service}&hits={$hits}&output={$format}";

// XMLデータを、PHPで扱えるようにオブジェクトに変換
$xml = simplexml_load_file( $url );

// 取得した商品データの配列を変数$item_listに格納
$item_list = $xml->result->items->item;
foreach( $item_list as $item ){
    // 商品のタイトル・画像・アフィリエイトリンクを取得
    $title = $item->title;
    $image = $item->imageURL->small;
    $link = $item->affiliateURL;
    // 商品情報を出力する際のHTML
    echo '<div><a href="' . esc_url( $link ) . '" target="_blank">';
    echo '<p>' . esc_html( $title ) . '</p>';
    echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $title ) . '">';
    echo '</a></div>';
}
?>

取得したAPIのデータをキャッシュする場合

上記例の場合、アクセス時に毎回APIからデータを取得しますが、取得したデータをデータベースへキャッシュ(一時保存)することもできます。

詳しくは、以下のリンク先を参考にしてみてください。

simplexml_load_file関数以外で外部データを扱う方法

今回の例では外部データをsimplexml_load_file関数で扱いましたが、cURL関数を使い外部データを取得する方法もあります。

また、cURL関数ではデータ転送時にさまざまなオプションを設定することも可能です。詳しくは、以下のリンク先を参考にしてみてください。

SDKを利用する場合

DMM のAPIではSDKを利用することも可能です。詳しくは以下のリンク先を参考にしてみてください。

SDK - DMM API

ソースコードの説明

以下、例のソースコードのポイントとなる箇所の説明となります。

リクエストURLを指定

以下の箇所では、API ID・アフィリエイトIDや商品データを取得する条件のパラメータを指定し、リクエストURLを作成します。

例のソースコード2行目からの箇所

// リクエストURLのパラメータで指定する値を変数に格納
$api_id    = "xxxxxxxxxxxxx"; // 自身のAPI IDを指定
$aff_id = "xxxxxxxxxxxxx"; // 自身のアフィリエイトIDを指定
$site      = "DMM.com"; // サイト名を指定
$service   = "rental"; // サービス名を指定
$hits      = "3"; // 取得する商品数を指定
$format    = "xml"; // 出力形式を指定
// 「商品情報API」のリクエストURL
$url = "https://api.dmm.com/affiliate/v3/ItemList?api_id={$api_id}&affiliate_id={$aff_id}&site={$site}&service={$service}&hits={$hits}&output={$format}";

「商品情報API」の必須パラメータ

xxxxxxxxxxxxxとなっている$api_id と$aff_idの変数の値には、それぞれ自身の「API ID」と「アフィリエイトID」を指定します。また、「商品情報API」のリクエストURLでは、以下の3つパラメータは必須となります。

  • api_id(API ID )
  • affiliate_id(アフィリエイトID )
  • site(サイト名)

パラメータserviceについて

例では、パラメータserviceの値にはrentalを指定し「DVD/CDレンタル」のデータを取得しています。その他のデータを取得したい場合には、DMM APIの「フロアAPI」からパラメータserviceの値 に指定できるデータを確認できます。

「フロアAPI」の確認方法については以下のリンク先を参考にしてみてください。

simplexml_load_file|XMLデータをオブジェクトに変換

例で作成したDMM APIのリクエストURLは、商品情報をXMLデータで返します。

そのため、以下の箇所では、XMLデータをPHPで扱えるようにsimplexml_load_file関数を使用してオブジェクトに変換します。

また、JSONデータの商品情報を扱う場合や、データを連想配列に変換する場合は、以下のリンク先を参考にしてみてください。

例のソースコード12行目の箇所

// XMLデータを、PHPで扱えるようにオブジェクトに変換
$xml = simplexml_load_file( $url );

例では、XMLデータをsimplexml_load_file関数で扱いましたが、cURL関数を使い、外部データを取得する方法もあります。

cURL関数では、データ取得時にさまざまなオプションを設定することも可能です。詳しくは、以下のリンク先を参考にしてみてください。

商品情報を取得・出力

以下の箇所では、オブジェクトに変換した商品情報のデータから必要な情報を取得し、ループを使いHTMLとして出力します。また、取得したデータ出力する際には、データに応じてエスケープしています。

例のソースコード15行目からの箇所

// 取得したデータの配列を変数$item_listに格納
$item_list = $xml->result->items->item;
foreach( $item_list as $item ){
    // 商品のタイトル・画像・アフィリエイトリンクを取得
    $title = $item->title;
    $image = $item->imageURL->small;
    $link = $item->affiliateURL;
    // 商品情報を出力する際のHTML
    echo '<div><a href="' . esc_url( $link ) . '" target="_blank">';
    echo '<p>' . esc_html( $title ) . '</p>';
    echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $title ) . '">';
    echo '</a></div>';
}

まとめ

以上がDMMの「商品情報API」を利用し、WordPressのサイトでDMM.comの商品情報を取得・出力する例となります。

また、実際にAPIを利用する場合には、関数やクラス内で利用すると便利だと思います。

例で使用したDMMの「商品情報API」では、他にも指定できるリクエストパラメータや、取得できる情報(レスポンスフィールド)はあります。詳しくは以下の参考サイト内を確認してみてください。

参考サイトなど

コメント欄

  1. めまい様

    こんにちは。はじめまして。 有用な情報ありがとうございます。 もしよろしかったら教えてください。 sampleImageURLやactressのような、複数情報が入っているものはどう表示すればいいのでしょうか? 例えば以下のようにすると、一個しかデータが表示されないのです。 $sampleimg = $item->sampleImageURL->sample_s->image->item; $actress = $item->iteminfo->actress->item->name; 初心者ですいません。 どうぞよろしくおねがいします。

    1. 当記事執筆者

      めまい様
      コメントありがとうございます。

      以下のようなことでしょうか?
      例えばrubyを取得する場合
      $actress = $item->iteminfo->actress->item->ruby;

      1. めまい様

        ご返信ありがとうございます。 ちゃんと伝わらず、すいません。 例えば以下の商品の場合のご説明いたします。 http://www.dmm.com/rental/-/detail/=/cid=n_620tdv29044ra/ 「actor」は複数人いるのですが、以下のようにすると一人しか表示されない。という意味でございました。 $actor = $item->iteminfo->actress->item->actor; また最終的には <a href="http://www.dmm.com/rental/-/list/=/article=actor/id=[出演者ID:63609]/" rel="nofollow">[出演者名 木村拓哉]</a> <a href="http://www.dmm.com/rental/-/list/=/article=actor/id=[出演者ID:62644]/" rel="nofollow">[出演者名 二宮和也]</a> ……以下【山崎努】まで続く としたいのですが、どうしたら良いのでしょうか。 大変お手数ですがどうぞよろしくおねがいします。

        1. 当記事執筆者

          めまい様
          以下のような感じでしょうか

          $actor_list = $item->iteminfo->actor->item;
          foreach((object)$actor_list as $actor) {
          	$url =  'http://www.dmm.com/rental/-/list/=/article=actor/id=';
          	echo '<a href="' . esc_url($url . $actor->id) .'" target="blank">[出演者名:' . $actor->name .']</a><br>';
          }
          1. めまい様

            ありがとうございます!! できそうです!!助かりました! わざわざサンプルまでいただき本当に感謝でございます。 初心者なりにいろいろ応用してみたいと思います。 また、わからない点などございましたら教えてくださいませ。 どうぞよろしくおねがいします。

  2. コーラマン様

    スゴイ!ドンピシャで自分の知りたいことが書かれていて他の記事も併せて大変、大変参考になりました。じっくりとブログ内の記事を読み込ませていただきたいと思います。ありがとうございました。 ただ記事に書かれていたコードを実装したところうまく表示されるところまではいったのですが、実装となると、やはりキャッシュしないといけないようで https://blog-and-destroy.com/21163 を拝見させていただいたのですが、どのように組み合わせる?のか分からなく困ってしまいました。 できればTransients APIを利用した場合のサンプルコードみたいなものを教えていただけないでしょうか? 初心者ですいません。 よろしくおねがいします。

    1. 当記事執筆者

      コーラマン様
      コメントありがとうございます。
      このページではXMLをオブジェクトに変換する際にsimplexml_load_file()を利用しています。
      https://blog-and-destroy.com/21163
      上記のページのコードでは、simplexml_load_file()を利用するのではなく、一度、file_get_contents()でXMLを読み込みキャッシュして、その後simplexml_load_string()を利用してXMLをオブジェクトに変換しているので、その箇所を変更するれば利用できると思います。

コメント投稿またはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。