Como recuperar os comentários dos produtos feitos pelos usuários do BuscaPé

Uma vez me perguntei porque não aproveitar o que os clientes escreviam sobre um produto (bem ou mal) nos comparadores como o BuscaPé? Procurei inúmeras vezes pela internet e nada de encontrar alguém falando sobre isso.

Fui atras e encontrei a API do BuscaPé Developer e pronto meu desejo começou a torna-se realidade. Foi então que criei a classe que compartilho com você agora. É possível fazer muitas coisas com essa API, e as explicações são bem explicativas e com exemplos de implementações, além de ter a opção de monetização $$ (ótimo para quem precisa).

O próximo passo seria um gestor de comentários sobre os produtos, como o COMENTA que já não esta mais disponível, mas a ideia é muito bacana. Quem sabe não tomo coragem e coloco isso em pratica.

Primeiramente é necessário criar um cadastro no BuscaPé. Tem uma página da própria empresa explicando tudo direitinho.

http://developer.buscape.com/tutoriais/procedimentos-para-desenvolver-sua-aplicacao/

Após criado o aplicativo de conexão você terá acesso a sua chave que será usado nessa conexão. O código foi desenvolvido em PHP, mas pode ser convertido facilmente em outras linguagens.

Depois que implementar você somente precisa fazer uma tabela do seu código de produto para o código do BuscaPé.

Para conseguir o código do Produto BuscaPé, existe um truque. Quando você abre o código fonte da pagina, procure por “unico”, você encontrará um atributo dessa forma da imagem.

codigo-fonte-buscape

Depois é só copiar o atributo “prodId” para a sua tabela de relacionamento.

Abraço e colaborações serão bem vindas.

<?php
class BuscaPe
{
 private $code = 0; 
 private $host = '';
 private $url = 'sandbox.buscape.com’; // utilize essa URL no modo DESENVOLVIMENTO
 //private $url = 'bws.buscape.com'; // URL de Produção
 private $key = [CHAVE_DESENVOLVEDOR];
 private $_data = null;
 public function __construct($code)
 {
 $this->initialize($code);
 return $this;
 }

 private function initialize($code)
 {
 $this->host = $_SERVER['SERVER_ADDR'];
 $this->setCode($code)->viewUserRatings();
 return $this;
 }
 /* attributes -> in */
 private function setCode($code)
 {
 if ($code > 0) $this->code = $code;
 return $this;
 }
 private function getCode()
 {
 return $this->code;
 }
 private function getHost()
 {
 return $this->host;
 }

 /* attributes -> out */
 private function setData($_data)
 {
 $this->_data = $_data;
 return $this;
 }
 public function getData()
 {
 return $this->_data;
 }

 private function getUserRating()
 {
 return $this->userRating;
 }
 private function setUserRating($userRating)
 {
 $this->userRating = $userRating;
 return $this;
 }

 private function getUserOpinions()
 {
 return $this->userOpinions;
 }
 private function setUserOpinions($userOpinions)
 {
 $this->userOpinions = $userOpinions;
 return $this;
 }

 private function getURL($service=‘viewUserRatings’)
 {
 $url = null;
 if ($this->getCode() > 0 &$service != ‘’) $url = 'http://'.$this->url.'/service/‘.$service.’/‘.$this->key.'/BR/?productId='.$this->getCode().'&clientIp='.$this->host;
 return $url;
 }

 /* Resource */
 public function viewUserRatings()
 {
 $url = $this->getURL('viewUserRatings');
 if ($url != null)
 {
 $xml = simplexml_load_file($url);
 if ($xml)
 {
 if ($this->getCode() > 0 & $xml != '') $this->setData($xml)->mapping();
 }
 }
 return $this;
 }

 private function mapping()
 {
 $xml = $this->getData();
 $this->setUserRating($xml->product->rating->userAverageRating)->setUserOpinions($xml->opinions);

 return $this;
 }

 private function filter($_opinion)
 {
 $word = '[bloqueada]';
 $_words = array (
 'bosta',
 'merda',
 'caralho',
 'diabo',
 'http://',
 'www',
 '@',
 '\$',
 );

 $_opinion['comment']['comment'] = str_ireplace($_words, $word, $_opinion['comment']['comment']);
 $_opinion['comment']['positive'] = str_ireplace($_words, $word, $_opinion['comment']['positive']);
 $_opinion['comment']['negative'] = str_ireplace($_words, $word, $_opinion['comment']['negative']);
 $_opinion['author'] = str_ireplace($_words, $word, $_opinion['author']);
 $_opinion['title'] = str_ireplace($_words, $word, $_opinion['title']);

 return $_opinion;
 }

 /* method public */
 public function getRating()
 {
 return doubleval($this->getUserRating()->rating);
 }

