説明のために、お手数ですが、まず下記を読んでください。
//楽天ブックス書籍検索 $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という変数にして繰り返すというのしてみたのですが、「必須パラメータが不足している」と怒られました。どうしたらいいのでしょうか?
回答1件
あなたの回答
tips
プレビュー