Exemplos em PHP
Visão geral
Todos os exemplos de código nesta seção usam as classes a seguir.
A classe Request usa cURL para fazer as solicitações à API.
A classe Response contém a resposta da API e informações do código de status retornado.
Classes Request e 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;
/**
* Construtor
*
* @param string $url
* @param string $method
* @param array $params
*/
public function __construct($url, $method, $params = array()) {
$this->_url = $url;
// Definir o método
$this->_method = $method;
// Definir os parâmetros
$this->_params = $params;
}
/**
* Determinar o método da 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;
}
}
/**
* Adicionar cabeçalho de autorização
*
* @param string $type
* @param string $token
*/
public function setAuthorizationHeader($type, $token) {
$authorization = $type . ' ' . $token;
$this->_headers[] = 'Authorization: ' . $authorization;
}
/**
* Adicionar corpo à solicitação
*/
private function addBody() {
if($this->_method != 'GET' && empty($this->_params) == false) {
if(is_array($this->_params)) {
// Codificar o array em JSON
$this->_params = json_encode($this->_params);
}
curl_setopt($this->_request, CURLOPT_POSTFIELDS, $this->_params);
// Adicionar um cabeçalho Content-length
$this->_headers[] = 'Content-length: ' . strlen($this->_params);
}
}
/**
* Adicionar uma string de consulta à solicitação
*/
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) {
// Comparar parâmetros com a URL usando padrão
foreach($this->_params as $param => $value) {
$this->_url = preg_replace('/{' . $param . '}/', $value, $this->_url);
}
}
}
}
/**
* Enviar a solicitação
*/
public function send() {
// Inicializar solicitação cURL
$this->_request = curl_init();
// Retornar a resposta como uma string
curl_setopt($this->_request, CURLOPT_RETURNTRANSFER, 1);
// Adicionar uma string de consulta
$this->addQueryString();
// Definir a URL
curl_setopt($this->_request, CURLOPT_URL, $this->_url);
// Definir o método da solicitação
$this->setMethod();
// Adicionar um corpo
$this->addBody();
if(empty($this->_headers) == false) {
// Definir os cabeçalhos
curl_setopt($this->_request, CURLOPT_HTTPHEADER, $this->_headers);
}
// Desativar verificações SSL
curl_setopt($this->_request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->_request, CURLOPT_SSL_VERIFYHOST, false);
// Enviar a solicitação e armazenar o corpo
$this->_response = new Response(curl_exec($this->_request));
// Definir o código de status
$this->_response->setStatusCode(curl_getinfo($this->_request, CURLINFO_HTTP_CODE));
// Fechar a conexão
curl_close($this->_request);
}
/**
* Obter a resposta
*
* @return object
*/
public function getResponse() {
return $this->_response;
}
}
class Response {
/**
* @var array
*/
protected $_reason_phrases = array(
//Informativo 1xx
100 => "Continuar",
101 => "Mudando de protocolo",
// Sucesso 2xx
200 => "OK",
201 => "Criado",
202 => "Aceito",
203 => "Informação não autoritativa",
204 => "Sem conteúdo",
205 => "Redefinir conteúdo",
206 => "Conteúdo parcial",
// Redirecionamento 3xx
300 => "Múltiplas escolhas",
301 => "Movido permanentemente",
302 => "Encontrado",
303 => "Ver outro",
304 => "Não modificado",
305 => "Usar proxy",
306 => "(Não utilizado)",
307 => "Redirecionamento temporário",
// Erro do cliente 4xx
400 => "Pedido inválido",
401 => "Não autorizado",
402 => "Pagamento necessário",
403 => "Proibido",
404 => "Não encontrado",
405 => "Método não permitido",
406 => "Não aceitável",
407 => "Autenticação de proxy necessária",
408 => "Tempo limite da solicitação",
409 => "Conflito",
410 => "Indisponível",
411 => "Comprimento necessário",
412 => "Falha na pré-condição",
413 => "Entidade da solicitação muito grande",
414 => "URI da solicitação muito longa",
415 => "Tipo de mídia não suportado",
416 => "Intervalo solicitado não satisfatório",
417 => "Falha na expectativa",
// Erro do servidor 5xx
500 => "Erro interno do servidor",
501 => "Não implementado",
502 => "Gateway inválido",
503 => "Serviço indisponível",
504 => "Tempo limite do gateway",
505 => "Versão HTTP não suportada"
);
/**
* @var integer
*/
protected $_status_code;
/**
* @var string
*/
protected $_body;
/**
* Construtor
*
* @param string $body
*/
public function __construct($body) {
$this->_body = $body;
}
/**
* Construtor
*
* @param string $status_code
*/
public function setStatusCode($status_code) {
$this->_status_code = $status_code;
}
/**
* Obter código de status
*
* @return integer
*/
public function getStatusCode() {
return $this->_status_code;
}
/**
* Obter corpo
*
* @return string
*/
public function getBody() {
return $this->_body;
}
/**
* Obter corpo decodificado em JSON
*
* @return object|null
*/
public function getBodyDecoded() {
return json_decode($this->_body);
}
/**
* Obter 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 sessão
Há duas opções para solicitar a login rota:
com nome de usuário e senha
com token de API (token de acesso)
Exemplo de login com parâmetros de nome de usuário e senha.
<?php
// Incluir as classes Request e Response
$url = 'https://api.example.com/v2/login';
$params = array(
'username' => 'sample_username',
'password' => 'sample_password'
);
// Criar um novo objeto Request
$request = new Request($url, 'POST', $params);
// Enviar a solicitação
$request->send();
// Obter o objeto Response
$response = $request->getResponse();
if($response->getStatusCode() == 200) {
// Recuperar os detalhes do token de sessão
$token = $response->getBodyDecoded();
print_r($token);
}
else {
echo $response->getStatusCode() . PHP_EOL;
echo $response->getReasonPhrase() . PHP_EOL;
echo $response->getBody() . PHP_EOL;
}
?>Exemplo de login com token de API (token de acesso)
Autenticação
Cada solicitação a conteúdo relacionado ao usuário requer um Autorização cabeçalho a ser definido, com o valor contendo o tipo de token e o token de sessão recebido da solicitação de login da API.
Uma /login solicitação válida à API retornará o seguinte payload JSON.
O O token de sessão deve ser incluído em todas as solicitações subsequentes de conteúdo relacionado ao usuário para a API.
O type deve ser prefixado ao token, separado por um único espaço.
O expires_in é o tempo, em segundos, durante o qual o token será válido. Quando esse tempo expirar, será necessário obter um novo token por meio da solicitação /login.
Exemplo de obtenção e definição do cabeçalho de autorização com nome de usuário e senha
Exemplo de obtenção e definição do cabeçalho de autorização com token de API
Coleções
A seguir está um exemplo de uma solicitação para obter a Navegadores coleção.
Estatísticas
A seguir está um exemplo de uma solicitação do anunciante para statistics/a/date.
No caso de additional_group_by o valor estar definido, a solicitação será agrupada pelo campo principal da rota e pelo(s) campo(s) extra(s).
Exemplo de estatísticas por data filtradas pelo ID da campanha 1234.
Exemplo de estatísticas por data com agrupamento adicional por campanha.
post /statistics/a/global
Obter estatísticas globais do anunciante
Exemplo 1 de estatísticas globais
Exemplo de solicitação de estatísticas globais.
Apenas o group_by parâmetro é obrigatório. Os valores padrão dos outros parâmetros podem ser encontrados aqui.
Observe que as rotas de estatísticas globais (statistics/a/global, statistics/p/global) têm formatos de parâmetros diferentes.
Exemplo 2 de estatísticas globais
Obter estatísticas por data, incluindo totais somados.
Exemplo 3 de estatísticas globais
Obter estatísticas por campanha e país filtradas por data específica, ordenadas por impressões.
Exemplo 4 de estatísticas globais
Obter estatísticas do publisher por zona e país filtradas por sistema operacional específico.
Última atualização
Isto foi útil?

