Programação
PHPiando #6 – Operadores e Condições
PHPiando #5 – Operadores Aritméticos, Lógicos, Literais e Relacionais
PHPiando #4 – Comandos (Entrada e Saída de dados)
Pessoal, segue o novo vídeo falando sobre tipos de Entradas e Saídas que temos na programação.
Qualquer dúvida já sabe, deixa nos comentários.
PHPiando #3 – Tipos de dados em Variáveis
E ai meu povo!
Segue o terceiro vídeo falando sobre Tipos de Dados nas variáveis…
Obs: Ignore meu irmão me chamando para jogar Dota… kkkk
PHPiando #2 – O que é Variável, Constantes e Comentários
Fala pessoal!!!!!
Estou seguindo frenetico nas aulas que prometi, e estou colocando um segundo vídeo explicando sobre Variáveis, constantes e como usar comentários no sistema.
Sem mais delongas, assistam e espero seu feedback.
PHPiando #1 – Começando pelo básico!
E ai pessoal, como comentei, quero começar uma série de vídeos explicando e mostrando na prática o desenvolvimento de um projeto web com aplicativo móvel, mas antes de meter os dedos no teclado, vamos iniciar pelo básico, Lógica de Programação, Algoritmos, Arquiteturas e por final algumas Dicas de Programação.
Vamos lá…
Você que manda!
Hi Guys!!!!
E ai meus amigos, tudo bem? Estou querendo fazer algumas postagens, porém, estou sem criatividade nos Posts. Estou tentando voltar a ser mais ativo por aqui e quero ajuda de vocês!
Quais postagens que vocês que gostariam de ver aqui no Blog? Ou, no que eu posso tentar ajudar vocês?
Coloquem nos comentários ou me mande um e-mail com alguns temas! Estou esperando você!
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!
Palestra Desenvolvedor 2.0 e a era da Mobilidade
E ai galera, tudo beleza por aqui?
No dia 23/11/2015 estive na cidade Alto Araguaia – MT para falar com a galera que estuda no curso de Ciência da Computação da faculdade UNEMAT sobre mobilidade e a vida de um desenvolvedor.
Os dois temas são bem peculiares e estão no nosso cotidiano cada vez mais, o Desenvolvedor 2.0 eu já citei ele por aqui quando tivemos um projeto em destaque na mídia e comentei um pouco sobre o que devemos fazer, apenas para dar uma pequena reforçada um Desenvolvedor é um Programador porém vejo ele de certa forma como uma evolução, pois o programador sempre tem a preocupação apenas em fazer o que pedem no sistema e o desenvolvedor já tem a preocupação em criar uma solução, questionar sempre o que pode melhorar e qual o melhor caminho, eu digo isso porque fui e sou um programador, mas a minha visão é de desenvolvedor onde estou cada vez mais envolvidos no projeto, tanto como programador como usuário, e mais importante está junto com a equipe em todas as etapas.
Além disso falamos um pouco sobre o mercado mobile que está cada dia crescendo mais, comentei sobre o Phonegap e a sua vantagem em utiliza-lo para desenvolver aplicativos híbridos, ganhando muito tempo e tendo uma praticidade e facilidade muito maior.
Entre isso falei sobre os meus projetos, como que é a vida de um desenvolvedor no dia-a-dia entre outros assuntos, conheci uma galera muito animada por lá e que possuem um futuro muito promissor, entre eles um garoto de apenas 14 anos que já está dando show de bola, ele não está na faculdade, ainda, mas fica por lá para aprender mais e desenvolver suas ideias, muito show de bola.
Obs.: Na foto eu sou o cara bonito com a camisa linda do Star Wars.. kkkkkk
Fiquei muito feliz em pode compartilhar um pouco da experiência que já tenho, e espero pode retornar por lá em breve!
Abs!