 public function getSpecification()
 {
 $v_spec = array();
 $xml = $this->getData();
 $specs = $xml->product->specification->item;

 $s = sizeof($specs);
 if ($s > 0)
 {
 foreach($specs as $spec)
 {
 $v_spec[] = array (
 'label' => utf8_decode($spec->attributes()->label),
 'value' => utf8_decode($spec->value[0])
 );
 }
 }
 return $v_spec;
 }

 public function getNumComments()
 {
 return $this->getUserRating()->numComments;
 }

 public function getOpinions()
 {
 $v_opinions = array();
 $opinions = $this->getUserOpinions();
 $s = sizeof($opinions);
 if ($s>0)
 {
 foreach($opinions as $opinion)
 {
 $v_date = date_parse($opinion->attributes()->date);
 $v_opinion = array (
 'Recommend' => $opinion->attributes()->RecommendProduct,
 'date' => str_pad($v_date['day'], 2, "0", STR_PAD_LEFT).'/'.str_pad($v_date['month'], 2, "0", STR_PAD_LEFT).'/'.$v_date['year'],
 'title' => ucfirst(strtolower(htmlentities(utf8_decode($opinion->title)))),
 'author' => htmlentities(utf8_decode($opinion->author)),
 'rating' => $opinion->rating->userAverageRating->rating,
 'comment' => array (
 'comment' => htmlentities(utf8_decode($opinion->comment->comment)),
 'positive' => htmlentities(utf8_decode($opinion->comment->positive)),
 'negative' => htmlentities(utf8_decode($opinion->comment->negative))
 )
 );

 $v_opinions[] = $this->filter($v_opinion);
 }
 }
 return $v_opinions;
 }
}
$id_produto = "271739";
$buscape = new BuscaPe($id_produto);
$_opinioes = $buscape->getOpinions();
$pontuacao = $buscape->getRating();
$num_comentarios = $buscape->getNumComments();
echo “Pontuação desse produto é = ”.$pontuacao.”<br?>”;
echo “Esse produto tem = ”.$num_comentarios.” comentário(s)”;
print_r($_opinioes);
?>

Linked Server Como Utilizar?

Bom galera,

Esses tempos precisei alterar um banco MySQL para o SQL Server e dai pensei como fazer isso de forma rápida?

Lembrei do Linked Server quando fiz curso de Adm. SQL Server. Na época não tinha visto como esse recurso pode facilitar nossa vida quando a necessidade é migração de dados entre bancos.

No curso admito que o instrutor somente mostrou conexão com outro banco SQL Server, onde até questionei se era para permitir a criação da replicação… o que não foi respondido corretamente e a dúvida persistiu.

Bom, vou escrever esse post em parte porque quero deixa-lo bem completo. Vou dividir nas seguintes partes:

  1. Para que server o Linked Server
  2. Link para downloads das ferramentas
  3. Como criar um LS para conectar em bancos MSSQL
  4. Como criar um LS para conectar em bancos MYSQL
  5. Como crar um LS via linha de comando (para os amantes de linha de comando = eu :D)
  6. Importado os dados

Para que server o Linked Server?

R= Cria-se uma camada de conexão com qualquer outro banco  que tenha o padrão SQL, permitindo gerar select/insert/update/delete nesse banco. Outra coisa que é possivel, repassar esses dados para um banco dentro do Sql server onde encontra-se o LS, ou seja importar tanto a tabela quando os dados.

Link para downloads das ferramentas

SQL Server

SQL Server 2005 Express – Serviço do Banco de Dados

SQL Server Management Studio Express – Gerenciamento do Banco de Dados

MySQL

MySQL Community Server – Serviço do Banco de Dados

MySQL Workbench (GUI Tool) – Gerenciamento do Banco de Dados

Conector/ODBC MySQL – Driver de conexão ODBC do Banco de Dados

Como crar um LS via linha de comando

Irei colocar a parte de linha de comando e depois colocou as utilizando a interface grafica ok!

MySQL

Galera antes de fazer isso certifique que você tenha o Driver ODBC do MySQL instalado na maquina onde você irá fazer a modificação


EXEC
master.dbo.sp_addlinkedserver @server = N‘MYSQL’, @srvproduct=N’MySQL’, @provider=N’MSDASQL’, @provstr=N’DRIVER={MySQL ODBC XXX Driver}; SERVER=HOST_DO_SERVIDOR; DATABASE=NOME_BANCO_DADOS; USER=USUARIO; PASSWORD=SENHA; OPTION=3′

onde:

sp_addlinkedserver é uma store procedure dentro do SQL Server que permite a conexão com outros bancos.

@server = Tipo do servidor: MYSQL, MSSQL

@srvproduct = Nome da conexão.

@provider = Tipo de conexão. MSDASQL é um conector padrão para acesso por Drivers

@provstr = String de conexão com os driver e seus parametros

No caso do MySQL os parametros são:

  • DRIVER = {MySQL ODBC XXX Driver}, onde XXX é a versão instalado
  • SERVER = Ip do servidor ou nome para conexão. Ex: mysql.seudominio.com.br
  • DATABASE = nome do banco de dados no MySQL
  • USER = usuario para conexão com permissão para acessar o banco externamente
  • PASSWORD = senha do usuario.
  • OPTION = Padrão 3

Importando os Dados

Bom agora que você criou a conexão pode testar importar os dados com a seguinte instrução SQL.

SELECT * INTO NOME_TABELA_LOCAL FROM OPENQUERY(NOME_DA_CONEXAO, ‘SELECT * FROM NOME_TABELA_REMOTA’)

onde:

NOME_TABELA_LOCAL = nome da tabela a ser criada no SQL Server e que irá armazenar os dados

NOME_DA_CONEXAO = Nome da conexão do Linked Server

NOME_TABELA_REMOTA = Nome da tabela do banco conectado pelo Linked Server

Nova consulta de Fretes do WebServices do Correios

Licença Creative Commons
FreightCorreios de Thiago Zampieri é licenciado sob uma Licença Creative Commons Attribution


UPDATE: O Correios ama os desenvolvedores… Recebi um e-mail informado que eles alterarão as URL de acesso para MELHORAR e FACILITAR a conexão… Bom vamos as alterações então neh..

A unica coisa que deve ser alterado é a parte de atributos blz? Segue abaixo:

/* ATRIBUTOS */
//private $wsdlSchema    = 'https://';
private $wsdlSchema    = 'http://';
//private $wsdlSock      = 'ssl://';
private $wsdlSock      = 'http://';
//private $wsdlHost      = 'shopping.correios.com.br';
private $wsdlHost      = 'ws.correios.com.br';
//private $wsdlQuery     = '/wbm/shopping/script/CalcPrecoPrazo.asmx?wsdl';
private $wsdlQuery     = '/calculador/CalcPrecoPrazo.asmx?wsdl';
//private $wsdlPort      = 443;
private $wsdlPort      = 80;
private $function      = 'CalcPrecoPrazo';
private $soapAction    = 'http://tempuri.org/';

Bom mais uma vez estou aqui para mostrar a implementação da consulta de frete dos correios, que entrará em vigor apartir do dia 30/07/2010 ( o suporte a forma antiga acabou 30 dias antes .aff).

Estava eu na minha mesa de trabalho quando verifico meus e-mail e la estava uma mensagem assim

“Mais uma integração espero que essa seja mais facil! rss”

Bom vi o conteudo do material e comecei a codificação. Após alguns detalhes e ligações ao suporte dessa grande empresa (rss) consegui fazer tudo funcionar.

Antes de postar o codigo fonte quero fazer algumas resalvas sobre esse novo metodo:

– É necessário agora informar as dimensões da embalagem dos itens ( o que é muito ruim ), ou seja, Altura x Largura x Comprimento.

– Quem já implementou a regra anterior sabe que antigamente você não repassava nenhum serviço dos correios, nessa versão é necessário informá-los (o que eu achei muito bacana, evitando retirar serviços que não uso na minha empresa)

– Outro detalhe é que a versão nova utiliza outro usuário e senha (putz até descobri isso foi complicado porque na empresa em que trabalho temos varios cartões de identificação)

Bom vamos ao código, e galera por favor quem utiizar o código favor manter os créditos.

Abraço e qualquer coisa me avisem. (Todas as classes estão funcionando em ambientes produtivos).

Abaixo o código:

<?php
/**
* Class......: FreightCorreios
* Author.....: Thiago Zampieri
* E-mail.....:
* Site.......: thiagozampieri.wordpress.com
* Post date..: 20.06.2010
* Description: Conexão com o webservices do correios para calcular o frete e prazo de entrega
* @access public
*/
class FreightCorreios
{
/* ATRIBUTOS */
private $wsdlSchema    = 'https://';
private $wsdlSock      = 'ssl://';
private $wsdlHost      = 'shopping.correios.com.br';
private $wsdlQuery     = '/wbm/shopping/script/CalcPrecoPrazo.asmx?wsdl';
private $wsdlPort      = 443;
private $function      = 'CalcPrecoPrazo';
private $soapAction    = 'http://tempuri.org/';

//Login
private $username      = 'USER_8_CHARS';
private $password      = 'PASS_8_CHARS';

//Services
/*
* Os codigos abaixos são alguns dos codigos disponíveis para consulta, porém o código 41106 é um código que permite ser consultado sem
* login e senha já que é um serviço liberado pelo correio. Caso deseje saber mais sobre os código entre no site do correios
* www.correios.com.br
* Parametros:
* name  = Nome do serviço
* title = Descrição do serviço
* cost  = AdValore individual
*
* PS: o valor assim será somado com o adValore Geral.
*
* Ad Valore é utilizando muito pelas empresas para evitar erros nos calculos e também custiar os seguros de transporte,
* ou seja, não é incorreto.
*/
private $_services     = array(
'40444' => array('name' => 'SEDEX', 	'title' => 'Sedex Convencional',			'cost' => 0.00), 	//SEDEX com contrato
'81019' => array('name' => 'e-SEDEX', 	'title' => 'Contrato especial e-commerce',	'cost' => 0.00), 	//e-SEDEX com contrato
'41068' => array('name' => 'PAC', 		'title' => 'PAC - Diferenciado',			'cost' => 0.00),	//PAC com contrato
'41025' => array('name' => 'CORREIOS', 	'title' => 'Encomenda Normal',				'cost' => 0.00),	//Encomenda Normal
'41106' => array('name' => 'PAC', 		'title' => 'PAC - Comum',					'cost' => 0.00),	//PAC sem contrato
);
//Config.
private $zipcodeSRC    = '86025040';	//LONDRINA - PR
private $zipcodeDST    = '12345000';	//SAO PAULO - SP
//TIPO DA EMBALAGEM:
private $format        = 1;				//1 - Formato caixa/pacote 2 - Formato rolo/prisma
private $width         = 0.00;			//Largura
private $length        = 0.00;			//Comprimento
private $height	       = 0.00;			//Altura
private $diameter      = 0.00;			//Diametro
private $weight        = 0.00;			//Peso
private $price         = 0.00;			//Valor Declarado
//ServiÁos
private $maoPropria    = 'N';			//ServiÁo M„o PrÛpria
private $receipt       = 'N';			//Aviso de Recebimento
//Adicionais
private $cost 		   = 0.00;			//AdValore (Caso deseja adicionar um valor no retorno dos valores (Geral))
private $timeProcedure = 0;				//Valor Minimo (Numeros de dias para aumentar com o retorno dos correios (Geral))
private $weightAdd     = 0.000;			//Kg (Peso adicional)

//Dados
private $_data         = array();		//Registro - retorno do Correio

/* CONSTRUTOR */
public function __construct($src_zipcode, $dst_zipcode, $width=0.00, $length=0.00, $height=0.00, $diameter=0.00, $weight=0.00, $price=0.00)
{
//Limpa os vetores de dados.
$this->reset();

$this->setZipcodeSRC($src_zipcode);
$this->setZipcodeDST($dst_zipcode);

$this->setWidth($width);
$this->setLength($length);
$this->setHeight($height);
$this->setDiameter($diameter);
$this->setWeight($weight);
$this->setPrice($price);
}

/* METODOS */
private function getUsername()
{
return $this->username;
}
private function getPassword()
{
return $this->password;
}

private function getWsdlSchema()
{
return $this->wsdlSchema;
}
private function getWsdlSock()
{
return $this->wsdlSock;
}
private function getWsdlHost()
{
return $this->wsdlHost;
}
private function getWsdlPort()
{
return $this->wsdlPort;
}
private function getWsdlQuery()
{
return $this->wsdlQuery;
}
private function getFunction()
{
return $this->function;
}
private function getSoapAction()
{
return $this->soapAction;
}
private function getWsdl()
{
return $this->getWsdlSchema().$this->getWsdlHost().$this->getWsdlQuery();
}

private function checkConnect()
{
/*
//		 * Testa a conexão antes de tentar buscar dados no WebServices do Correios
*/
$fp = fsockopen($this->getWsdlSock().$this->getWsdlHost(), $this->getWsdlPort(), $errno, $errstr, 5);
if (!$fp) return false;
return true;
}

private function setZipcodeSRC($zipcode)
{
$zipcode = str_replace(array('(', ')', '-', '.', ' '), '', $zipcode);

if (is_numeric($zipcode) & strlen($zipcode) == 8 )
{
$this->zipcodeSRC = $zipcode;
return true;
}
return false;
}
private function getZipcodeSRC()
{
return $this->zipcodeSRC;
}

private function setZipcodeDST($zipcode)
{
$zipcode = str_replace(array('(', ')', '-', '.', ' '), '', $zipcode);

if (is_numeric($zipcode) & strlen($zipcode) == 8 )
{
$this->zipcodeDST = $zipcode;
return true;
}
return false;
}
private function getZipcodeDST()
{
return $this->zipcodeDST;
}

private function setWeight($weight)
{
$weight = doubleval($weight);
if (is_double($weight))
{
$this->weight = $weight;
return true;
}
return false;
}

private function getWeight()
{
return ($this->weight + $this->getWeightAdd()) * 1;	//peso deve ser informado em Kilograma.
}
private function getWeightAdd()
{
return $this->weightAdd;
}

private function setDiameter($diameter)
{
$diameter = doubleval($diameter);
if (is_double($diameter))
{
$this->diameter = $diameter;
return true;
}
return false;
}
private function getDiameter()
{
return $this->diameter;
}

private function setWidth($width)
{
$width = doubleval($width);
if (is_double($width))
{
$this->width = $width;
return true;
}
return false;
}
private function getWidth()
{
return $this->width;
}

private function setLength($length)
{
$length = doubleval($length);
if (is_double($length))
{
$this->length = $length;
return true;
}
return false;
}
public function getLength()
{
return $this->length;
}

private function setHeight($height)
{
$height = doubleval($height);
if (is_double($height))
{
$this->height = $height;
return true;
}
return false;
}
private function getHeight()
{
return $this->height;
}

private function setPrice($price)
{
$price = doubleval($price);
if (is_double($price))
{
$this->price = $price;
return true;
}
return false;
}
private function getPrice()
{
return $this->price;
}

private function getMaoPropria()
{
return $this->maoPropria;
}
private function getFormat()
{
return $this->format;
}
private function getReceipt()
{
return $this->receipt;
}
private function getCost()
{
return $this->cost;
}

private function getTimeProcedure()
{
return $this->timeProcedure;
}

private function reset()
{
$this->width     = 0.00;		//Largura
$this->length    = 0.00;		//Comprimento
$this->height	 = 0.00;		//Altura
$this->diameter  = 0.00;		//Diametro
$this->weight    = 0.00;		//Peso
$this->price     = 0.00;		//Valor Declarado
}

private function getServicesId()
{
$_services = $this->_services;
$_keys = array_keys($_services);

return $_keys;
}

private function getServicesName($code)
{
$_services = $this->_services;
$name      = $_services[$code]['name'];
return $name;
}

private function getServicesCost($code)
{
$_services = $this->_services;
$cost      = $_services[$code]['cost'];
return $cost;
}

private function getServicesTitle($code)
{
$_services = $this->_services;
$name      = $_services[$code]['title'];
return $name;
}

private function getConnect()
{
$wsdl   = $this->getWsdl();
$client = new soap_client($wsdl, true); // true = sem namespace

return $client;
}

private function toDecimal($value)
{
if ($value > 0) return number_format($value, 2, '.', '');
return '0';
}

private function toNumber($value)
{
return number_format($value, 2, ',', '.');
}

private function convertDecimal($value)
{
$l_value = str_replace(".", "", $value);
$l_value = str_replace(",", ".", $l_value);
$l_value = $this->toDecimal(doubleval($l_value));

return $l_value;
}

private function check()
{
$l_weight = $this->getWeight();
if ($l_weight > 0 & $l_weight <= 30) 		{ 			$l_block  = $this->checkConnect();
return $l_block;
}
return false;
}

private function addCost($code, $price)
{
$l_cost  = $price;
$l_price = $this->getPrice();
$v_cost  = $this->getCost();
$v_cost2 = $this->getServicesCost($code);

$v_cost  = $v_cost + $v_cost2;
switch($code)
{
default: $l_cost = ($v_cost * $l_price) + $price; break;
}
return doubleval($l_cost);
}

public function getData()
{
$error   = false;
$check   = $this->check();
if ($check)
{
$client  = $this->getConnect();

$_param  = array (
array (
'nCdEmpresa'	      => $this->getUsername(),
'sDsSenha'		      => $this->getPassword(),
'nCdServico'		  => implode(',', $this->getServicesId()),
'sCepOrigem'	      => $this->getZipcodeSRC(),
'sCepDestino'	      => $this->getZipcodeDST(),
'nVlPeso'		      => $this->toDecimal($this->getWeight()),
'nCdFormato'	      => $this->getFormat(),
'nVlComprimento'      => $this->toDecimal($this->getLength()),
'nVlAltura'           => $this->toDecimal($this->getHeight()),
'nVlLargura'          => $this->toDecimal($this->getWidth()),
'nVlDiametro'         => $this->toDecimal($this->getDiameter()),
'sCdMaoPropria'       => $this->getMaoPropria(),
'nVlValorDeclarado'   => $this->toDecimal($this->getPrice()),
'sCdAvisoRecebimento' => $this->getReceipt()
)
);

$_result = $client->call($this->getFunction(), $_param);

$error   = $client->getError();
if($client->fault) $error = true;

$_data = array();
if (!$error)
{
$_data = $_result[$this->getFunction().'Result']['Servicos']['cServico'];
$_keys = array_keys($_data);
if (!is_numeric($_keys[0])) $_data = array($_data);
}

$this->_data = $_data;
}
return $this;
}

public function getSecure($value)
{
if($value > 0) return 'S'; else return 'N';
}

/*
* Regra de Prazo de Entrega
* Aqui é possível ajustar a sua realidade
*/
private function getDeliveryTime($time)
{
return intval($time)+$this->getTimeProcedure();
}

public function procedure()
{
$_data   = $this->_data;
$l_count = sizeof($_data);
if ($l_count > 0)
{
$x = 0;	//Inicio
while($x < $l_count) 			{ 				$l_value = $this->convertDecimal($_data[$x]['Valor']);
$l_time1 = intval($_data[$x]['PrazoEntrega']);
$l_code  = $_data[$x]['Codigo'];

//Validação dos resultados retornados
//No Manual é possível encontrar mais detalhes sobre os retornos inválidos.
if ($l_code != '' & $l_value > 0.00 & $l_time1 > 0)
{
$l_time = $this->getDeliveryTime($l_time1);

$_data[$x]['Nome']      			 = $this->getServicesName($l_code);
$_data[$x]['Descricao'] 			 = $this->getServicesTitle($l_code);
$_data[$x]['ValorReal'] 			 = $this->convertDecimal($_data[$x]['Valor']);
$_data[$x]['Valor']    				 = $this->convertDecimal($this->toNumber($this->addCost($l_code, $_data[$x]['ValorReal'])));
$_data[$x]['ValorMaoPropria'] 		 = $this->convertDecimal($_data[$x]['ValorMaoPropria']);
$_data[$x]['ValorAvisoRecebimento']  = $this->convertDecimal($_data[$x]['ValorAvisoRecebimento']);
$_data[$x]['ValorValorDeclarado'] 	 = $this->convertDecimal($_data[$x]['ValorValorDeclarado']);
$_data[$x]['ValorTotal'] 			 = $this->toDecimal($_data[$x]['Valor'] + $_data[$x]['ValorMaoPropria'] + $_data[$x]['ValorAvisoRecebimento'] + $_data[$x]['ValorValorDeclarado']);
$_data[$x]['PrazoEntrega'] 			 = $l_time;
$_data[$x]['PrazoEntregaReal']       = $l_time1;
$_data[$x]['Seguro']				 = $this->getSecure($_data[$x]['ValorValorDeclarado']);

//Elimina os resultados que não possuem dados
}else unset($_data[$x]);
$x++;
}
}
else return -1;
return $_data;
}
}
?>

Atribuição condicional ternário em PHP

Achei esse tema bem bacana, eu encontrei no site http://www.camondongs.com.br/ , pois sempre tive problemas com essa coisa. huahauhaa

Abraço!

——

Olá, uma dica bastante legal em PHP é a opção de usar operadores de comparação ternário como linguagens mais “famosas” tipo JAVA, então vamos ao exemplo em PHP e algumas observações…

$var1 = “a”;
$var2 = “a”;
if($var1==$var2) { echo “é igual”; }
else { echo “é diferente!”; }

Pronto, grande exemplo heim? compara 2 strings se é igual e mostra uma mensagem ou poderia fazer qualquer outra coisa e etc…. e o exemplo usando ternário? É assim:

$resposta = ($var1==$var2) ? “é igual” : “é diferente”;
echo $resposta;

Bem melhor e prático não é? Comparei dentro ( ) onde poderia ter mais comparações e, depois do ?, que significa ENTÃO atribui o valor “é igual” para a variável $resposta e o : que é SENÃO atribui o valor “é diferente”.

Simples, mas tem uma vantagem além de ter menor código, dentro do “então (?)” e “senão (:)” você pode usar mais ternários! ) E também imagine uma situation que você está fazendo um laço e dentro do laço você usa vários IF para fazer comparações, usando o ternário você otimiza o código tornando mais rápido, simples e usando menos processador do servidor.

