
PHP初心者です。楽天市場商品検索APIを使用して取得したデータをMYSQLに
格納するコードを書いています。
mysqlへのデータ格納はできましたが、1ページ目に表示されるデータしか
格納できません。取得した全てのデータを格納したいのですが、如何せん
コードの書き方がわかりません。ヒントもしくはご教示頂ければ幸いです。
他の方のサンプルを利用し見よう見まねで作成している状況です。
###該当のソースコード
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <?php /**********************************************************************/ //楽天商品検索API $appId = '********************'; //アプリID $affId = '********************'; //アフィリエイトID /**********************************************************************/ echo '<div style="width:80%;margin:5% auto;">'; echo '<div style="margin:0; padding:0">'; ?> <div style="margin:0 0 2% 0;"> <form name="searchform" id="itemsearchform" method="get" action=""> <input type="text" name="keyword" id="itemkeyword" value="" /> <input type="submit" id="itemsubmit" value="検索" /> </form> </div> <?php $keyword = htmlspecialchars($_GET['keyword'], ENT_QUOTES); $e_keyword = urlencode($keyword); $currentpage = (empty($_GET['page'])) ? 1 : $_GET['page']; $first = $currentpage * 10 - 9; $last = $currentpage * 10; $shopcode = "********";//shopコード記載 $timestamp = strtotime('now'); $date = date('Y-n-j H:i:s',$timestamp); $baseurl = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222?format=json'; $rsparam = array(); if ($e_keyword != ""){ $rsparam['keyword'] = $e_keyword; } $rsparam['applicationId'] = $appId; $rsparam['hits'] = 30; $rsparam['field'] = 0; $rsparam['imageFlag'] = 0; $rsparam['page'] = $currentpage; $rsparam['orFlag'] = 1; $rsparam['first'] = $first; $rsparam['last'] = $last; $rsparam['shopCode'] = $shopcode; foreach ($rsparam as $nr => $rsvalue) { $palame .= '&'.$nr.'='.$rsvalue; } $rsurl = $baseurl.$palame; $rs_json = @file_get_contents($rsurl, true); $item = json_decode($rs_json); $Item = array(); $Items = $item->Items; $count = $item->count; $hits = $rsparam['hits']; $max_page = ceil($count/$hits); // 商品数が1000を超える場合は1000に制限 if($count >= 1000){ $count = 1000; } // 商品ページが100を超える場合は100に制限 if($max_page >= 100){ $max_page = 100; } // 1ページに表示する商品数をセット if( $page == $max_page ){ // ラストページなら表示数を計算 $results_per_page = $count % $hits; }else{ // ラストページ以外なら10 $results_per_page = $hits; } $nextpage = $currentpage+1; $prevpage = $currentpage-1; for($i = 0; $i < $results_per_page; $i++) { $imageFlag = $item->Items[$i]->Item->imageFlag; if ($imageFlag == "1") { $mediumImageUrls = $item->Items[$i]->Item->mediumImageUrls[0]->imageUrl; $affiliateUrl[$i] = $item->Items[$i]->Item->affiliateUrl; $itemName[$i] = $item->Items[$i]->Item->itemName; $itemCode[$i] = $item->Items[$i]->Item->itemCode; $spCode[$i] = $item->Items[$i]->Item->shopCode; $itemUrl[$i] = $item->Items[$i]->Item->itemUrl; $postageFlag[$i] = number_format((int)$item->Items[$i]->Item->postageFlag); $itemPrice[$i] = number_format((int)$item->Items[$i]->Item->itemPrice); $itemCaption[$i] = mb_strimwidth($item->Items[$i]->Item->itemCaption, 0, 380, '...', 'UTF-8'); echo '<div style="padding:10px 10px 0 10px;">'; echo '<div style="width:130px;height:130px;float:left;"><a href="'.$affiliateUrl[$i].'" target="_blank"><img src="'.$mediumImageUrls.'" alt="" /></a></div>'; echo '<div style="margin:0 0 0 136px;">'.$itemName[$i].'<br />'; echo '<span style="color:#ff0000;">価格 '.$itemPrice[$i].' 円</span><br />'; echo $itemUrl[$i].'<br />'; if($postageFlag[$i]==0){ echo "送料込".'<br />'; }else{ echo "送料別".'<br />'; } echo $itemCode[$i].'</div>'; $mysql_con = mysql_connect ("*******","*******","*******"); if ($mysql_con == false) { print "DB_Connect Error!"; exit; } //MySQLのデータベースを選択 $select_db = mysql_select_db ("*******",$mysql_con); if ($select_db == false) { print "DB_SELECT Error!"; exit; } //insert時の文字化け回避 mysql_query('set character set utf8'); $sql = "INSERT INTO rakuten_api VALUES ('$spCode[$i]','$itemCode[$i]','$itemName[$i]','$itemPrice[$i]','$itemUrl[$i]','$date')"; $result = mysql_query ($sql,$mysql_con); //実行した結果にエラーあったらエラー表示する if ($result == false) { print "Data Insert Error!"; exit; } else { print "Data Insert OK!"; } ?> <div style="clear:both; visibility:hidden; height:10px;">クリア</div> <hr style="width:100%;border-top:1px dotted #bbb;" /> </div> <?php } } if(isset($item)){ ?> <!-- Rakuten Web Services Attribution Snippet FROM HERE --> <div> <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> </div> <!-- Rakuten Web Services Attribution Snippet TO HERE --> <div>全 <?php echo number_format($count); ?> 品数</div><?php } // ページャー echo '<p>'; $nextpage= '2'; // $url_a ="<a style='background-color: #ffffff; color: #ff0000; margin: 0; padding: 0.2em 0.5em; border: solid 1px; text-decoration: none;' href=\"?keyword=$e_keyword&page="; $url_b ="\""; $html_Page_Link = Page_Link($max_page,$currentpage,$nextpage,$url_a,$url_b); echo $html_Page_Link; function Page_Link($max_page,$currentpage,$nextpage,$url_a,$url_b){ $html = ""; if($max_page < 1) return $html; if($currentpage > 1) $html .= $url_a.($currentpage-1).$url_b.' style="background-color: #ffffff; margin: 0; padding: 0.2em 0.5em; border: solid 1px; text-decoration: none;"'.">«</a>"; $prevpage = $currentpage - $nextpage; while ($prevpage < $currentpage) { $prevpage++; if($prevpage > 1) $html .= $url_a.($prevpage-1).$url_b.">".($prevpage-1)."</a>"; } $html .= '<span style="background-color: #ff0000; color: #ffffff; margin: 0; padding: 0.2em 0.5em; border: solid 1px #ff0000; text-decoration: none;">'.$currentpage.'</span>'; if($currentpage < $max_page){ $max_page = $max_page - $currentpage; if($max_page > $nextpage) $max_page=$nextpage; $plus=0; while ($plus < $max_page) { $nextpage=$currentpage+$plus+1; $html .= $url_a.$nextpage.$url_b.">".$nextpage."</a>"; $plus++; } $html .= $url_a.($currentpage+1).$url_b.' style="background-color: #ffffff; color: #ff0000; margin: 0; padding: 0.2em 0.4em; border: solid 1px; text-decoration: none;"'.">»</a>"; } return $html; } echo '</p>'; echo '</div>'; echo '</div>'; ?>
###補足情報(言語/FW/ツール等のバージョンなど)
php ver5.3
mysql ver5.1

