Usando API PHP do Google Adwords – AWQL

E ai meu povo, tudo bom?

Putz… estou anos luzes sem postar nada aqui no fórum, inclusive fiz algumas promessas no passado mas não consegui realizar, porém, neste novo ano tentarei ser um pouco mais ativo no blog!
Bom, estive envolvido em vários projetos, entre eles mudei de empresa (sempre estive envolvido no setor Automobilístico trabalhando em Concessionárias, passei por um período na Fábrica da Case New Holland e hoje voltei para o setor de concessionárias, melhor dizendo, hoje desenvolvo soluções para esse setor em uma empresa focada nisso).

Neste novo desafio que estou precisei fazer algumas integrações no Google Analytics, SEO e Adwords. Baixei o SDK da Google em PHP e particularmente achei muito complexo para realizar coisas um tanto ‘simples’. E nisso resolvi compartilhar e guardar aqui no Blog a forma que realizo essas integrações usando o recurso AWQL.

Começando pelo Google Adwords…

1° Baixem a biblioteca do Google Adwords
https://github.com/googleads/googleads-php-lib

2° Sigam os passos de autenticação oAuth2 que o Google faz neste link:
https://developers.google.com/adwords/api/docs/guides/authentication?hl=pt-br

3° Realizado os passos 1 e 2, vamos configurar o arquivo ‘adsapi_php.ini’ que está dentro da pasta que você baixou.
Obs.: Estarei fazendo os testes dentro da pasta GoogleAds-Php-Lib.

<?php
[ADWORDS]
; Required AdWords API properties. Details can be found at:
; https://developers.google.com/adwords/api/docs/guides/basic-concepts#soap_and_xml
developerToken = "SEU_TOKEN"
clientCustomerId = "CLIENT_ID VOCÊ PEGA NA CONTA DO ADWORDS"

; Optional. Set a friendly application name identifier.
; userAgent = "INSERT_USER_AGENT_HERE"

; Optional additional AdWords API settings.
; endpoint = "https://adwords.google.com/"
; isPartialFailure = false

; Optional setting for utility usage tracking in the user agent in requests.
; Defaults to true.
; includeUtilitiesInUserAgent = true

[ADWORDS_REPORTING]
; Optional reporting settings.
; isSkipReportHeader = false
; isSkipColumnHeader = false
; isSkipReportSummary = false
; isUseRawEnumValues = false

[OAUTH2]
; Required OAuth2 credentials. Uncomment and fill in the values for the
; appropriate flow based on your use case. See the README for guidance:
; https://github.com/googleads/googleads-php-lib/blob/master/README.md#getting-started

; For installed application or web application flow.
 clientId = "CLIENT ID DO PROJETO CRIADO NO CONSOLE DEVELOPER"
 clientSecret = "SENHA CRIADO NO PROJETO DO CONSOLE DEVELOPER"
 refreshToken = "ESSE ITEM VOCÊ CONSEGUE PEGANDO OAUTH2 PLAYGROUD (SEGUIR O PASSO 2)"

; For service account flow.
;jsonKeyFilePath = ""
;scopes = "https://www.googleapis.com/auth/adwords"
;impersonatedEmail = ""

[SOAP]
; Optional SOAP settings. See SoapSettingsBuilder.php for more information.
; compressionLevel = 

[CONNECTION]
; Optional proxy settings to be used by requests.
; If you don't have username and password, just specify host and port.
; proxy = "protocol://user:pass@host:port"
; Enable transparent HTTP gzip compression for all reporting requests.
; enableReportingGzip = false

[LOGGING]
; Optional logging settings.
; soapLogFilePath = "path/to/your/soap.log"
; soapLogLevel = "INFO"
; reportDownloaderLogFilePath = "path/to/your/report-downloader.log"
; reportDownloaderLogLevel = "INFO"
; batchJobsUtilLogFilePath = "path/to/your/bjutil.log"
; batchJobsUtilLogLevel = "INFO"
?>

Feito isto, vamos ao primeiro código, na pasta raiz do Google crie um arquivo chamado ‘index.php’.

<?php
ini_set('display_errors',1);
ini_set('display_startup_erros',1);
error_reporting(E_ALL);

require __DIR__ . '/vendor/autoload.php';

