はじめに

PHP で curl を使って、API Request をする方法。

※API は JSON 形式のレスポンスを返す想定

TL;DR

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. 実行の流れ
    2. サンプル
    3. curl 実行で 500 Internal Server Error
  5. まとめ
  6. その他・メモ
  7. 参考文献

環境・条件

1
2
3
4
5
6
7
8
$ grep -i pretty /etc/os-release
PRETTY_NAME="Ubuntu 18.04.2 LTS"

$ php -v
PHP 7.2.24-0ubuntu0.18.04.2 (cli) (built: Jan 13 2020 18:39:59) ( NTS )

$ apache2ctl -v
Server version: Apache/2.4.29 (Ubuntu)

詳細

curl_init, curl_setopt, curl_exec, curl_close を使う。

JSON 形式のレスポンスは json_decode でデコード。

実行の流れ

GET で JSON 形式のレスポンスの場合は下記のイメージ。

1
2
3
4
5
6
7
$url = 'https://path/to/api';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($curl);
$res_json = json_decode($res);
curl_close($curl);

サンプル

bitFlyer Lightning APITicker(GET /v1/ticker) を実行してみる。

※以下、Tinker 上での実行結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// $ php artisan tinker
>>> $url = 'https://api.bitflyer.com/v1/ticker';
=> "https://api.bitflyer.com/v1/ticker"

>>> $curl = curl_init($url);
=> curl resource #703

>>> curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
=> true

>>> curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
=> true

>>> $res = curl_exec($curl);
=> "{"product_code":"BTC_JPY","timestamp":"2020-01-18T00:40:09.393","tick_id":20424947,"best_bid":985607.0,"best_ask":986319.0,"best_bid_size":0.2,"best_ask_size":0.19998,"total_bid_depth":1691.36550825,"total_ask_depth":1738.08124173,"ltp":985999.0,"volume":178107.04416046,"volume_by_product":7926.21146012}"

>>> $res_json = json_decode($res);
=> {#3357
+"product_code": "BTC_JPY",
+"timestamp": "2020-01-18T00:40:09.393",
+"tick_id": 20424947,
+"best_bid": 985607.0,
+"best_ask": 986319.0,
+"best_bid_size": 0.2,
+"best_ask_size": 0.19998,
+"total_bid_depth": 1691.36550825,
+"total_ask_depth": 1738.08124173,
+"ltp": 985999.0,
+"volume": 178107.04416046,
+"volume_by_product": 7926.21146012,
}

>>> curl_close($curl);
=> null

curl 実行で 500 Internal Server Error

cURL が有効になっていない(インストールされていない)場合、curl_init を使った時点で 500 Internal Server Error となる。

インストール後、apache2 の再起動で使えるようになる(はず)。

Ubuntu 18.04 の場合は下記の流れでいけた。

1
2
$ sudo apt-get install php-curl
$ sudo /etc/init.d/apache2 restart

まとめ

その他・メモ

POST とか使う場合は 公式マニュアルPHPでHTTPリクエスト(cURL&PUTでパラメータを渡す際の注意) - Qiita あたりを見ておけば良い。

参考文献

関連記事