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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

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

解決済

APIのデータが思った通りにテーブルに保存することが出来ず困っています。

haruatu
haruatu

総合スコア88

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

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

1回答

-2評価

0クリップ

240閲覧

投稿2022/02/07 20:37

編集2022/02/10 05:10

説明のために、お手数ですが、まず下記を読んでください。

//楽天ブックス書籍検索 $rakutenn_url = 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?applicationId=アプリID&page=〇(1~100の数字を入れる)';

上述のAPIがjson形式だったため

$rakutenn_json = $rakutenn_response->getBody()->getContents(); $rakutenn_booklist= json_decode($rakutenn_json,true);

してdd()で確認したのが下記の配列です。

array:9 [▼ "GenreInformation" => [] "Items" => array:30 [▶] ←ここに30冊分の本のデータが入っていて、"page"の数字によって内容が変わる "carrier" => 0 "count" => 920618 "first" => 1 "hits" => 30 "last" => 30 "page" => 〇(1~100の数字が入る) "pageCount" => 100 ]

質問は、上述の配列の"page"の1~100の"Items"のデータを自動的にテーブルに保存するにはどうしたらいいのかが、わからないという事です。

詳しく説明すると、まず、テーブルに保存したいのは"Items"のデータです。その為に下記のコードでテーブルにデータを保存したのですが、

$bookbook=[]; foreach($bookbook as $item) { Book::create([ 'title'=>$item['title'], 'link'=>$item['link'], 'author'=>$item['author'], 'category'=>$item['category'], 'guid'=>$item['guid'], 'isbn'=>$item['isbn'], 'booksGenreId'=>$item['booksGenreId'], 'publisherName'=>$item['publisherName'], 'largeImageUrl'=>$item['largeImageUrl']]); }

この方法だと"page"が1のデータしか保存されませんでした。一応、手動でAPIのURLの[page=〇]の〇部分に残りの2~100の数字を順番に入力して一回一回保存していけば、すべての"page"のデータが手に入るのですが、それだと面倒なので、もっと楽にどうにかできないかと考えています。

試したことは、

for($i=1;$i<=100;$i++){ $rakutenn_url = 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?applicationId=アプリID&page=$i'; }

とfor文でpageの部分を$iという変数にして繰り返すというのしてみたのですが、「必須パラメータが不足している」と怒られました。どうしたらいいのでしょうか?

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

takasima20

2022/02/07 21:32

いちばん下のコードはクオートが足りないようにみえます
m.ts10806

2022/02/07 21:46

シングルクォート内では変数展開されませんが、そこの認識は問題ないですか?
haruatu

2022/02/08 09:01 編集

知りませんでした。page='.strval($i);に書き換えて実行すると、「page=4でリクエスト過多です。」とおこられました。これはどうやってもpage=1~100のデータを一度に取得してテーブルに保存することは出来ないという事でしょうか?
m.ts10806

2022/02/08 09:00

Laravel使ってて変数展開知らないというのはかなりまずいかと。文字列と変数の部分です。 PHPマニュアル確認してきてください。
m.ts10806

2022/02/08 09:05

>リクエスト過多 それはAPIの仕様なのでは。 仕様書確認してきてください。
haruatu

2022/02/08 20:04

仕様書を確認した結果、APIのリクエスト数に限界があった為、諦めて手動ですることにしました。質問に答えてくださりありがとうございました。
m.ts10806

2022/02/08 21:38

質問「受付中」のままになってますので何かしらの形で経緯を記載して締めておいてください。質問者でも自己回答できます。
haruatu

2022/02/09 20:09

わかりました。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

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