外部APIを呼び出してBTCの価格を取得する

#はじめに
LaravelでHTTPリクエストを投げるために、`Guzzle`を使用しました。
Guzzleの勉強として、今回は**BTCの価格を取得**するまでを記事にしています。

#前提
既にプロジェクトが作成されていること
※まだ、作成されていない方は[こちら](https://qiita.com/rokumura7/items/ae9b89a6244d4b392bf9)を参考にしたら良いかと思います。

#Guzzleをインストール

````
composer require guzzlehttp/guzzle
```
正しくインストールができていれば、composer.jsonに下記が追加されています。

```
"require": {
        //略
        "guzzlehttp/guzzle": "^7.2", //数値はインストールしたバージョンによって変わります
        //略
    }
```

#外部APIの呼び出し
今回は3つの取引所「bitflyer、Zaif、coincheck」からAPIを呼び出してBTCの価格を取得しています。

## Controller

```php:BitcoinController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use GuzzleHttp\Client;

class BitcoinController extends Controller
{
    public function index()
    {
        $client = new Client();
        $method = "GET";
        $data = []; // 各取引所で取得したデータを格納する

        # bitflyerで取得
        $url = "https://api.bitflyer.jp/v1/ticker?product_code=BTC_JPY";
        $response = $client->request("GET", $url);
        $posts = $response->getBody();
        $posts = json_decode($posts, true);
        $data['bitflyer'] = $posts;

        # Zaifで取得
        $url = "https://api.zaif.jp/api/1/ticker/btc_jpy";
        $response = $client->request("GET", $url);
        $posts = $response->getBody();
        $posts = json_decode($posts, true);
        $data['Zaif'] = $posts;

        # coincheckで取得
        $url = "https://coincheck.com/api/ticker";
        $response = $client->request("GET", $url);
        $posts = $response->getBody();
        $posts = json_decode($posts, true);
        $data['coincheck'] = $posts;

        return view('bitcoin.index', compact('data'));
    }
}
```

ソースコードを簡潔に説明します。
まず、APIに対してGETメソッドでHTTP通信を宣言。

```
$client = new Client();
$response = $client->request("GET", [アクセスしたいURL]);
```

次に、APIの返却値に対して、getBody()メソッドを使用してメッセージの本文を取得します。さらにAPIで取得したデータはJSON形式のため、json_decode()関数を利用してJSON文字列を配列に変換します。

```
$posts = $response->getBody();
$posts = json_decode($posts, true);
```

APIの返却値を格納した`$data`の中身は下記の通りになります。
![スクリーンショット 2020-12-31 11.52.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554111/7bd1569f-85d9-02e4-15fd-20d7de222e68.png)

## route

```php:web.php
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', 'BitcoinController@index');

```

## View

```php:index.blade.php
<div class="container">
  <table border="1">
    <tbody>
      <tr>
        <th>bitflyer</th>
        <th>Zaif</th>
        <th>coincheck</th>
      </tr>
      <tr>
        <td>¥{{ number_format($data['bitflyer']['ltp']) }}円</td>
        <td>¥{{ number_format($data['Zaif']['last']) }}円</td>
        <td>¥{{ number_format($data['coincheck']['last']) }}円</td>
      </tr>
    </tbody>
  </table>
</div>
```
画面表示されたものは下記になります。
![スクリーンショット 2020-12-31 12.02.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554111/0410488d-b054-3e46-3e3e-69e287ca11cb.png)

#参考
[Laravel & Guzzle】APIの呼び出し方法をわかりやすく解説](https://yaba-blog.com/laravel-call-api/)
[ビットコインの価格をAPIで取得してみた](https://imoni.net/blog/00xx/0053.html)