10.モール別ランキングのAmazonランキング一覧(amazon.php)のソース内容

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

 

前回の記事

9.モール別ランキングの楽天ランキング一覧(rakuten.php)のソース内容

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

 

amazon.php(Amazonランキング一覧)

 

画像

 

ソース内容

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

    //楽天APIからデータを取得するための関数ライブラリを読み込む
    require_once('module/amazon_function.php');

    //「a_id」クエリパラメータがある場合、amazonのカテゴリID(BrowseNodeId)を設定
    $category_id=empty($_GET['a_id'])?'0':$_GET['a_id'];

    //検索ワードを設定します。
    $search_word=empty($_GET['q'])?'':urldecode(h($_GET['q']));

    //検索ワードにマッチするデータをAmazon Product Search APIから取得する関数
    $searchData[0]=amazonFind('all', [
        'q'=>$search_word,
        'category_id'=>$category_id,
    ]);

    //取得したデータの1件目にBrowseNodeIdが存在するか判定
    if (empty($searchData[0][0]['BrowseNodes']['BrowseNode'])){
        $category_id=0;
        $cateName='-';
        $searchData[1]=[];
    }else{
        //パラメータが配列か判定し、配列でない場合、配列にして返す
        $nodes=adjustArray($searchData[0][0]['BrowseNodes']['BrowseNode']);

        //カテゴリIDを設定
        $category_id=$nodes[0]['BrowseNodeId'];

        //カテゴリ名を設定
        $cateName=$nodes[0]['Name'];

        //上記で取得したカテゴリIDにマッチするランキングデータをAmazonAPIから取得する関数
        $searchData[1]=amazonFind('all', [
            'category_id'=>$category_id,
            'ProductGroup'=>$searchData[0][0]['ItemAttributes']['ProductGroup'],
            'Sort'=>'salesrank'
        ]);
    }

    //category_idにマッチするカテゴリデータをAmazonAPIから取得する関数
    $categories=amazonFind('category', ['category_id'=>$category_id]);

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

?>

<?php for($row=0;$row<$dataCnt;$row++): ?>
    <div class="row">
        <?php for($col=0;$col<2;$col++): ?>
        <div class="col-sm-6 col-xs-12">
            <?php
                //列ごとのタイトル設定
                if ($col==0){
                    $rankTitle='「マッチ順」';
                    $rankSubTitle='ランキング';
                }else{
                    $rankTitle='「'.$cateName.'」';
                    $rankSubTitle='カテゴリランキング';
                }

                if(isset($searchData[$col][$row])){
                    $data=$searchData[$col][$row];
                }else{
                    //データが存在しない場合次のループへ
                    goto end_loop;
                }
            ?>
            <div class="rank-list">
                <!-- ランキングタイトルを設定(スマホ表示の場合は1行毎に表示) -->
                <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>
                        <span><?= $rankTitle.$rankSubTitle ?></span>
                    </h1>
                </div>
                <?php $rankNo=$row+1 ?>
                <!-- 列ごとに色を変更 -->
                <div class="amazon-panel 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">
                        <!-- 商品画像をリンク付きで表示 -->
                        <?php if(!empty($data['SmallImage'])): ?>
                            <div class="col-lg-3 col-sm-4 col-xs-3 rank-image-item">
                                <a rel="nofollow" href="<?= $data['DetailPageURL']; ?>">
                                    <img src="<?= (is_array($data['SmallImage']['URL']))?$data['SmallImage']['URL'][0]:$data['SmallImage']['URL']; ?>" border="0"/>
                                </a>
                            </div>
                        <?php endif; ?>
                        <div class="col-lg-9  col-sm-8 col-xs-9 rank-image-text">
                            <!-- 商品名をリンク付きで表示 -->
                            <a rel="nofollow" href="<?= $data['DetailPageURL']; ?>">
                                <?= mb_substr($data['ItemAttributes']['Title'],0,100); ?>
                            </a>
                            <!-- 商品の説明(PC表示の場合最初の50文字のみ表示) -->
                            <?php if(!empty($data['ItemAttributes']['Feature'])): ?>
                                <?php $feature=adjustArray($data['ItemAttributes']['Feature']); ?>
                                <p class="hidden-xs">
                                    <?= mb_substr(strip_tags($feature[0]),0,50) ?>
                                </p>
                                <p class="visible-xs">
                                    <?= strip_tags($feature[0]) ?>
                                </p>
                            <?php endif; ?>
                        </div>
                    </div>

                    <!-- 商品の価格 -->
                    <?php if(isset($data['OfferSummary']['LowestNewPrice'])): ?>
                        <div class="rank-price">
                            <span class="text-danger">
                                <?= number_format($data['OfferSummary']['LowestNewPrice']['Amount']); ?>円
                            </span>
                        </div>
                    <?php endif; ?>

                    <!-- 商品レビューをiframeで表示 -->
                    <div class="row">
                        <div class="itemCaption">
                            <div class="embed-responsive amazon-review">
                                <iframe src="<?php echo $data['CustomerReviews']['IFrameURL']; ?>" class="embed-responsive-item"></iframe>
                            </div>
                        </div>
                    </div>
                    <!-- 商品詳細へのリンク -->
                    <div class="row">
                        <div class="col-xs-12 text-center rank-btn">
                            <a rel="nofollow" href="<?= $data['DetailPageURL']; ?>" 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>
<?php endfor; ?>

 

プログラムの流れ

2行目〜40行目:

ランキング表示するデータをAmazon Product Search APIより取得します。(詳細はコメントを参照)

 

51行目:

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

 

53行目:

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

 

57〜63行目:

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

 

66行目:

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

 

72〜144行目:

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

 

145行目:

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

 

次回はcommon.php(モール別ランキングの共通関数ライブラリ)のソース内容を紹介します。

コメントを残す

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