「モール別ランキング」アプリのソース解説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)のソース内容を紹介します。
コメントを残す