Ejemplos en PHP
Resumen
Los ejemplos de código de esta sección usan todas las siguientes clases.
La clase Request usa cURL para realizar las solicitudes a la API.
La clase Response contiene la respuesta de la API y la información del código de estado devuelto.
Clases Request y Response
class Request {
/**
* @var resource
*/
protected $_request;
/**
* @var integer
*/
protected $_method;
/**
* @var string
*/
protected $_url;
/**
* @var array
*/
protected $_headers = array(
'Content-type: application/json'
);
/**
* @var string|array
*/
protected $_params;
/**
* @var object Response
*/
protected $_reponse;
/**
* Constructor
*
* @param string $url
* @param string $method
* @param array $params
*/
public function __construct($url, $method, $params = array()) {
$this->_url = $url;
// Establecer el método
$this->_method = $method;
// Establecer los parámetros
$this->_params = $params;
}
/**
* Determinar el método 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;
}
}
/**
* Añadir encabezado de autorización
*
* @param string $type
* @param string $token
*/
public function setAuthorizationHeader($type, $token) {
$authorization = $type . ' ' . $token;
$this->_headers[] = 'Authorization: ' . $authorization;
}
/**
* Añadir cuerpo a la solicitud
*/
private function addBody() {
if($this->_method != 'GET' && empty($this->_params) == false) {
if(is_array($this->_params)) {
// Codificar el array en JSON
$this->_params = json_encode($this->_params);
}
curl_setopt($this->_request, CURLOPT_POSTFIELDS, $this->_params);
// Añadir un encabezado content-length
$this->_headers[] = 'Content-length: ' . strlen($this->_params);
}
}
/**
* Añadir una cadena de consulta a la solicitud
*/
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) {
// Hacer coincidir los parámetros con la URL
foreach($this->_params as $param => $value) {
$this->_url = preg_replace('/{' . $param . '}/', $value, $this->_url);
}
}
}
}
/**
* Enviar la solicitud
*/
public function send() {
// Inicializar la solicitud cURL
$this->_request = curl_init();
// Devolver la respuesta como una cadena
curl_setopt($this->_request, CURLOPT_RETURNTRANSFER, 1);
// Añadir una cadena de consulta
$this->addQueryString();
// Establecer la URL
curl_setopt($this->_request, CURLOPT_URL, $this->_url);
// Establecer el método de solicitud
$this->setMethod();
// Añadir un cuerpo
$this->addBody();
if(empty($this->_headers) == false) {
// Establecer los encabezados
curl_setopt($this->_request, CURLOPT_HTTPHEADER, $this->_headers);
}
// Desactivar comprobaciones SSL
curl_setopt($this->_request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->_request, CURLOPT_SSL_VERIFYHOST, false);
// Enviar la solicitud y almacenar el cuerpo
$this->_response = new Response(curl_exec($this->_request));
// Establecer el código de estado
$this->_response->setStatusCode(curl_getinfo($this->_request, CURLINFO_HTTP_CODE));
// Cerrar la conexión
curl_close($this->_request);
}
/**
* Obtener la respuesta
*
* @return object
*/
public function getResponse() {
return $this->_response;
}
}
class Response {
/**
* @var array
*/
protected $_reason_phrases = array(
// Informativas 1xx
100 => "Continuar",
101 => "Cambiando protocolos",
// Correctas 2xx
200 => "OK",
201 => "Creado",
202 => "Aceptado",
203 => "Información no autorizada",
204 => "Sin contenido",
205 => "Restablecer contenido",
206 => "Contenido parcial",
// Redirección 3xx
300 => "Múltiples opciones",
301 => "Movido permanentemente",
302 => "Encontrado",
303 => "Ver otro",
304 => "No modificado",
305 => "Usar proxy",
306 => "(Sin uso)",
307 => "Redirección temporal",
// Error del cliente 4xx
400 => "Solicitud incorrecta",
401 => "No autorizado",
402 => "Pago requerido",
403 => "Prohibido",
404 => "No encontrado",
405 => "Método no permitido",
406 => "No aceptable",
407 => "Se requiere autenticación del proxy",
408 => "Tiempo de espera de la solicitud agotado",
409 => "Conflicto",
410 => "Desaparecido",
411 => "Longitud requerida",
412 => "Falló la condición previa",
413 => "Entidad de solicitud demasiado grande",
414 => "URI de solicitud demasiado larga",
415 => "Tipo de medio no compatible",
416 => "El rango solicitado no es satisfacible",
417 => "Falló la expectativa",
// Error del servidor 5xx
500 => "Error interno del servidor",
501 => "No implementado",
502 => "Puerta de enlace incorrecta",
503 => "Servicio no disponible",
504 => "Tiempo de espera de la puerta de enlace agotado",
505 => "Versión de HTTP no compatible"
);
/**
* @var integer
*/
protected $_status_code;
/**
* @var string
*/
protected $_body;
/**
* Constructor
*
* @param string $body
*/
public function __construct($body) {
$this->_body = $body;
}
/**
* Constructor
*
* @param string $status_code
*/
public function setStatusCode($status_code) {
$this->_status_code = $status_code;
}
/**
* Obtener el código de estado
*
* @return integer
*/
public function getStatusCode() {
return $this->_status_code;
}
/**
* Obtener el cuerpo
*
* @return string
*/
public function getBody() {
return $this->_body;
}
/**
* Obtener el cuerpo decodificado en JSON
*
* @return object|null
*/
public function getBodyDecoded() {
return json_decode($this->_body);
}
/**
* Obtener la frase de motivo
*
* @return string|boolean
*/
public function getReasonPhrase() {
if(array_key_exists($this->_status_code, $this->_reason_phrases)) {
return $this->_reason_phrases[$this->_status_code];
}
else {
return false;
}
}
}Iniciar sesión
Hay dos opciones para solicitar la inicio de sesión ruta:
con nombre de usuario y contraseña
con token de API (token de acceso)
Ejemplo de inicio de sesión con parámetros de nombre de usuario y contraseña.
<?php
// Incluir las clases Request y Response
$url = 'https://api.example.com/v2/login';
$params = array(
'username' => 'sample_username',
'password' => 'sample_password'
);
// Crear un nuevo objeto Request
$request = new Request($url, 'POST', $params);
// Enviar la solicitud
$request->send();
// Obtener el objeto Response
$response = $request->getResponse();
if($response->getStatusCode() == 200) {
// Recuperar los detalles del token de sesión
$token = $response->getBodyDecoded();
print_r($token);
}
else {
echo $response->getStatusCode() . PHP_EOL;
echo $response->getReasonPhrase() . PHP_EOL;
echo $response->getBody() . PHP_EOL;
}
?>Ejemplo de inicio de sesión con token de API (token de acceso)
Autenticación
Cada solicitud a contenido relacionado con el usuario requiere un Autorización encabezado que se establezca, con el valor que contenga el tipo de token y el token de sesión recibido de la solicitud de inicio de sesión de la API.
Un /login la solicitud a la API devolverá el siguiente payload JSON.
El Token de sesión debe incluirse en todas las solicitudes posteriores de contenido relacionado con el usuario a la API.
El type debe anteponerse al token, separado por un solo espacio.
El expires_in es el tiempo en segundos durante el cual el token será válido. Cuando este tiempo expire, será necesario obtener un nuevo token mediante la solicitud /login.
Ejemplo de obtención y configuración del encabezado de autorización con nombre de usuario y contraseña
Ejemplo de obtención y configuración del encabezado de autorización con token de API
Colecciones
El siguiente es un ejemplo de una solicitud para obtener la navegadores colección.
Estadísticas
El siguiente es un ejemplo de una solicitud del anunciante para statistics/a/date.
En caso de additional_group_by se defina un valor, la solicitud se agrupará por el campo principal de la ruta y el/los adicional(es).
Ejemplo de estadísticas por fecha filtradas por el ID de campaña 1234.
Ejemplo de estadísticas por fecha con agrupación adicional por campaña.
post /statistics/a/global
Obtener estadísticas globales del anunciante
Ejemplo 1 de estadísticas globales
Ejemplo de solicitud de estadísticas globales.
Solo el group_by parámetro es obligatorio. Los valores predeterminados de los demás parámetros se pueden encontrar aquí.
Tenga en cuenta que las rutas de estadísticas globales (statistics/a/global, statistics/p/global) tienen un formato de parámetros diferente.
Ejemplo 2 de estadísticas globales
Obtener estadísticas por fecha incluyendo totales sumados.
Ejemplo 3 de estadísticas globales
Obtener estadísticas por campaña y país filtradas por una fecha específica ordenadas por impresiones.
Ejemplo 4 de estadísticas globales
Obtener estadísticas del editor por zona y país filtradas por un sistema operativo específico.
Última actualización
¿Te fue útil?

