For the complete documentation index, see llms.txt. This page is also available as Markdown.

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

特定のオペレーティングシステムでフィルタした、ゾーン別・国別のパブリッシャー統計を取得します。

最終更新

役に立ちましたか?