8.モール別ランキングのYahooランキング一覧(yahoo.php)のソース内容

「モール別ランキング」アプリのソース解説7回目です。前回は「タブフォーム要素(tab.php)」のプログラムの流れについて解説しました。今回は「yahoo.php(Yahooランキング一覧)」のプログラムソースの流れを簡単に解説します。

 

前回の記事

7.モール別ランキングのタブフォーム要素(tab.php)のソース内容

アプリURL
モール別ランキング – 大手通販サイトのランキングを比較

 

yahoo.php(Yahooランキング一覧)

 

画像

 

ソース内容

<?php
    //モールランキングの共通関数ライブラリを読み込みます
    require_once('module/common_function.php');

    //YahooショッピングAPIからデータを取得するための関数ライブラリを読み込みます
    require_once('module/yahoo_function.php');

    //検索ワードを設定します。
    $search_word=empty($_GET['q'])?'':urldecode(h($_GET['q']));
    //YahooショッピングAPIのカテゴリIDを設定します
    $y_id=empty($_GET['y_id'])?'1':$_GET['y_id'];

    //YahooショッピングAPIから検索ワードにマッチするデータを取得する関数
    $searchData[0]=yahooFind('all', [
        'q'=>$search_word,
        'limit'=>20
    ]);

    //取得したデータの1件目のカテゴリIDを設定する
    if (!empty($searchData[0][0]['Category']['Current']['Id'])){
        $y_id=$searchData[0][0]['Category']['Current']['Id'];
    }

    //上記で取得したカテゴリIDにマッチするランキングデータをYahooショッピングAPIから取得する関数
    $searchData[1]=yahooFind('ranking', ['category_id'=>$y_id]);

    //上記で取得したカテゴリIDにマッチするカテゴリデータをYahooショッピングAPIから取得する関数
    $categories=yahooFind('category', ['category_id'=>$y_id]);

    //上記で取得したカテゴリ名を設定
    $cateName=$categories['Result']['Categories']['Current']['Title']['Short'];
    $cateName=$y_id==1?'全':$cateName;

    //APIで取得したマッチデータとランキングデータの件数の大きい方を設定
    $dataCnt=count($searchData[0])>count($searchData[1])?count($searchData[0]):count($searchData[1]);
?>

