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

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

 

前回の記事

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

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

 

rakuten.php(楽天ランキング一覧)

 

画像

 

ソース内容

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

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

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

    //「r_id」クエリパラメータがある場合、楽天のジャンルIDを設定
    $r_id=empty($_GET['r_id'])?'0':$_GET['r_id'];

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


    //取得したデータの1件目のジャンルIDを設定する
    if (!empty($searchData[0][0]['genreId'])){
        $r_id=$searchData[0][0]['genreId'];
    }

    //上記で取得したジャンルIDにマッチするランキングデータを楽天APIから取得する関数
    $searchData[1]=rakutenFind('ranking', [
        'category_id'=>$r_id,
    ]);


    //上記で取得したジャンル名を設定
    $categories=rakutenFind('category', ['category_id'=>$r_id]);
    $cateName=empty($categories['current']['genreName'])?'全':$categories['current']['genreName'];

    //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">
                    <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="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($data['imageFlag']=="1"): ?>
                                    <div class="col-lg-3 col-sm-4 col-xs-3 rank-image-item">
                                        <a rel="nofollow" href="<?= $data['affiliateUrl']; ?>">
                                            <img src="<?= (is_array($data['mediumImageUrls']['imageUrl']))?$data['mediumImageUrls']['imageUrl'][0]:$data['mediumImageUrls']['imageUrl']; ?>" 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['affiliateUrl']; ?>">
                                        <?= $data['itemName']; ?>
                                    </a>
                                    <!-- キャッチコピーを表示 -->
                                    <?php if(!empty($data['catchcopy'])): ?>
                                        <p class="hidden-xs"><?= $data['catchcopy']; ?></p>
                                    <?php endif; ?>
                                </div>
                            </div>

                            <div class="rank-price">
                                <span class="text-danger">
                                    <!-- 商品価格 -->
                                    <?= number_format($data['itemPrice']); ?>円
                                </span>
                                <span class="postage">
                                    <!-- 配送料 -->
                                    <?php if($data['postageFlag']=="0"): ?>
                                        送料込
                                    <?php else: ?>
                                        送料別
                                    <?php endif; ?>
                                </span>
                            </div>

                            <?php
                                //レビュー平均設定
                                $avg=$data['reviewAverage'];
                                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';
                                }
                                $review_url="";
                            ?>
                            <div class="row">
                                <!-- レビュー平均と件数を表示 -->
                                <div class="col-lg-12 rank-star">
                                    <span title="<?= $avg ?>" class="starlevel5 star<?= $star ?>"></span>
                                    <span>(<?= $data['reviewCount'] ?>件)</span>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-xs-12 text-center rank-btn">
                                    <!-- 商品詳細へのリンク -->
                                    <a rel="nofollow" href="<?= $data['affiliateUrl']; ?>" 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行目〜38行目:

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

 

40行目:

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

 

42行目:

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

 

45〜52行目:

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

 

54行目:

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

 

61〜141行目:

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

 

142行目:

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

 

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

コメントを残す

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