2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

はじめに

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

前提

既にプロジェクトが作成されていること
※まだ、作成されていない方はこちらを参考にしたら良いかと思います。

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)
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?