PHPの例
概要
このセクションのコードサンプルでは、以下のクラスをすべて使用します。
Requestクラスは cURL を使用してAPIへのリクエストを行います。
ResponseクラスにはAPIレスポンスと返されたステータスコード情報が含まれます。
RequestクラスとResponseクラス
class Request {
/**
* @var resource
*/
protected $_request;
/**
* @var 整数
*/
protected $_method;
/**
* @var 文字列
*/
protected $_url;
/**
* @var 配列
*/
protected $_headers = array(
'Content-type: application/json'
);
/**
* @var 文字列|配列
*/
protected $_params;
/**
* @var Responseオブジェクト
*/
protected $_reponse;
/**
* コンストラクタ
*
* @param string $url
* @param string $method
* @param array $params
*/
public function __construct($url, $method, $params = array()) {
$this->_url = $url;
// メソッドを設定
$this->_method = $method;
// パラメータを設定
$this->_params = $params;
}
/**
* Requestメソッドを決定
*
* @param string $method
*/
private function setMethod() {
switch($this->_method) {
case 'GET':
break;
case 'POST':
curl_setopt($this->_request, CURLOPT_POST, 1);
break;
case 'PUT':
curl_setopt($this->_request, CURLOPT_CUSTOMREQUEST, 'PUT');
break;
case 'DELETE':
curl_setopt($this->_request, CURLOPT_CUSTOMREQUEST, 'DELETE');
break;
}
}
/**
* 認証ヘッダーを追加
*
* @param string $type
* @param string $token
*/
public function setAuthorizationHeader($type, $token) {
$authorization = $type . ' ' . $token;
$this->_headers[] = 'Authorization: ' . $authorization;
}
/**
* リクエストに本文を追加
*/
private function addBody() {
if($this->_method != 'GET' && empty($this->_params) == false) {
if(is_array($this->_params)) {
// 配列をJSONエンコードする
$this->_params = json_encode($this->_params);
}
curl_setopt($this->_request, CURLOPT_POSTFIELDS, $this->_params);
// Content-lengthヘッダーを追加
$this->_headers[] = 'Content-length: ' . strlen($this->_params);
}
}
/**
* リクエストにクエリ文字列を追加
*/
private function addQueryString() {
if($this->_method == 'GET' && is_array($this->_params) && count($this->_params) > 0) {
$query_string = '?';
foreach($this->_params as $param => $value) {
$query_string = $query_string . $param . '=' . $value . '&';
}
trim($query_string, '&');
$this->_url = $this->_url . $query_string;
}
else {
if(is_array($this->_params) && count($this->_params) > 0 && strpos($this->_url, '{') !== false) {
// パラメータをURLに対してパターンマッチする
foreach($this->_params as $param => $value) {
$this->_url = preg_replace('/{' . $param . '}/', $value, $this->_url);
}
}
}
}
/**
* リクエストを送信
*/
public function send() {
// cURLリクエストを初期化
$this->_request = curl_init();
// レスポンスを文字列として返す
curl_setopt($this->_request, CURLOPT_RETURNTRANSFER, 1);
// クエリ文字列を追加
$this->addQueryString();
// URLを設定
curl_setopt($this->_request, CURLOPT_URL, $this->_url);
// リクエストメソッドを設定
$this->setMethod();
// 本文を追加
$this->addBody();
if(empty($this->_headers) == false) {
// ヘッダーを設定
curl_setopt($this->_request, CURLOPT_HTTPHEADER, $this->_headers);
}
// SSLチェックを無効化
curl_setopt($this->_request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->_request, CURLOPT_SSL_VERIFYHOST, false);
// リクエストを送信して本文を保存
$this->_response = new Response(curl_exec($this->_request));
// ステータスコードを設定
$this->_response->setStatusCode(curl_getinfo($this->_request, CURLINFO_HTTP_CODE));
// 接続を閉じる
curl_close($this->_request);
}
/**
* レスポンスを取得
*
* @return オブジェクト
*/
public function getResponse() {
return $this->_response;
}
}
class Response {
/**
* @var 配列
*/
protected $_reason_phrases = array(
// 情報応答 1xx
100 => "継続",
101 => "プロトコルを切り替え",
// 成功 2xx
200 => "OK",
201 => "作成されました",
202 => "受理されました",
203 => "権威のない情報",
204 => "コンテンツなし",
205 => "コンテンツをリセット",
206 => "部分的なコンテンツ",
// リダイレクト 3xx
300 => "複数の選択肢",
301 => "永続的に移動しました",
302 => "見つかりました",
303 => "他を参照",
304 => "変更されていません",
305 => "プロキシを使用",
306 => "(未使用)",
307 => "一時的なリダイレクト",
// クライアントエラー 4xx
400 => "不正なリクエスト",
401 => "認証されていません",
402 => "支払いが必要",
403 => "禁止されています",
404 => "見つかりません",
405 => "メソッドは許可されていません",
406 => "受け入れられません",
407 => "プロキシ認証が必要",
408 => "リクエストタイムアウト",
409 => "競合",
410 => "なくなりました",
411 => "長さが必要",
412 => "前提条件に失敗しました",
413 => "リクエストエンティティが大きすぎます",
414 => "Request-URIが長すぎます",
415 => "サポートされていないメディアタイプ",
416 => "要求した範囲は満たせません",
417 => "期待に失敗しました",
// サーバーエラー 5xx
500 => "サーバー内部エラー",
501 => "実装されていません",
502 => "不正なゲートウェイ",
503 => "サービス利用不可",
504 => "ゲートウェイタイムアウト",
505 => "HTTPバージョンはサポートされていません"
);
/**
* @var 整数
*/
protected $_status_code;
/**
* @var 文字列
*/
protected $_body;
/**
* コンストラクタ
*
* @param string $body
*/
public function __construct($body) {
$this->_body = $body;
}
/**
* コンストラクタ
*
* @param string $status_code
*/
public function setStatusCode($status_code) {
$this->_status_code = $status_code;
}
/**
* ステータスコードを取得
*
* @return 整数
*/
public function getStatusCode() {
return $this->_status_code;
}
/**
* 本文を取得
*
* @return 文字列
*/
public function getBody() {
return $this->_body;
}
/**
* 本文をJSONデコードして取得
*
* @return オブジェクト|null
*/
public function getBodyDecoded() {
return json_decode($this->_body);
}
/**
* 理由フレーズを取得
*
* @return 文字列|真偽値
*/
public function getReasonPhrase() {
if(array_key_exists($this->_status_code, $this->_reason_phrases)) {
return $this->_reason_phrases[$this->_status_code];
}
else {
return false;
}
}
}ログイン
以下の2つの方法で ログイン ルートを要求できます:
ユーザー名とパスワードで
APIトークン(アクセストークン)で
ユーザー名とパスワードのパラメータを使用したログインの例。
<?php
// RequestクラスとResponseクラスを読み込む
$url = 'https://api.example.com/v2/login';
$params = array(
'username' => 'sample_username',
'password' => 'sample_password'
);
// 新しいRequestオブジェクトを作成
$request = new Request($url, 'POST', $params);
// リクエストを送信
$request->send();
// Responseオブジェクトを取得
$response = $request->getResponse();
if($response->getStatusCode() == 200) {
// セッショントークンの詳細を取得
$token = $response->getBodyDecoded();
print_r($token);
}
else {
echo $response->getStatusCode() . PHP_EOL;
echo $response->getReasonPhrase() . PHP_EOL;
echo $response->getBody() . PHP_EOL;
}
?>APIトークン(アクセストークン)を使用したログインの例
認証
ユーザー関連コンテンツへの各リクエストでは、 Authorization ヘッダーを設定する必要があり、その値にはトークン種別とAPIのログインリクエストで受け取ったセッショントークンを含めます。
有効な /login APIへのリクエストは次のjsonペイロードを返します。
その セッショントークン は、その後のすべてのユーザー関連コンテンツへのAPIリクエストに含める必要があります。
その type は、トークンの前に単一のスペースで区切って付ける必要があります。
その expires_in は、トークンが有効である秒数です。この時間が切れると、/loginリクエストを通じて新しいトークンを取得する必要があります。
ユーザー名とパスワードを使用した認証ヘッダーの取得と設定の例
APIトークンを使用した認証ヘッダーの取得と設定の例
コレクション
以下は、 ブラウザ コレクションを取得するリクエストの例です。
統計
以下は、広告主が statistics/a/date.
場合 additional_group_by という値が定義されている場合、リクエストはメインのルートフィールドと追加のフィールドでグループ化されます。
キャンペーンID 1234でフィルタした日付別統計の例。
キャンペーンでの追加グループ化を含む日付別統計の例。
post /statistics/a/global
広告主のグローバル統計を取得
グローバル統計の例1
グローバル統計リクエストの例。
必須なのは group_by パラメータのみです。その他のパラメータのデフォルト値は こちら.
グローバル統計ルート(statistics/a/global, statistics/p/global)については、パラメータ形式が異なりますのでご注意ください。
グローバル統計の例2
合計値を含む日付別統計を取得します。
グローバル統計の例3
指定日でフィルタし、インプレッション順に並べたキャンペーン別・国別統計を取得します。
グローバル統計の例4
特定のオペレーティングシステムでフィルタした、ゾーン別・国別のパブリッシャー統計を取得します。
最終更新
役に立ちましたか?

