いま、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) { の後あたりに、いろいろ処理を追加してみましたが、目的通りにはいきませんでした。
となたか、解決方法をご教示いただけませんか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/04/26 18:13:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント200pt
<?
//件数を指定する処理 
$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 '見つかりませんでした';
}
?>
他2件のコメントを見る
id:Cherenkov

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

2012/04/26 18:12:00
id:ozaki

いろんなケースに対応するためのものだったのですね。丁寧なご説明、本当にありがとうございました!

2012/04/26 18:12:43
  • id:ozaki
    以下、上記質問のページのソースです。

    <?
    //$queryword = $keyword;
    $queryword = "東京スカイツリー";

    //XMLデータ取得用ベースURL
    $req = "http://auctions.yahooapis.jp/AuctionWebService/V2/search?appid=xxxxxx";
    //検索語をリクエストに追加
    $req .= "&query=". urlencode($queryword);
    //検索の詳細指定
    //all :全クエリー文字を含む検索結果 any :クエリー文字のうちいずれかを含む検索結果
    $req .= "&type=".any;
    //「チケット、金券、宿泊予約」=2084043920
    $category = "2084044317";
    $req .= "&category=".$category;
    //XMLファイルをパースし、オブジェクトに代入
    $xml = simplexml_load_file($req,'SimpleXMLElement') or die("XMLパースエラー");
    //パースエラーが起きていなければ、$xmlオブジェクトにデータが全て格納されています
    //$xmlオブジェクトがどのように格納されているかを確認してみる場合は、以下のコメントアウトを外して実行

    echo "<pre>";
    print_r($xml);
    echo "</pre>";


    ?>
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="Content-Script-Type" content="text/javascript">
    <title></title>
    <!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <script type="text/javascript">
    function open3(f) {
    window.name = (new Date()).getTime();
    var date = new Date();
    var time = date.getTime()
    f.target = window.name + time;
    var w = window.open("about:blank", f.target, 'width=200, height=200');
    w.focus();
    f.submit();
    }
    </script>
    </head>
    <body>
    <? echo $queryword; ?>のチケットのオークション価格<br><br>
    <?
    //件数を指定する処理 
    $count = 0;
    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;}
    }
    ?>

    </body>
    </html>

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません