質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

3351閲覧

楽天APIのデータをMYSQLへ格納したい。

JTake

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/04/15 04:44

編集2017/04/16 11:24

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;"'.">&laquo;</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;"'.">&raquo;</a>"; } return $html; } echo '</p>'; echo '</div>'; echo '</div>'; ?>

###補足情報(言語/FW/ツール等のバージョンなど)
php ver5.3
mysql ver5.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/15 17:11

ソースコードが読みにくいので、インデントは揃えてください。
guest

回答1

0

ざっと見ただけでデバッグしていないので的を外すかもしれませんが、ページャに入る前に、

$nextpage= '2';

となっているので、何度改ページリンクを押しても次のページに進まないのでは?と思う次第です。コメントしてみたらあっさり動くかも。

あと、先述の方の指摘にもあった通り、インデントは揃えましょう。

for($i = 0; $i < $results_per_page; $i++) { $imageFlag = $item->Items[$i]->Item->imageFlag; if ($imageFlag == "1") { ・・・ } } function Page_Link($max_page,$currentpage,$nextpage,$url_a,$url_b){ ・・・ }

ってな感じでお願いします。どこからどこまでかforで、どこからどこまでがifなのかわかるだけでも、見ている側は助かります。

投稿2017/04/17 03:11

SaintKnowledge

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JTake

2017/04/17 14:21

SaintKnowledgeさん ご回答ありがとうございます。インデントの件、失礼致しました。以後、気をつけるように致します。 ご回答をもとに再度確認してみます。今後共宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問