Guzzel HTTPというライブラリを使うと、好きなWEBページのデータを簡単に取得してくることができる。
また、APIのデータをJSON形式で取得することも可能。インストールや使い方はとても簡単。
インストール
プロジェクトのルートディレクトリで以下を実行。(composerがインストールしてあること)
composer require guzzlehttp/guzzle
以上でインストールが完了。
(参考)github公式 Guzzle
任意のWEBページのデータを取得する
次に、任意のページのデータを取得して、Laravelの画面上にデバッグとして表示してみる。
web.phpに以下を記述。
<?php
use Illuminate\Support\Facades\Http;
$resp = Http::get('URL');
dd($resp->body());
use Illuminate\Support\Facades\Http;
GuzzleのHttpファサードを使う宣言をする。これでHttp::とすれば、その中のメソッドを使うことができるようになる。
$resp = Http::get(‘URL’);
Http::getで、Httpファサードのgetメソッドを使う。引数でURLを指定すると、そのページのソースやヘッダーを丸毎取得できる。
例えば以下で、Laravel8.xのHTTPクライアントのページのデータを取得できる。
$resp = Http::get('https://readouble.com/laravel/8.x/ja/http-client.html');
dd($resp->body());
ddはデバッグ用の関数で、引数で渡した変数の中身を画面上に表示する。
取得した$respではヘッダーやソースコードなど多くのデータが入っている。bodyメソッドを使うことで、情報をbodyタグの中身のソースコードのみに限定することができる。
取得結果
プロジェクトサーバーを起動(php artisan serve)して、リロードすれば取得したデータが表示される。
ページの内容をまるごと表示する
上記はddでデバッグしたが、print_r関数を使えば、タグをそのまま出力するので、元のページの内容を自分のサーバーで表示することができる。
use Illuminate\Support\Facades\Http;
$resp = Http::get('https://readouble.com/laravel/8.x/ja/http-client.html');
print_r($resp->body());
APIのデータを取得する
同様にすればAPIのデータも簡単に取得することができる。今回はAPIとして、以下のようなJSON形式のデータを取得する。
use Illuminate\Support\Facades\Http;
$resp = Http::get('https://raw.githubusercontent.com/kubowania/burger-api/main/db.json');
dd($resp->json());
get関数の引数でAPIのURLを指定する。
JSON形式で取得したいので、jsonメソッドを使って、$resp->json() とする。
取得結果
ブラウザをリロードすると、以下のようにJSON形式でデータが取得できていることがわかる。
APIで取得したデータの実用例
例としてルーティング上に記述をしたが、実際に使う場合は、コントローラを使ってビューに渡すのが基本となる。
コントローラーの作成
GuzzelControllerを作成。
$ php artisan make:controller GuzzelController
Controller created successfully.
生成されたファイルを以下のように編集する。
app/Http/Controllers/GuzzelController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http; //追記
class GuzzelController extends Controller //以下追記
{
public function index(){
$resp = Http::get('https://raw.githubusercontent.com/kubowania/burger-api/main/db.json');
$resp = $resp->json();
$burgers = $resp['burgers'];
$title = array_keys($resp)[0];
return view('guzzel-test', [ 'burgers' => $burgers, 'title' => $title ]);
}
}
取得してきたJSONファイルの中のデータを$burgersと$titleに格納。
ルーティングの設定
routes/web.php に以下を追記。
//guzzel test
Route::get('/guzzel', 'GuzzelController@index');
ビューの作成
resources/views/guzzel-test.blade.php を作成し、以下を追記。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Guzzel Test</title>
</head>
<body>
<h1>{{ $title }}</h1>
@foreach ( $burgers as $burger )
<section>
<h2>{{ $burger['name'] }}</h2>
<ul>
<li>{{ $burger['restaurant'] }}</li>
<li>{{ $burger['web'] }}</li>
<li>{{ $burger['description'] }}</li>
</ul>
</section>
@endforeach
</body>
</html>
以上で準備が完了。
ブラウザで開く
http://localhost:8000/guzzel にアクセスする。取得してきたデータを一覧で表示することができる。
以上がAPIの基本的な使い方。
Guzzelの便利機能
Guzzelで取得してきたデータを絞り込みや整形するときに、bodyメソッドやjsonメソッドを使ったが、他にも便利なメソッドが用意されている。
メソッド | 表示形式 | 取得例 |
body() | string | <h1>テスト<h1> |
json() | array|mixed | array:1 [▼ “burgers” => array:28 [▶] ] |
collect() | Illuminate\Support\Collection | collection形式 |
status() | int | 200 |
ok() | bool | true |
successful() | bool | true |
failed() | bool | false |
serverError() | bool | false |
clientError() | bool | false |
headers() | array | 以下 |
heders()はヘッダーレスポンスの中身を表示する。
GETメソッドでパラメータを付与する
パラメータ付きのURLを指定する場合は、URLで直接指定するか、または、第二引数で配列として渡すこともできる。
Http::get('http://example.com/users?name=Taylor&page=1')
Http::get('http://example.com/users', [
'name' => 'Taylor',
'page' => 1,
]);
Basic認証を承認する
Http::withBasicAuth('ユーザー名','パスワード')->getget('http://www.server.com/endpoint');
postメソッドで送信する
$response = Http::post('http://example.com/users', [
'key1' => 'value1',
'key2' => 'value2',
]);
getの部分をpostに変える。第二引数でKV形式でデータを渡す。