いま、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回まで
  • 13歳以上
  • 登録:2012/04/26 16:38:22
  • 終了:2012/04/26 18:13:03

ベストアンサー

id:Cherenkov No.1

Cherenkov回答回数1503ベストアンサー獲得回数4932012/04/26 17:12:25

ポイント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>

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません