Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Visitante

Redirecionamento por Estado/País (não por latitude/longitude)

Recommended Posts

Visitante

Existe alguma maneira de um site ter uma versão diferente para cada estado do Brasil? Ou seja, para cada estado que acessar, abrir uma página diferente.

Pesquisei e encontrei maneiras de identificar latitude/longitude, o que não resolveria o meu problema ou daria uma trabalho imenso de mapear todas as latitudes/longitudes de cada estado. Além disso, como ficaria nas áreas próximas a fronteiras?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Devido ao ip dinâmico largamento utilizado você não vai encontrar uma maneira realmente eficiente de resolver isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
22 horas atrás, ESerra disse:

Devido ao ip dinâmico largamento utilizado você não vai encontrar uma maneira realmente eficiente de resolver isto.

Já encontrei, e várias. O Ip dinâmico que você fala é apenas na máquina do cliente, pois o servidor da operadora deve possuir IP fixo, por questões legais. Há vários serviços que retornam a Cidade, o Estado e o País onde aconteceu o acesso. Por exemplo:

 

http://pecl.php.net/package/geoip
http://pear.php.net/package/Net_GeoIP/
http://dev.maxmind.com/geoip/

 

O melhor que eu achei foi esse abaixo, pois não precisa de nenhuma API. Apenas utiliza um serviço online que retorna os dados de localização mediante o IP informado.

 

http://api.db-ip.com/addrinfo?api_key=bc2ab711d740d7cfa6fcb0ca8822cb327e38844f&addr=66.249.73.188

 

Você pode gerar uma chave GRATUITA que retorna CIDADE/ESTADO/PAÍS, e também pode COMPRAR outras chaves que retornam consultas mais detalhadas. usando esse endereço:

https://db-ip.com/db/

 

Funciona muito bem e permite milhares de consultas.

Eu preciso de ajuda é pra para montar o SCRIPT DE REDIRECIONAMENTO. Pois esses dados são retornados em modo texto da seguinte forma:

 

{"address":"66.249.73.188","country":"US","stateprov":"Illinois","city":"Chicago"}

 

E eu não sei "TRATAR" esses dados para transformá-los em variáveis de PHP ou Javascript para fazer o REDIRECIONAMENTO. Eles disponibilizam uma API(Opcional) em PHP, mas é um código muito complexo. Estou tentando fazer os "ajustes", mas até agora não tive sucesso.

 

ALGUÉM PODERIA ME AJUDAR NISSO ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Podes converter uma variável JSON para um objecto PHP usando a função json_decode.

 

$json = '{"address":"66.249.73.188","country":"US","stateprov":"Illinois","city":"Chicago"}';
$obj = json_decode($json);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
11 horas atrás, wootzor disse:

Podes converter uma variável JSON para um objecto PHP usando a função json_decode.

 


$json = '{"address":"66.249.73.188","country":"US","stateprov":"Illinois","city":"Chicago"}';
$obj = json_decode($json);

 

Ótimo, já é um começo. Também poderia excluir as CHAVES "{" e "}",  com str_replace(). E depois criar uma array com os dados usando o explode(). Mas o que eu não sabia mesmo era armazenar uma consulta "EXTERNA" em um site(URL), numa variável PHP. Acabei encontrando, e é com o file_get_contents. Então o inicio do processo, após obter o IP do internauta, para consultar, é

 

$consulta = file_get_contents('http://api.db-ip.com/addrinfo?api_key=bc2ab711d740d7cfa6fcb0ca8822cb327e38844f&addr=66.249.73.188');

 

Isso faz "pescar" a consulta e armazená-la em uma variável. Daí já estamos em posse dos dados: Cidade, Estado e País do acesso. Estou elaborando o restante do código. Assim que estiver pronto vou postar ele completo aqui, para quem quiser uma solução SIMPLES e RÁPIDA para um redirecionamento por localização, sem depender de APIs, Plugins, Pacotes, Plataformas. Já que em todas as pesquisas que eu fiz sobre o assunto, não encontrei nenhuma solução AUTÔNOMA, todas possuíam DEPENDÊNCIAS.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Aí pessoal, conforme prometido, o script que redireciona por geolocalização(CIDADE/ESTADO/PAÍS).

E ainda gera uma tabela de acessos contendo o IP, o País, A cidade, e a Hora em que houve o acesso.

 

1° passo: criar a tabela em algum banco de dados do seu servidor

 

CREATE TABLE acessos
(
codigo int auto_increment primary key,
data timestamp default current_timestamp(),
pais char(100),
estado char (100),
cidade char (100),
ip char (100),
pagina char(100)
);

 

Obs: O campo data, por conter default "current_timestamp()", não precisa receber data/hora(apenas NULL) e ele põe automaticamente a hora e a data em que o registro foi inserido, que é o instante do acesso.

 

O script abaixo deve ser colocado no início do índice do seu site(index.php)

 

<?php
/** Tenta Obter o IP real do cliente * @return string **/
function get_ip_real()
{
static $ip_real = null;
if ($ip_real !== null){return $ip_real;}

if (array_key_exists('HTTP_CLIENT_IP', $_SERVER))
{
$ip = trim($_SERVER['HTTP_CLIENT_IP']);
if (validar_ip($ip)){$ip_real = $ip;return $ip;}
}

if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER))

{
$ip = trim($_SERVER['HTTP_X_FORWARDED_FOR']);
if (validar_ip($ip)) {$ip_real = $ip;return $ip;}
elseif (strpos($ip, ',') !== false)
{
$ips = explode(',', $ip);
foreach ($ips as $ip)
{
$ip = trim($ip);
if (validar_ip($ip)){$ip_real = $ip;return $ip;}
}
}
elseif (strpos($ip, ';') !== false)
{
$ips = explode(';', $ip);
foreach ($ips as $ip) {
$ip = trim($ip);
if (validar_ip($ip)) {$ip_real = $ip;return $ip;}
}
}
}

if (array_key_exists('REMOTE_ADDR', $_SERVER))
{
$ip = trim($_SERVER['REMOTE_ADDR']);
if (validar_ip($ip)) {$ip_real = $ip;return $ip;}
}
    
$ip_real = '0.0.0.0';
return $ip_real;
}

/*
Valida um IP v4
@param string $ip: IP a ser validado
@return bool
*/

function validar_ip($ip)
{
// IPv4
$array = explode('.', $ip);
if (count($array) != 4) {return false;}
foreach ($array as $i)
{
if (!is_numeric($i) || $i < 0 || $i > 255) {return false;}
}
return true;
}

$consulta = file_get_contents('http://api.db-ip.com/addrinfo?api_key=bc2ab711d740d7cfa6fcb0ca8822cb327e38844f&addr='.get_ip_real());
$apaguetais = array('{','}','"',':','address','country','stateprov','city');
$consulta = str_replace($apaguetais, "", $consulta);
$consulta = explode(',', $consulta);

$aconect = mysql_connect('localhost', 'SEU_USUARIO_MYSQL', 'SENHA_DO_SEU_USUARIO_MYSQL');
$odb = mysql_select_db('NOME_DO_SEU_BANCO_DE_DADOS');
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');

mysql_query
(
"insert into acessos values
(
NULL, 
NULL,
'$consulta[1]',
'$consulta[2]',
'$consulta[3]',
'$consulta[0]',
'RAIZ'
)
");

 

switch ($consulta[1]){
case 'BR':header('location:versao_p_brasil');
case 'US':header('location:versao_p_EUA');
default:header('location:versao_p_EUA');
}

?>

 

Nesse caso é apenas um redirecionamento para dois países, um exemplo simples. Mas, estando de posse das variáveis que representam IP($consulta[0]), País($consulta[1]), Estado($consulta[2]) e Cidade($consulta[3]), podemos usar o SWITCH para criar qualquer regra de redirecionamento ou até um conjunto de regras.

 

Não esqueçam de altera os dados para os do seu servidor:

SEU_USUARIO_MYSQL

SENHA_DO_SEU_USUARIO_MYSQL

NOME_DO_SEU_BANCO_DE_DADOS

 

OBS: Óbvio que se a pessoa estiver usando VPN(rede privada virtual), esta irá mascarar o IP, impedindo a localização REAL. Mas são raros os que utilizam tal artifício, a maioria são hackers que querem realizar "suas peripécias" sem serem localizados. E nesse caso não importa que recebam a versão INTERNACIONAL do site. Já que quase todas as VPNs atribuem um IP estrangeiro ao usuário.

 

Outra observação: Eu utilizo esta chave para a consulta no db-ip.com:

bc2ab711d740d7cfa6fcb0ca8822cb327e38844f

Mas eu "peguei" ela na internet, portanto não sei quantos já estão utilizando-a.

Essas chaves são gratuitas e permitem milhares de acessos diários, portanto você pode criar uma chave própria para não sobrecarregar esta e acabar perdendo consultas. Par criar uma chave de acesso, visite:

https://db-ip.com/api/

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.