PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム
2025/01/31
PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム
カオナビAPI Ver.2.0のtokenを取得する PHP+cURLのサンプルプログラム
上記のカオナビ APIにアクセスする cURLの関数を作成しました。
上記の記事でも少し解説をしていますが、あくまでもカオナビ APIにアクセスするための記事ですので、こちらの記事では改めて、cURLの関数について解説をしようと思います。
cURLには多様なオプションが用意されている
cURLのオプションは多様で、さまざまなオプションが用意されています。
ここでは、APIにアクセスするときに使用することがあるオプションを実装した関数として作成してみました。
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
// cURLを利用して APIにアクセスし結果を取得する関数 function getCurl($url = null, $username = null, $password = null, $postData = null, $headerData = null){ // パラメータのチェック if(!$url){ return "error"; } // 初期設定のオプションを指定する $option = [ CURLOPT_RETURNTRANSFER => true, // 文字列として返す設定 CURLOPT_TIMEOUT => 3000, // タイムアウト時間を設定 ]; // Token取得など認証のための ID、PASS(KEY、SECRET)がある場合はそれを指定 if($username && $password){ $option[CURLOPT_USERPWD] = $username . ":" . $password; } // headerの指定がある場合はそれを指定 if($headerData){ $option[CURLOPT_HTTPHEADER] = $headerData; } // POST する値がある場合はそれを指定 if($postData){ $option[CURLOPT_POSTFIELDS] = $postData; } // cURLのセッションを初期化しオプションを指定 $ch = curl_init($url); curl_setopt_array($ch, $option); // cURLを実行 $json = curl_exec($ch); // 実行結果の各値を取得 $info = curl_getinfo($ch); $errorNo = curl_errno($ch); $errorMsg = curl_error($ch); // cURLの実行結果を判定 if ($errorNo !== CURLE_OK) { // 「CURLE_OK(0)」以外の場合はエラー // エラーコードは下記を参照し、必要に応じて分岐処理を作成する return "error"; } // ステータスコードを判定 if ($info['http_code'] !== 200) { // 200以外のステータスコードは正常な値を取得できていないためエラー処理をする return "error"; } // 実行結果は JSON形式で取得するため配列に変換して戻す return json_decode($json, true); } |
ヘッダー情報を指定する
ヘッダー情報は下記のように配列で指定します。
ヘッダー情報を複数指定する場合は、配列の値として追加をしていきます。
1 2 3 4 |
$headerData = [ "Content-Type: application/json", "Kaonavi-Token: " . $getCurlRes["access_token"], ]; |
カオナビAPIでは、ヘッダー情報に Tokenを指定して送信する方式ですので、上記のように指定します。
このほか、ヘッダー情報としては「"X-HTTP-Method-Override: GET"
」などを指定する APIもあるかと思います。
POSTする値を指定する
APIにアクセスする際、GET形式で URL内にパラメータを付与する方法もありますが、ID、PASSを送信する際はセキュリティの配慮を行い、POSTで情報を送信する場合もあります。
その場合は、POSTで送信する情報を指定しますが、下記のように配列で、キーと値を指定します。
1 2 3 4 |
$postData = [ "name" => "山田", "kana" => "やまだ", ]; |
「curl_errno()」で取得する「$errorNo
」の情報を判定する
1 2 3 4 5 6 |
// cURLの実行結果を判定 if ($errorNo !== CURLE_OK) { // 「CURLE_OK(0)」以外の場合はエラー // エラーコードは下記を参照し、必要に応じて分岐処理を作成する return "error"; } |
「curl_errno()」で取得する上記の「$errorNo
」に入っているエラーコードの詳細は下記のページから確認することができます。
https://www.php.net/manual/ja/function.curl-errno.php
エラー内容を見てもらって分かるように、ここで発生するエラーは、指定の URLにアクセスできないというエラーが多数を占めています。
開発段階ではデバッグに役に立つ情報かと思いますが、実運用段階では APIにはアクセスできる前提で動作していますので、エラーがあるか、ないかだけで分岐すれば足りるのではないか、と思います。
実運用段階でのエラーは、APIサーバが落ちているとか、URLが変わったとか、ネットワーク障害が発生したとか、プログラムの処理とは関係ない場合が多数を占めますので、エラーコードをログに残してエラー情報を確認できるようにしておけば、詳細な振り分けはあまり意味はない用意も思います。
「curl_getinfo()」で取得するステータスコードを判定する
1 2 3 4 5 |
// ステータスコードを判定 if ($info['http_code'] !== 200) { // 200以外のステータスコードは正常な値を取得できていないためエラー処理をする return "error"; } |
前項の「$errorNo」に入っているエラー情報と異なり、上記のステータスコードによるエラー判定は、APIが返答するエラーコードになります。(APIにはアクセスができた上でのエラーになります。)
APIにアクセスし、正常に情報が取得できた場合はステータスコード「200」が返ってきますので、その場合は正常処理とします。
それ以外のエラー内容については、API毎に異なりますので、API毎にそれぞれあった振り分け処理を作成する必要があるかと思います。
APIにアクセスするプログラムの性質にもよると思いますが、ここはエラーコードによってある程度分岐の処理がある方がいいのかと思います。
今回作成した cURLの関数は、カオナビ APIにアクセスすることを前提に作成したものですが、他の APIにアクセスする際も同じように利用できる場合が多いかと思いますので、必要に応じてカスタマイズして使用していただければ、と思います。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法
PHPで配列の値を、preg_replace関数でクォーテーションで囲み、implode関数で「,(カンマ)」で区切ってテキスト化する方法。この方法であれば配列が空でも分岐の処理は必要なし!
-
-
JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()
JSONとは「JavaScript Object Notation」の略でテキストベースのデータフォーマット。JSONの値をPHPで配列に変換するWebツールの紹介とその処理「json_encode()」「json_decode()」関数の解説。
-
-
cURLを利用する際の注意点「
&
」があるURLは「”
」で囲むcURLでURLはダブルクォーテーションで囲む。LinuxでもWindowsでもコマンドでは「&」は意味を持つ文字のためエラー原因になる。クォーテーションは常につけておく方が無難。
-
-
カオナビAPI Ver.2.0のtokenを取得する PHP+cURLのサンプルプログラム
PHPのcURLを使用してカオナビAPIのアクセスに必要なtoken、シートの情報を取得するサンプルプログラムを作成。cURLの処理は関数化しているため他のAPIでも流用できる。
-
-
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方を解説。要素を取得する方法、そこから属性を取得する方法を解説。また、マニュアルにはない注意点なども解説。
-
-
ECCUBEでカード決済NGの受注情報をマイページ購入履歴に表示しない方法解説
ECCUBEでカード決済に失敗しても購入履歴一覧に注文情報(受注情報)が表示される問題への対処方法を解説。受注情報レコードの作成の流れとステイタスについても解説。
-
-
PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法
「PHP スクレイピング」で検索すると「phpQuery」ばかりヒットするが、10年以上も放置されている。なので今も開発が続いている「PHP Simple HTML DOM Parser」をオススメする。
-
-
PHPのデバッグで使う print_r、var_dump、var_exportの動作の違い
PHPのデバッグ等で変数や配列の中身を確認するために使用する関数print_r、var_dump、var_exportの動作の違い、仕様の違いについて確認した。var_exportがオススメ。
-
-
PHP range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
-
ECCUBEの商品一覧ページのSEO対策!rel=”next” rel=”prev”を設定
Googleは関連あるページはその旨明示するよう求めています。ECCUBEの商品一覧ページでその求めに応じるための「rel=”next”」「rel=”prev”」について解説します。