インソースマーケティングデザイン
2018.03.14 システム
[PHP] cURL関数を使ってWEB APIより情報を取得してみよう
こんにちは。エンジニアの高田です。
花粉の季節がはじまりました…。ツライ季節です。
最近PHPアプリからWEB APIを呼び出して情報を取得するというプロジェクトが続いたので、API呼び出すために使用したPHPの「cURL関数」について紹介したいと思います。
最近では有名なサービスにはAPIがたいてい準備されています。
↓こんなものがあるらしいですよ。ご参照ください。
参考:海外・国内の便利なAPI一覧 – API LIST 100+ – Social Media Surf
cURL関数とは
「cURL」とは、HTTPリクエストにより外部サイトの情報を取得することができる関数です。
HTTPリクエストで情報を取得するには、簡単に利用できる「file_get_contents」という関数もあります。
しかし、リクエスト方法をカスタマイズしたい時に便利なのがcURL関数です。
今回のようなWEB APIを呼び出して情報をPOSTしたり、様々な形式の情報を取得したりするには「cURL」のほうが有用です。
参考:PHP: cURL 関数 – Manual
参考:PHP: file_get_contents – Manual
基本的な curl の使用法
cURLを使用するには、PHPをcURLサポート機能付きでコンパイルする必要があります。
詳細は、マニュアルを参照ください。
cURL 関数の基本的な使用法は、以下の流れで行います。
1. curl_init() セッションを初期化
cURLセッションを初期化します。
成功すれば、cURL ハンドルを返します。
このハンドルは、関数 curl_setopt(), curl_exec(), curl_close() で使用します。
resource curl_init ([ string $url = NULL ] )
2. curl_setopt() 転送時のオプションを設定
cURL 転送用オプションを設定します。
詳細はあとで説明します。
bool curl_setopt ( resource $ch , int $option , mixed $value )
3. curl_exec() 転送を実行
cURL セッションを実行します。
mixed curl_exec ( resource $ch )
4. curl_close() セッションを終了する
cURL セッションを終了します。
void curl_close ( resource $ch )
cURL関数の基本的な使用例
cURL 関数を使用して 弊社のホームページを取得してみます。
<?php
$url = "https://insource-mkd.co.jp/";
// cURLセッションを初期化
$ch = curl_init();
// オプションを設定
curl_setopt($ch, CURLOPT_URL, $url); // 取得するURLを指定
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // サーバー証明書の検証を行わない
// URLの情報を取得
$response = curl_exec($ch);
// 取得結果を表示
echo $response;
// セッションを終了
curl_close($conn);
?>
WEB APIより情報を取得してみる
それでは実際に、WEB APIより情報を取得してみましょう。
開発者にはおなじみのプログラミング関連のコミュニティ「Qiita」で認証せずに使用できるAPIがあったので、それを呼び出してみます。
参考:Qiita API v2ドキュメント – Qiita:Developer
Qiita API「GET /api/v2/items」
投稿の一覧を作成日時の降順で返します。
データ形式はJSONです。
<?php
$url = "https://qiita.com/api/v2/items";
// cURLセッションを初期化
$ch = curl_init();
// オプションを設定
curl_setopt($ch, CURLOPT_URL, $url); // 取得するURLを指定
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // サーバー証明書の検証を行わない
// URLの情報を取得
$response = curl_exec($ch);
// 取得結果を表示
echo $response;
$result = json_decode($response, true);
// セッションを終了
curl_close($conn);
?>
cURL 転送用オプション
設定できるオプションは沢山あるので、主なものを調べてみました。
bool curl_setopt ( resource $ch , int $option , mixed $value )
配列で複数指定する場合は、「curl_setopt_array」でも設定できるようです。
参考:PHP: curl_setopt_array – Manual
bool curl_setopt_array ( resource $ch , array $options )
CURLOPT_URL
取得するURLを設定します。
curl_init() でセッションを 初期化する際に指定することも可能です。
CURLOPT_RETURNTRANSFER
「true」を設定すると、curl_exec() の返り値を 文字列で返します。
通常はデータを直接出力します。
CURLOPT_ENCODING
“Accept-Encoding: ” ヘッダの内容。 これにより、応答のデコードを可能にします。
サポートされる エンコーディングは “identity”、 “deflate” および “gzip” です。
もし空文字列 “” が指定された場合、 サポートされるエンコーディングをすべて含むヘッダが送信されます。
CURLOPT_MAXREDIRS
リダイレクトする回数の上限 (CURLOPT_FOLLOWLOCATIONとあわせて使用)。
指定したURLがリダイレクトなどしていた場合、そのリダイレクトされているURLを辿ってくれます。
CURLOPT_TIMEOUT
cURL関数がタイムアウトするまでの秒数
CURLOPT_HTTP_VERSION
CURL_HTTP_VERSION_NONE (デフォルト。 使用するバージョンを決めるのは cURL にまかせる)
CURL_HTTP_VERSION_1_0 (HTTP/1.0 を使用する)
あるいは CURL_HTTP_VERSION_1_1 (HTTP/1.1 を使用する) のいずれかです。
CURLOPT_CUSTOMREQUEST
HTTP リクエストで “GET” あるいは “HEAD” 以外に 使用するカスタムメソッド。
使用可能な値は “GET”、 “POST”、”CONNECT” などです。
WEB APIで値を送信したい場合は、これを「POST」に設定し、
「CURLOPT_POSTFIELDS」にパラメータを設定します。
CURLOPT_POSTFIELDS
HTTP “POST” で送信するすべてのデータ。
CURLOPT_HTTPHEADER
設定する HTTP ヘッダフィールドの配列。
array(‘Content-type: text/plain’, ‘Content-length: 100’) 形式。
CURLOPT_HEADER
TRUE を設定すると、ヘッダの内容も出力します。
CURLOPT_SSL_VERIFYPEER
FALSE を設定すると、cURL はサーバー証明書の検証を行いません。
「CURLOPT_SSL_VERIFYHOST」とセットで設定することが多いです。
以上です。ではまた。