use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\ReportSettingsBuilder;
use Google\AdsApi\AdWords\v201705\cm\CampaignService;
use Google\AdsApi\AdWords\v201702\cm\ReportDefinitionReportType;
use Google\AdsApi\AdWords\v201702\cm\ReportDefinitionService;
use Google\AdsApi\AdWords\Reporting\v201705\ReportDownloader;
use Google\AdsApi\AdWords\v201705\cm\OrderBy;
use Google\AdsApi\AdWords\v201705\cm\Paging;
use Google\AdsApi\AdWords\v201705\cm\Selector;
use Google\AdsApi\Common\OAuth2TokenBuilder;

class Adwords
{    

    public static function getData(){
        $oAuth2Credential = (new OAuth2TokenBuilder())
            ->fromFile()
            ->build();            

        /*
            Aqui você pode recuperar dados de outro clientId, diferente do que informou no adsapi_php.ini
            porém pode retirar o método "withClientCustomerId" para pegar os dados padrões do clientId do arquivo adsapi
        */
        $session = (new AdWordsSessionBuilder())
            ->fromFile()
            ->withOAuth2Credential($oAuth2Credential)  
            ->withClientCustomerId('CLIENT_ID_CUSTOMER')                      
            ->build();   
        
        #Utilizando AWQL poderá ver os exemplos e combinações no link: https://developers.google.com/adwords/api/docs/appendix/reports
        $reportQuery = 'SELECT Impressions,Clicks, Cost, AverageCpc, Conversions, ConversionRate, CostPerConversion 
                 FROM ACCOUNT_PERFORMANCE_REPORT DURING 20171101,20171130';
        
        $reportFormat = 'XML';
        $reportDownloader = new ReportDownloader($session);
        $reportDownloadResult = $reportDownloader->downloadReportWithAwql(
        $reportQuery, $reportFormat);

        $datatest =  $reportDownloadResult->getAsString();

        $xml = simplexml_load_string($datatest);
        $json = json_encode($xml);        

        //return array        
        echo ($json);                
    }
}

AdWords::getData();
?>

O retorno que você terá será algo parecido com isto:

{  
   "report-name":{  
      "@attributes":{  
         "name":"ACCOUNT_PERFORMANCE_REPORT"
      }
   },
   "date-range":{  
      "@attributes":{  
         "date":"Nov 1, 2017-Nov 30, 2017"
      }
   },
   "table":{  
      "columns":{  
         "column":[  
            {  
               "@attributes":{  
                  "name":"impressions",
                  "display":"Impressions"
               }
            },
            {  
               "@attributes":{  
                  "name":"clicks",
                  "display":"Clicks"
               }
            },
            {  
               "@attributes":{  
                  "name":"cost",
                  "display":"Cost"
               }
            },
            {  
               "@attributes":{  
                  "name":"avgCPC",
                  "display":"Avg. CPC"
               }
            },
            {  
               "@attributes":{  
                  "name":"conversions",
                  "display":"Conversions"
               }
            },
            {  
               "@attributes":{  
                  "name":"convRate",
                  "display":"Conv. rate"
               }
            },
            {  
               "@attributes":{  
                  "name":"costConv",
                  "display":"Cost \/ conv."
               }
            }
         ]
      },
      "row":{  
         "@attributes":{  
            "impressions":"752389",
            "clicks":"16051",
            "cost":"2246940000",
            "avgCPC":"139988",
            "conversions":"137.00",
            "convRate":"0.85%",
            "costConv":"16401022"
         }
      }
   }
}

Muito simples não é? Desta maneira achei mais rápido e fácil realizar as integrações e retorno de dados do Google Adwords.

Bônus: Os valores monetários, por exemplo, “costConv” (Custo de conversões) é retornado em microunidades monetárias então é necessário realizar um cálculo para encontrar o valor ‘real’, um exemplo disso:

//(16401022 / 1000000) = R$ 16,40
$costConv / 1000000;

Está e outras dicas poderá ser visto no link:
https://developers.google.com/adwords/api/docs/guides/reporting?hl=pt-br

Até a próxima galera!

Criando aplicativo usando Cordova + PHP + MYSQL

Fala galeris!

Algum tempo venho vendo nos fóruns de discussões do Phonegap, Cordova e outros, um assunto que é relativamente simples, (isto é se você já programa algum tempo usando a tecnologia html5+javascript+php) “Como conectar minha aplicação em algum banco de dados ou recuperar dados de algum banco”.

