<?php
//-------------------------------------------------------------------//
// SDK-Sample-04「楽天Kobo電子書籍の検索」
//-------------------------------------------------------------------//
$app_title_head='SDK-Sample-04';
$app_title_header='「楽天Kobo電子書籍の検索」';

// ライブラリファイル等の読込
require_once dirname(__FILE__).'/../autoload.php';
require_once 
dirname(__FILE__).'/config.php';
require_once 
dirname(__FILE__).'/helper.php';

// 変数の初期化
$response null;
$search_keyword  '';
$page     1;
$search_sort 'standard';

// 検索結果の取得
if (isset($_GET['search_keyword'])) {
    
// Clientインスタンスを生成 Make client instance
    
$rwsclient = new RakutenRws_Client();
    
// アプリIDをセット Set Application ID
    
$rwsclient->setApplicationId(RAKUTEN_APP_ID);
    
// アフィリエイトIDをセット (任意) Set Affiliate ID (Optional)
    
$rwsclient->setAffiliateId(RAKUTEN_APP_AFFILITE_ID);

    
// GETデータの取得
    
$search_keyword   $_GET['search_keyword'];
    
$page      = isset($_GET['page']) ? $_GET['page'] : 1;
    
$search_sort $_GET['search_sort'];
    
$hits      '10';

    
// 検索用配列の準備
    
$serch_array = array(
        
'keyword' => $search_keyword,
        
'page'    => $page,
        
'sort'    => $search_sort,
        
'hits'    => $hits,
    );

    
//  楽天Kobo電子書籍検索API で電子書籍を検索
    
$response $rwsclient->execute('KoboEbookSearch',$serch_array);
}
//-------------------------------------------------------------------//
// HTMLの表示
//-------------------------------------------------------------------//

show_header(); // ヘッダーの表示
show_credit_logo(); // クレジットロゴの表示

if($_GET){// GETデータが有る場合の表示
    // フォームの表示
    
show_search_form($search_keyword,$search_sort);
    if (
$response && $response->isOk()) {// レスポンスが正常かどうかを isOk() で確認する
        
show_search_result($response);
        
// pagerの表示
        
show_pager($page,$response,$search_keyword,$search_sort);
    }else{
        
// レスポンスが異常の場合、getMessage() でレスポンスメッセージを取得
        
echo '<p align="center">Error:'.$response->getMessage().'</p>';
    }
}else{
// GETデータが無い場合の表示
    
show_search_form($search_keyword,$search_sort);
    
show_usage();
}

show_footer(); // フッターの表示

//-------------------------------------------------------------------//
// 関数
//-------------------------------------------------------------------//
/**
 *  使用方法の表示関数
 */
function show_usage(){

echo<<<EOD

<div class="usage">
<p>「Rukuten Developers」提供の楽天Kobo電子書籍検索APIを使用した「楽天Kobo電子書籍の検索プログラム」です。</p>
<p>※ソート順を指定してキーワード検索することが出来ます。</p>
<h3>【使用方法】</h3>
<ol>
<li>【ソート順】をドロップリストから選択します。</li>
<li>【キーワード】を入力します。</li>
<li>【検索】ボタンで検索します。</li>
<li>ページャーの数字リンクでページにジャンプ出来ます。</li>
<ol>
</div>

EOD;

}

/**
 *  Pagerの表示関数
 */
function show_pager($page,$response,$keyword,$sort){
    echo 
'<div class="pager">';
    echo 
$pager pager(
        (int)
$page,
        (int)
$response['pageCount'],
        
'?search_keyword=%s&amp;search_sort=%s&amp;page=%d',
        
$keyword,
        
$sort
    
);
    echo 
'</div>';
}

/**
 *  検索結果の表示関数
 */
function show_search_result($result){
    echo 
'<div align="center">';
    echo 
'<table border=1>';
    
$no=0;
    foreach (
$result as $item) {
        
$no++;
        echo 
'<tr>';
        echo 
'<td rowspan=2>';
        echo 
$no;
        echo 
'</td>';
        echo 
'<td colspan=2>';
        
// タイトル「title」
        
echo '<a href="' $item['affiliateUrl'] . '" class="title" target="_blank">' .  h(mb_strimwidth($item['title'], 056'...''UTF-8')) . '</a><br>';
        echo 
'</td>';
        echo 
'</tr>';
        echo 
'<tr>';
        echo 
'<td>';
        
// 出版社「publisherName」
        
echo '【出版社】'$item['publisherName'];
        echo 
'</td>';
        echo 
'<td>';
        
// 商品価格「itemPrice」
        
echo '【価格】';
        
$item_price $item['itemPrice'];
        
$formated_price number_format($item_price);
        echo 
$formated_price '円';
        echo 
'</td>';
        echo 
'</tr>';
    }
    echo 
'</table>';
    echo 
'</div>';
}

/**
 *  ヘッダー部の表示関数
 */
function show_header(){

global 
$app_title_head;
global 
$app_title_header;

echo<<<EOD

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
$app_title_head</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<header>
<h1 align="center"><a href="index.php">
$app_title_header</a></h1>
</header>

EOD;

}

/**
 *  クレジットロゴ部の表示関数
 */
function show_credit_logo(){

echo<<<EOD

<div class="credit-logo">
<!-- Rakuten Web Services Attribution Snippet FROM HERE -->
<a href="http://webservice.rakuten.co.jp/" target="_blank"><img src="http://webservice.rakuten.co.jp/img/credit/200709/credit_31130.gif" border="0" alt="楽天ウェブサービスセンター" title="楽天ウェブサービスセンター" width="311" height="30"/></a>
<!-- Rakuten Web Services Attribution Snippet TO HERE -->
</div>

EOD;

}

/**
 *  フォーム部の表示関数
 */
function show_search_form($keyword,$sort){
    echo 
'<nav class="search-form">';
    echo 
'<form action="index.php" method="GET">';
    echo 
'【キーワード】';
    echo 
'<input id="keyword" class="keyword" name="search_keyword" type="text" value="'.
h($keyword).'">';
    echo 
'<input type="submit" class="search-button" value="【検索】">';
    echo 
'<br>';
    echo 
'【ソート順】';
    echo 
'<select name="search_sort">';
    echo 
'<option value="standard"'.($sort == 'standard' ' selected' '').'>標準ソート順</option>';
    echo 
'<option value="+releaseDate"'.($sort == '+releaseDate' ' selected' '').'>発売日の古い順</option>';
    echo 
'<option value="-releaseDate"'.($sort == '-releaseDate' ' selected' '').'>発売日の新しい順</option>';
    echo 
'<option value="+itemPrice"'.($sort == '+itemPrice' ' selected' '').'>価格が安い順</option>';
    echo 
'<option value="-itemPrice"'.($sort == '-itemPrice' ' selected' '').'>価格が高い順</option>';
    echo 
'<option value="reviewCount"'.($sort == 'reviewCount' ' selected' '').'>レビューの件数が多い順</option>';
    echo 
'<option value="reviewAverage"'.($sort == 'reviewAverage' ' selected' '').'>レビューの評価(平均)が高い順</option>';
    echo 
'</select>';
    echo 
'</form>';
    echo 
'</nav>';
}

/**
 *  フッター部の表示関数
 */
function show_footer(){

echo<<<EOD

<div class="copyright" align="center">
<p><small>&copy;2019 R10.Oh!Happy.JP</small></p>
</body>
</html>

EOD;
}

?>