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

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

ただいまの
回答率

90.50%

  • PHP

    20385questions

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

  • MySQL

    5865questions

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

  • API

    1527questions

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

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 475

JTake

score 2

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Kosuke_Shibuya

    2017/04/16 02:11

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

    キャンセル

回答 1

+1

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

$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 23:21

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

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    php mysql pagination

    各カテゴリ一覧にて、各カテゴリに当てられた記事ページ一覧の表示はできていますがそこで各カテゴリーページにて、記事が多い時を想定してページネーションを作ったんですが現在いるカテゴリで

  • 解決済

    pdoで配列を格納するスマートな方法

    お世話になっております。 以下の【配列の状況】ように$mixedは可変の複数の配列が規則正しく格納されている状況です。 【配列の状況】 $mixed=array(arr

  • 解決済

    就労移行のタイムカードの出勤ページで削除と追加がうまく動作しない

    前提・実現したいこと ここに質問したいことを詳細に書いてください 就労移行施設のタイムカードを作成してますが, どうしても、出勤押した後に内容が反映されないのと 対象列の削

  • 解決済

    mysqlから取得した配列を整形したい

    DBからレコードを取得した値が、以下のような形で配列に格納されています。 array(14) { [0]=> array(7) { ["office_id"]

  • 解決済

    wordpressでのデータベースの操作のエラー

    前提・実現したいこと 現在、wordpressでプラグイン"BuddyPress"を使って、SNS制ToDoリストのwebアプリを作っています。ToDoリストでユーザーごとにTo

  • 解決済

    【PHP】ログイン機能の実装

    PHP初心者です。 PHPの勉強がてら、会員制のページを作成してます。 新規会員登録機能は実装できていますが、 ログイン機能の実装がうまくいきません。 やりたいことを実

  • 解決済

    DBから取得したデータをそれぞれの詳細が見れるようにしたいです。

    先日も同じ質問出してますが、結構問題の説明が足りなかった気がしまして、今日改めて質問させていただきます。 コードを貼る前に、DBの情報をご覧ください。 ID  入力

  • 解決済

    Insert into で、DBにデータ登録が出来ません。

    以下のプログラムを実行して、データをDBに追加したいのですが、Couldn't Excute Query、クエリーが実行できませんといわれます。 なぜでしょうか? <?ph

同じタグがついた質問を見る

  • PHP

    20385questions

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

  • MySQL

    5865questions

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

  • API

    1527questions

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