Até mais

Como fazer traduções do seu site em PHP utilizando o Google Translate

Olá pessoal, estava procurando na net uma forma de fazer traduções de um site rapidamente para outro idioma, foi daqui que encontrei a classe feita em PHP Google Translate você pode colocar opções de tradução em várias línguas no seu site, blog e etc usando a tradução do Google!

Faça o download da class Google Translate.

Depois de descompactar edite a linha 6 arquivo index.php para:

$translator = new googleTranslateTool(’pt_BR’,’en’);

Ou seja, estamos instanciando o construtor da classe para tradução de português para inglês por exemplo.

Para maiores informações veja o restante do arquivo index.php e a própria classe googleTranslateTool.class.php

Até mais.

PS: como estava em um site … isso é uma ferramenta de tradução de pequenos textos, não vai querer traduzir a BIBLIA. Vlw

Javascript – Funções de Data e Hora

Fonte: http://www.mspc.eng.br/info/jscriptDataHora.shtml

  • Observações

 
1-) Parâmetros indicados entre parênteses são opcionais.2-) UTC (Coordinated Universal Time) é o padrão atual de tempo de acordo com os fusos horários. É continuação moderna do GMT (Greenwich Mean Time). Algumas vezes são considerados sinônimos, mas rigorosamente não são.

3-) Algumas funções (obsoletas ou de pouco uso) de data e hora não são apresentadas.

 
  • O objeto Date()

 
 
Permite trabalhar com datas e horas. Pode ser criado por uma das formas abaixo:new Date() new Date(ms) new Date(string_de_data) new Date(nAno, nMês, nDia [, nHora, nMin, nSeg, nMs] )A data é dada em milissegundos, a partir de 00:00:00 h GMT de 01 de janeiro de 1970.Se nenhum parâmetro é fornecido (primeira forma), são assumidas a data e hora locais, isto é, do computador que executa o script.

Parâmetros:ms: milissegundos desde a data inicial dada acima.string_de_data: uma seqüência de caracteres em um formato suportado.

