人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

いま、Yahooオークションapi( http://developer.yahoo.co.jp/webapi/auctions/auction/v2/search.html )を使ってphpでページを作っています。
検索キーワードに一致するデータがあると、以下のようにhttp://withmama.lolipop.jp/kaihatsu/amusement_park/hatena_1.php (長いページですが、最後に3件結果が表示されます)生成されます。
しかし、一致するデータがない場合は、何らかの処理をして「見つかりませんでした」などの文言を表示させたいのですが、その処理の仕方がわかりません。そのため http://withmama.lolipop.jp/kaihatsu/amusement_park/hatena_2.php のようにエラーメッセージ入りのページとなってしまいます。
ソース(下記コメント欄参照)にある
$xml = simplexml_load_file($req,'SimpleXMLElement') or die("XMLパースエラー");の後か、foreach ($xml->Result->Item as $item) { の後あたりに、いろいろ処理を追加してみましたが、目的通りにはいきませんでした。
となたか、解決方法をご教示いただけませんか?


●質問者: ozaki
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Cherenkov
●200ポイント ベストアンサー
<?
//件数を指定する処理 
$count = 0;
if(isset($xml->Result) && isset($xml->Result->Item)) {
 foreach ($xml->Result->Item as $item) {
?>
<b><?php echo ($item->Title); ?></b><br>
<img src="<?php echo ($item->Image); ?>" style="margin:10px;"><br>
現在の価格<?php echo floor($item->CurrentPrice); ?>円
終了日時<?php echo ($item->EndTime); ?><br>
<a href="<?php echo ($item->AuctionItemUrl); ?>" target="_blank">もっと詳しく</a><br><br>
<?
$count++;
if ($count > 2){break;}
}
} else {
 echo '見つかりませんでした';
}
?>

ozakiさんのコメント
早速のご回答ありがとうございました。おかげ様で目的通りのページを作ることができました。ただ初心者の悲しさか、if(isset($xml->Result) && isset($xml->Result->Item))とされている部分の意味をなかなか理解できません。isset($xml->Result)だけか、isset($xml->Result->Item)だけのどちらか一つではなく、両方でダブルチェック?した理由をご教示いただけますとたいへんありがたいです。

Cherenkovさんのコメント
結果がなく$xml->Resultが存在しない場合、 isset($xml->Result->Item))だけだとエラーがでませんか? APIによってはさらに用心して、Itemが空で送られてくるかもしれないので && count($xml->Result->Item) も付け足したほうがいい場合があるかと。 返却される構造を観察してケースバイケースです。

Cherenkovさんのコメント
あと、Item直下はただのArrayで添字も無いので以下のようにすればforeachの外に$countを作らなくてもインデックスが取れると思います。 foreach ($xml->Result->Item as $count => $item) {

ozakiさんのコメント
いろんなケースに対応するためのものだったのですね。丁寧なご説明、本当にありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