<ul class="bxslider">
<?php for($row=0;$row<$dataCnt;$row++): ?>
    <li>
    <div class="row">
    <?php for($col=0;$col<2;$col++): ?>
        <div class="col-sm-6 col-xs-12">
            <?php
                if ($col==0){
                    $rankTitle='「マッチ順」';
                }else{
                    $rankTitle='「'.$cateName.'」カテゴリ';
                }

                if(isset($searchData[$col][$row])){
                    $data=$searchData[$col][$row];
                }else{
                    goto end_loop;
                }
            ?>
            <div class="rank-list">
                <div class="rank-heading <?= $row>=1?'visible-xs':''?> ">
                    <h1 class="<?=$col==0?'rank-heading-info':'rank-heading-warning' ?>">
                        <i class="fa fa-list-ol"></i> <?= $rankTitle ?>
                    </h1>
                </div>
                    <?php $rankNo=$row+1 ?>
                    <!-- 列ごとに色を変更 -->
                    <div class="panel panel-body <?=$col==0?'panel-info':'panel-warning' ?>">
                        <div class="rank-no">
                            <!-- ランキング順位表示 1位から3位まで色を変更 -->
                            <?php if($rankNo>=1 and $rankNo<=3): ?>
                                <label class="rank-no <?=$col==0?'label-info':'label-warning' ?>"><?= $rankNo ?></label>
                            <?php else: ?>
                                <label class="rank-no label-default"><?= $rankNo ?></label>
                            <?php endif; ?>
                        </div>
                        <div class="row rank-image">
                            <!-- 商品画像をリンク付きで表示 -->
                            <div class="col-lg-3 col-sm-5 col-xs-3 rank-image-item">
                            <?php if(isset($data['Image']['Medium'])): ?>
                                    <a rel="nofollow" href="<?= $data['Url']; ?>">
                                        <img src="<?= $data['Image']['Medium'] ?>" border="0"/>
                                    </a>
                            <?php endif; ?>
                            </div>
                            <div class="col-lg-9 col-sm-7 col-xs-9 rank-image-text">
                                <!-- 商品名をリンク付きで表示 -->
                                <a rel="nofollow" href="<?= $data['Url']; ?>">
                                    <?= $data['Name']; ?>
                                </a>
                                
                                <!-- キャッチコピーを表示 -->
                                <?php if(!empty($data['Headline'])): ?>
                                    <p class="hidden-xs"><?= $data['Headline']; ?></p>
                                <?php endif; ?>
                            </div>
                        </div>
                        <?php if(isset($data['Price'])): ?>
                            <div class="rank-price">
                                <span class="text-danger">
                                    <!-- 商品価格 -->
                                    <?= number_format($data['Price']); ?>円
                                </span>
                                <!-- 配送料 -->
                                <span class="postage">
                                    <?php if($data['Shipping']['Code']=="1"): ?>
                                        送料別
                                    <?php elseif($data['Shipping']['Code']=="2"): ?>
                                        送料無料
                                    <?php else: ?>
                                        条件付送料無料
                                    <?php endif; ?>
                                </span>
                                <!-- セール中の場合セール価格表示 -->
                                <?php if (!empty($data['PriceLabel']['SalePrice'])) :?>
                                    <br />
                                    <span class="label label-danger">セール中

                                    <?php if ($data['PriceLabel']['DefaultPrice'] > $data['PriceLabel']['SalePrice']) :?>
                                         
                                            <?php
                                                $sale=$data['PriceLabel']['DefaultPrice'] - $data['PriceLabel']['SalePrice'];
                                                echo number_format($sale / $data['PriceLabel']['DefaultPrice'] * 100).'%OFF'
                                            ?>
                                    <?php endif ?>
                                    </span>
                                <?php endif ?>
                            </div>
                        <?php endif ?>


                        <?php
                            //レビュー平均設定
                            $avg=$data['Review']['Rate'];
                            if (substr($avg,2,1)>='2' and substr($avg,2,1)<='8'){
                                $star=substr($avg,0,1).'5';
                            }else{
                                $star=substr($avg,0,1).'0';
                            }

                        ?>

                        <div class="row">
                            <div class="col-lg-12 rank-star">
                                <!-- レビュー平均と件数を表示 -->
                                <a href="<?= $data['Review']['Url'] ?>" rel="nofollow" target="_blank">
                                    <span title="<?= $avg ?>" class="starlevel5 star<?= $star ?>"></span>
                                    <span class="review_cnt">(<?= $data['Review']['Count'] ?>件)</span>
                                </a>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-xs-12 text-center rank-btn">
                                <!-- 商品詳細へのリンク -->
                                <a rel="nofollow" href="<?= $data['Url']; ?>" class="btn <?=$col==0?'btn-info':'btn-warning' ?> btn-sm btn-block">
                                    商品詳細
                                </a>
                            </div>
                        </div>
                    </div>
            </div>
<?php end_loop: ?>
        </div> <!-- col-sm-6 col-xs-12 -->
    <?php endfor; ?>
    </div>
    </li>
<?php endfor; ?>
</ul>

 

プログラムの流れ

2行目〜35行目:

ランキング表示するデータをYahooショッピングAPIより取得します。(詳細はコメントを参照)

 

39行目:

取得したデータの件数分ループします

 

42行目:

2データ(列)分ループします

 

45〜49行目:

各ランキングデータのタイトルを設定します。

 

51〜55行目:

ランキングデータが存在する場合、ランキングデータの内容をdata変数に設定します

 

57〜158行目:

取得したランキングデータを表示します。(詳細はコメント参照)

 

159行目:

PHPのGOTO文のラベルです。54行目で指定しています。APIのデータが存在しない場合、次データのループに入るよう処理しています。

 

次回は楽天のランキング一覧(rakuten.php)のソース内容を紹介します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です