sexta-feira

Código para pegar Cidades atualizadas do IBGE (BlickSystem)

  
  1. /*
  2.   DESENVOLVIDO POR GABRIEL WELLINGTON ANDRADE DOS SANTOS
  3.  * gabrielwellington42@gmail.com
  4.  * TESTADO APENAS LOCALMENTE, CUIDADO, VOCÊ PODE TER PROBLEMAS AO UTILIZAR EM UMA HOSPEDAGEM COMPARTILHADA.
  5.  * O PROCESSO PODE DEMORAR VÁRIOS MINUTOS, DEPENDENDO DA LARGURA DE BANDA E PROCESSAMENTO DO SERVIDOR
  6.  */
  7.  #ISSO É IMPORTANTE, COMO SCRIPT DEMORA PARA PEGAR TODOS OS DADOS, REMOVI O TEMPO LIMITE DO PHP
  8. #TALVEZ SEJA NECESSÁRIO FAZER ESSA ALTERAÇÃO NO PHP.INI OU .HTACCESS
  9. set_time_limit(0);
  10. ini_set('max_execution_time', 0);
  11.  
  12. class cidadesEstados {
  13.    
  14.     public $estados;
  15.  
  16.     public function __construct() {
  17.         $this->estados = array("1|Acre|AC", "2|Alagoas|AL", "3|Amapá|AP", "4|Amazonas|AM", "5|Bahia|BA", "6|Ceará|CE", "7|Distrito Federal|DF", "8|Espírito Santo|ES", "9|Goiás|GO", "10|Maranhão|MA", "11|Mato Grosso|MT", "12|Mato Grosso do Sul|MS", "13|Minas Gerais|MG", "14|Pará|PA", "15|Paraíba|PB", "16|Paraná|PR", "17|Pernambuco|PE", "18|Piauí|PI", "19|Rio de Janeiro|RJ", "20|Rio Grande do Norte|RN", "21|Rio Grande do Sul|RS", "22|Rondônia|RO", "23|Roraima|RR", "24|Santa Catarina|SC", "25|São Paulo|SP","26|Sergipe|SE", "27|Tocantins|TO");
  18.     }
  19.  
  20.  
  21.        private function getPagina($estado) {
  22.         $url = "http://www.cidades.ibge.gov.br/download/mapa_e_municipios.php?lang=&uf=".$estado;
  23.         $ch = curl_init();
  24.         $timeout = 15;
  25.         curl_setopt($ch, CURLOPT_URL, $url);
  26.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  27.         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  28.         $dados = curl_exec($ch);
  29.         curl_close($ch);
  30.  
  31.         return $dados;
  32.     }
  33.  
  34.     #--------- ESTE METODO RETORNA UM ARRAY ASSOCIATIVO COM OS DADOS ---------------#
  35.  
  36.     public function getDados() {
  37.         $cidadesEstadosCompleto = array();
  38.  
  39.         for ($i = 0; $i < count($this->estados); $i++) {
  40.             $res = array();
  41.             $estado = explode("|", $this->estados[$i]);
  42.             $dados = $this->getPagina($estado[2]);
  43.             #---- VERIFICO SE EXISTE A TABELA COM OS DADOS -------#
  44.            if (!preg_match("/\"
    municipios\">/s"
, $dados)) {
  •                 $cidadesEstadosCompleto["erro"] = "Não foi encontrado nenhuma informação.";
  •             } else {
  •                 #--- PEGO O CONTEÚDO DA TABELA ---------------------#
  •                preg_match("/\"
    municipios\">(.*)<\/table>/s"
  • , $dados, $saida);
  •                 $vetDados = preg_split("/\n/", $saida[0]);
  •                 $cont = 0;
  •                 for ($j = 0; $j < count($vetDados); $j++) {
  •                     if (preg_match("/\"nome\">(.*)<\/td>/s"
  • , $vetDados[$j], $saida1)) {
  •                         $res[$cont]["nome"] = $saida1[1];
  •                         $cont++;
  •                     }
  •                     if (key_exists($j + 1, $vetDados)) {
  •                         if (preg_match("/\"gentilico\">(.*)<\/td>/s"
  • , $vetDados[($j + 1)], $saida2)) {
  •                             $res[$cont - 1]["gentilico"] = $saida2[1];
  •                             if (preg_match("/(.*)<\/td>/s", $vetDados[($j + 2)], $saida3)) {
  •                                 $res[$cont - 1]["populacao"] = $saida3[1];
  •                             }
  •                         }
  •                     }
  •                 }
  •                 $cidadesEstadosCompleto[$estado[0]] = $res;
  •             }
  •         }
  •         //var_dump($cidadesEstadosCompleto);
  •  
  •         return $cidadesEstadosCompleto;
  •     }
  •  
  •     public function getDadosJson() {
  •         return json_encode($this->getDados(), JSON_PRETTY_PRINT);
  •     }
  •  
  •     public function criarSqlCidades() {
  •         $dados = $this->getDados();
  •         foreach ($dados as $id => $estado) {
  •             foreach ($estado as $cidade) {
  •             $cidade["nome"] = str_replace("'", "", $cidade["nome"]);
  •             $cidade["gentilico"] = str_replace("'", "", $cidade["gentilico"]);
  •                 echo "INSERT INTO cidade (cid_nome, cid_gentilico, cid_populacao, cid_estado) VALUES ('{$cidade["nome"]}','{$cidade["gentilico"]}','{$cidade["populacao"]}','{$id}');
    "
    ;
  •             }
  •         }
  •     }
  •  
  •     public function criarSqlEstados() {
  •         for($i = 0; $i < count($this->estados);$i++) {
  •             $estado = explode("|",$this->estados[$i]);
  •             echo "INSERT INTO estado (est_id, est_nome, est_sigla) VALUES ('{$estado[0]}','{$estado[1]}','{$estado[2]}');
    "
    ;
  •         }
  •     }
  •  
  • }
  • ?>
  •    
  •        
  •    
  •    
  •         
  •         $estados = new cidadesEstados();
  •         $estados->criarSqlEstados();
  •         $estados->criarSqlCidades();
  •         ?>
  •