質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3477閲覧

DMM商品情報APIを使って商品情報を取得・出力したいが、取得・出力できない情報がある

maiona

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/07/21 14:59

前提・実現したいこと

DMMのAPIを使ってアダルト動画の商品情報を出力させたいです。
下記の2ページを参考に制作しています。
商品のタイトルや画像、アフィリエイトリンク、レビュー平均点といった情報は取得・出力できました。

■参考URL1
商品情報APIリファレンス - DMM API
https://affiliate.dmm.com/api/v3/itemlist.html

■参考URL2
【DMM API】「商品情報API」でデータを取得・出力する例|WordPress・PHP
https://blog-and-destroy.com/8882

発生している問題・エラーメッセージ

女優名や監督名といった情報を出力できず困っています。

該当のソースコード

/ リクエスト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データを取得しオブジェクトに変換 $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; $review = $item->review->average; // 商品情報を出力する際のHTML echo '<div><a href="' . esc_url( $link ) . '" target="_blank">'; echo '<p>' . esc_html( $title ) . '(' . esc_html( $review ) . ')</p>'; echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $title ) . '">'; echo '</a></div>'; }

試したこと

商品のタイトル・画像・アフィリエイトリンクを取得するのと同様に、女優名、監督名、メーカー名を取得しようと、下記を試みました。

$actress = $item->iteminfo->actress->name;
$director = $item->iteminfo->director->name;
$maker = $item->iteminfo->maker->name;

echo esc_html( $actress );
echo esc_html( $director );
echo esc_html( $maker );

これでは情報を取得できないようでした。
お知恵を拝借できますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

リファレンス内にある「サンプルレスポンス」を読みすすめるとわかるのですが(※1)、iteminfo内の各要素はすべて情報オブジェクトのリスト構造になっています。
そのため、$item->iteminfo->actress等の中身が配列であり、直接nameを取得しようとしても情報を得ることはできません。

取得例: (動作確認なし)

php

1$actress = $item->iteminfo->actress[0]->name;

最小限でのデータ取得だとおそらくこうなります。(監督名、メーカー名も同様)

もちろん、

  • そもそも女優情報などがないケースをどうするか
  • 複数情報あるときに、全て取得する or 特定条件のものだけ取得(抽出)する をどう決めるか
  • 仮に、複数から一部だけを取得(抽出)したいときに、どういうルールで処理するか

は別途考える必要があります。

※1: コードはXMLを取得するのに対して、サンプルレスポンスはJSON形式ですが、データ構造に差はないと考えて良いです

投稿2021/07/22 05:26

attakei

総合スコア2740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maiona

2021/07/23 13:35

お忙しい中ご回答ありがとうございます! ご教示いただいたコードを試してみたところ、どうやら取得できないようでした。 「配列」の取得と出力について勉強してみます。
guest

0

自己解決

解決できました。

attakei様にご教示いただいた方法で取得できなかったのは、DMM API の女優名が

$item->iteminfo->actress->item->name

という階層になっていたためでした。

$actress = $item->iteminfo->actress[0];

で女優を配列に入れ、それぞれのnameを出力することができました。

女優が空のときは

if (empty($actress)){}

で固定の文字列を出力させています。

特定条件の一部のみ表示等はせず、全女優を出力できればOKですので、目的達成です。
ありがとうございました。

投稿2021/07/24 07:34

maiona

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問