Exemplo: “Mon, 27 Dec 2004 12:00:00 GMT”.

nAno, nMês, nDia, etc: valores inteiros representando partes da data.

Exemplo: Janeiro 0, Fevereiro 1, etc.

Exemplo de aplicação 1: a variável intervalo armazena o tempo de execução em milissegundos das outras instruções.

tempo_1 = new Date(); // outras instruções tempo_2 = new Date(); intervalo = tempo_2 – tempo_1Exemplo de aplicação 2: este é um exemplo dinâmico, que atualiza o objeto Date() a cada segundo, permitindo um relógio na tela em vez da simples hora e data do carregamento da página.

O script abaixo deve estar entre <head> e </head> da página:

<script language=”JavaScript”>
      function DataHora(){
         var data = new Date();
         tempo.innerHTML = data; 
         setTimeout(“DataHora()”,1000)
      }
</script>

O código seguinte deve estar dentro de <body>:

onLoad=”DataHora()”E este no corpo da página (entre <body> e </body>):

<span id=tempo></span>E o resultado é:

Thu Aug 14 11:30:39 UTC-0300 2008

 
É evidente que os nomes aparecem em inglês. Para outra língua, mais códigos são necessários.
 
  • getDate()

 
 
Retorna um número inteiro entre 1 e 31, que representa o dia do mês do objeto Date.Exemplo: a variável dia contém dia do mês da data atual.data = new Date(); dia = data.getDate();
 
  • getDay()

 
 
Retorna um número inteiro do dia da semana. Domingo 0, segunda 1, terça 2, etc.Exemplo: a variável dia_semana contém o dia da semana da data atual.data = new Date(); dia_semana = data.getDay()
 
  • getFullYear()

 
Retorna o ano do objeto Date em números absolutos, por exemplo 1998.Exemplo: a variável ano contém o ano da data atual.data = new Date(); ano = data.getFullYear();
 
  • getHours()

 
Retorna a hora do objeto Date, um número inteiro entre 0 e 23.Exemplo:data = new Date(); hora = data.getHours();
 
  • getMilliseconds()

 
Retorna os milissegundos do objeto Date, um inteiro entre 0 e 999.Exemplo:data = new Date(); ms = data.getMilliseconds();
 
  • getMinutes()

 
Retorna os minutos do objeto Date, um inteiro entre 0 e 59.Exemplo:data = new Date(); min = data.getMinutes();
 
  • getMonth()

 
 
Retorna o mês do objeto Date, um inteiro entre 0 e 11 (0 janeiro, 1 fevereiro, etc).Exemplo:data = new Date(); mes = data.getMonth();
 
  • getSeconds()

 
Retorna os segundos do objeto Date, um número inteiro entre 0 e 59.Exemplo:data = new Date(); seg = data.getSeconds();
 
  • getTime()

 
 
Retorna o número de milissegundos da data conforme informado no primeiro Tópico. Em geral usado para especificar a data e hora de um outro objeto Date.Exemplo:certo_dia = new Date(“May 15, 1998”); outro_dia = new Date(); outro_dia.setTime(certo_dia.getTime());
 
  • getTimezoneOffset()

 
Retorna a diferença, em minutos, entre a hora local e a hora GMT.Exemplo:data = new Date(); dif_gmt_horas = data.getTimezoneOffset() / 60;
 
  • Date.parse(string_de_data)

 
 
Retorna o número de milissegundos de uma seqüência de caracteres (string) de data, desde 01 de janeiro de 1970 00:00:00 h (hora local).A string de data deve estar dentro do padrão aceito.Exemplo: Tue, 28 Dec 2004 11:00:00 GMT-0330. Se não especificado o fuso horário, o horário local é considerado.

Deve sempre ser usado na forma Date.parse() e não com um objeto Date criado. Em geral usado com setTime() para especificar uma nova data para o objeto.

Exemplo:data = new Date(); data.setTime(Date.parse(“Apr 15, 2004”));

 
  • setDate(nDia)

 
 
Especifica um dia do mês para um objeto Date. nDia deve ser um inteiro entre 1 e 31, de acordo com o mês corrente.Exemplo:certo_dia = new Date(“May 15, 1998”); certo_dia.setDate(25);
 
  • setFullYear(nAno [, nMes, nDia])

 
 
Especifica um ano (em 4 dígitos) para um objeto date existente. nAno é um inteiro de 4 dígitos representando o ano, nMes um inteiro de 0 a 11 para o mês (0 janeiro, 1 fevereiro, etc) e nDia um inteiro de 1 a 31 para o dia do mês. Se é dado um valor para nDia, é obrigatório um valor para nMes.Se um parâmetro é especificado fora da faixa, a função tenta atualizar os demais de forma coerente.

 Exemplo: se um valor de 15 é dado para nMes, o ano é aumentado de 1 e o valor 4 é usado para nMes.Exemplo:certo_dia = new Date(); certo_dia.setFullYear(1995);

 
  • setHours(nHora [, nMin, nSeg, nMs])

 
 