Continue lendo este artigo clicando aqui

Desenvolvendo aplicativos com Html – Cordova

Já algum tempo venho desenvolvendo aplicativos com Html/Javascript/Php usando Cordova (explicarei sobre ele adiante) a grande maioria desses aplicativos desenvolvo para empresas que precisam de contatos com seus clientes ou com seus colaboradores (intranet).

Continue lendo o artigo sobre desenvolvimento de aplicativos em Html

Obtendo latitude e longitude com Api Google

Fala galera, algum tempo atrás em um Freela que fiz precisei capturar a Latitude/Longitude através de um endereço que o usuário iria informar.
O Google hoje fornece uma Api que retorna para nós várias informações tudo através do endereço.

Mas sem mais delongas vamos começar…

Continue lendo – Como obter latitude e longitude

Instalando Apache e Php no Mac

Bom, para iniciarmos os trabalhos precisamos antes de tudo do nosso ambiente de desenvolvimento…
Hoje trabalho com 3 sistemas operacionais meu particular é um OS X Yosemite, na empresa no qual trabalho utilizo o Windows 8 e Linux, tentarei fazer um tutorial para criar o ambiente em cada sistema, porém vou iniciar no OS X.

Continue lendo a instalação, clique aqui

Piu, Mundo!

Olá, como primeiro post do blog nada melhor do que dizermos o que será o Phpiando e quem compõem esse paranauê por aqui…

Bom, primeiramente quem vós escreve aqui é o Roni apaixonado por tecnologia e por desenvolvimento já trabalho aproximadamente 10 anos nesta area, 1/3 da minha vida podemos dizer… A ideia de montar o blog ja tinha algum tempo, sempre gostei de compartilhar conhecimento, alias, tive a paixão por desenvolvimento em Java, mais especificadamente por um jogo que na época era o auge na Lan House que trabalhava chamado Lineage 2, como naquela época o jogo era pago,  tinha milhares de servidores piratas, e após muitos pedidos da galera que frequentava a lan house montei um servidor pirata, a questão era que montei algo sem saber absolutamente nada de programação, após isso para manter o suporte no meu servidor precisei me virar nos 30 inclusive aprender a programar em Java (servidor era feito em java), conhecer Html, Xml, Python, tudo que era necessário para manter um servidor no ar, e nesse tempo comecei ensinar outras pessoas que tinham duvidas na hora de montar os servidores, depois de um tempo eu desenvolvi uma versão própria de um servidor que modéstia a parte fez muito sucesso na internet, além disso fazia tutoriais e outras coisas pra ajudar a galera novata. (Procure no Google: lineage over12)

Após a minha aventura na pirataria me dediquei mais em desenvolvimentos e foi quando comecei a desenvolver para Web usando Php e Javascript, abandonei o Java e me dediquei mais nestas duas linguagens que desde então já desenvolvi muito sistema, sites, e recentemente aplicativos usando Cordova (excelente framework, pretendo criar um post falando sobre ele), não sei tudo, busco constantemente aprender coisas novas e acredito que melhor forma de aprender e compartilhando o que sabe.

Bem, tem muita historia e muita coisa que aconteceu que não irei colocar por aqui, deixarei para outro dia.

Além de mim teremos também dois grandes amigos meus que poderão/irão fazer postagens por aqui, Anderson e Juliano, pelo menos estou espero que eles participem também, o Anderson é um cara parceiro que não tem tempo ruim e no que puder fazer para lhe ajudar pode ter certeza que ele vai fazer, ele entende de tudo e um pouco mais, Juliano é um pouco desligado você precisa falar uma ou duas vezes com ele para assim ter atenção dele, mas é um cara que manja muito de infraestrutura principalmente na parte de Redes e Servidores, e você poderá esperar ótimas postagens de conteúdo e informações desses dois por aqui, ops e de mim também.

Mas em resumo nosso objetivo aqui é simples…

– Trocar conhecimentos
– Postar novidades tanto no mundo de Desenvolvimento como de Tecnologia
– Ter uma base como referência de conteúdos e de classes prontas para agilizar desenvolvimentos.
– Entre outras novidades.

E é isso galera, próximos Posts, colocarei algumas classes e algumas informações que já pretendo compartilhar.

Espero que gostem!

Abs!

1 2 3 4