Especifica a hora para um objeto Date. nHora é um inteiro entre 0 e 23. Os demais parâmetros são opcionais: nMin (inteiro entre 0 e 59), nSeg (inteiro entre 0 e 59) e nMs (inteiro entre 0 e 999 para os milissegundos). Se nSeg é fornecido, nMin também deve ser dado. Se nMs é especificado, nMin e nSeg também devem ser.Se um parâmetro é especificado fora da faixa, a função tenta atualizar os demais de forma coerente. Exemplo: se 70 é dado para nMin, a hora é aumentada de 1 e 10 é usado para nMin.

Exemplo:certo_dia = new Date(); certo_dia.setHours(10);

 
  • setMilliseconds(nMs)

 
 
Especifica os milissegundos para um objeto Date. nMs deve ser um inteiro entre 0 e 999.Se nMs é dado fora da faixa, o objeto Date é atualizado de forma coerente.Exemplo: se nMs é 1100, os segundos são aumentados de 1 e 100 é usado para os milissegundos.Exemplo:certo_dia = new Date(); certo_dia.setMilliseconds(500);
 
  • setMinutes(nMin [, nSeg, nMs])

 
 
Especifica os minutos para um objeto Date. nMin deve ser um inteiro entre 0 e 59. Os demais parâmetros são opcionais: nSeg (inteiro entre 0 e 59) e nMs (inteiro entre 0 e 999 para os milissegundos). Se nSeg é especificado, nMin também deve ser. Se nMs é dado, nMin e nSeg também devem ser.Se um parâmetro é dado fora da faixa, a função tenta atualizar os demais de forma coerente.

Exemplo: se nSeg é 80, os minutos são aumentados de 1 e 20 é usado para os segundos.Exemplo:certo_dia = new Date(); certo_dia.setMinutes(25);

 
  • setMonth(nMes [, nDia])

 
 
Especifica o mês de um objeto Date. nMes deve ser um inteiro entre 0 e 11 (0 janeiro, 1 fevereiro, etc). nDia é um parâmetro opcional para o dia do mês (inteiro entre 0 e 31).Se um parâmetro é dado fora da faixa, a função tenta atualizar o objeto de forma coerente. Exemplo: se 12 é dado para o mês, o ano é aumentado de 1 e 1 é usado para o mês.

Exemplo:certo_dia = new Date(); certo_dia.setMonth(4);

 
  • setSeconds(nSeg [, nMs])

 
Especifica os segundos de um objeto Date. nSeg deve ser um inteiro entre 0 e 59. nMs é um parâmetro opcional para os milissegundos (inteiro entre 0 e 999).Se um parâmetro é dado fora da faixa, a função tenta atualizar o objeto de forma coerente. Exemplo: se 70 é dado para nSeg, os minutos são aumentados de 1 e 10 é usado para os segundos.

Exemplo:certo_dia = new Date(); certo_dia.setSeconds(15);

 
  • setTime(nMs)

 

 
Especifica um valor para o objeto Date. nMs é um inteiro correspondente ao número de milissegundos desde 01 de janeiro de 1970 00:00:00 h.Exemplo:certo_dia = new Date(“May 15, 1998”); outro_dia = new Date(); outro_dia.setTime(certo_dia.getTime());
 
  • toLocaleString()

 
 
Retorna uma seqüência de caracteres (string) de data, com formato definido pelas configurações do sistema operacional.Exemplo:<script language=”JavaScript”> var d = new Date(); document.write(d.toLocaleString()); </script>E o resultado desse script é:quinta-feira, 14 de agosto de 2008 11:25:22
 
Se o seu sistema operacional não é inglês configurado para o padrão americano, notar a diferença com o exemplo dado no primeiro tópico, O objeto Date().
 
  • toUTCString()

 

 
Retorna uma string formatada de acordo com a convenção UTC. Pode variar de acordo com o sistema operacional.Exemplo:data = new Date(); var str = data.toUTCString();
 
  • Date.UTC(nA, nM, nD [, nHora, nMin, nSeg, nMs])

 
 
Retorna o número de milissegundos desde 01 de janeiro de 1970 00:00:00 h, hora universal.nA: ano depois de 1900. nM: inteiro de 0 a 11 para o mês. nD: inteiro de 1 a 31 para o dia do mês. nHora: inteiro de 0 a 23 para as horas. nMin: inteiro de 0 a 59 para os minutos. nSeg: inteiro de 0 a 59 para os segundos. nMs: inteiro de 0 a 999 para os milissegundos.Se um parâmetro for dado fora da faixa, a função tenta ajustar os demais de forma coerente.

Exemplo: se 12 é usado para mês, ano é incrementado de 1 e 1 é usado para mês.Deve sempre ser usado na forma Date.UTC(…) e não com um objeto Date criado.

Exemplo:

data_utc = new Date(Date.UTC(2004, 11, 15, 12, 0, 0));