Ir para conteúdo

Arquivado

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

Orides Tomkiel Zmovirzynsk

Consulta Cep Correio + Ajax

Recommended Posts

Outra solução .. não é com ajax, mas aí fica por conta de vocês implementarem um ajax para fazer a requisição para a própria página interna ..

 

Address.php

<?php

         require_once 'AddressResponseEntity.php';

         class Address {
                /**
                 * Armazena uma resouce da cURL
                 * @var Resouce of cURL
                 */
                private $HTTPRequester;
                /**
                 * Constrói uma requisção HTTP para retorno dos dados
                 * @param Integer|String $postalCode 
                 */
                public function __construct ( $postalCode ) {
                       if ( extension_loaded ( 'cURL' ) ) {
                              $this -> HTTPRequester = curl_init ();
                              $postalCode = preg_replace ( '~[^0-9]~' , null , $postalCode );
                              curl_setopt ( $this -> HTTPRequester , CURLOPT_URL , sprintf ( 'http://cep.republicavirtual.com.br/web_cep.php?cep=%d&formato=xml' , $postalCode ) );
                              curl_setopt ( $this -> HTTPRequester , CURLOPT_RETURNTRANSFER , true );
                       } else
                              throw new Exception ( 'cURL não está disponível' );
                }
                /**
                 * Recupera o objeto que implementa métodos
                 * para recuperar os valores retornados como 
                 * cidade , estado , logradouro 
                 */
                public function getResponse () {
                       return new AddressResponseEntity ( curl_exec ( $this -> HTTPRequester ) );
                }

         }

 

AddressResponseEntity.php

<?php
         class AddressResponseEntity implements IteratorAggregate {

                /**
                 * Objeto utilizado para recuperar os valores das nodes
                 * do XML retornado 
                 * @var DOMDocument Object()
                 */
                private $DOMDocument;

                /**
                 * Resposta que foi enviada 
                 * @var ArrayObject Object()
                 */
                private $Response;

                /**
                 * Faz um parser da resposta do serviço
                 * @param type $RequestResponse 
                 */
                public function __construct ( $RequestResponse ) {
                       $this -> Response = new ArrayObject();
                       $this -> DOMDocument = new DOMDocument ( '1.0' , 'utf-8' );
                       $this -> DOMDocument -> loadXML ( $RequestResponse );
                       $this -> Response -> offsetSet ( 'State' , $this -> DOMDocument -> getElementsByTagName ( 'uf' ) -> item ( 0 ) -> nodeValue );
                       $this -> Response -> offsetSet ( 'City' , $this -> DOMDocument -> getElementsByTagName ( 'cidade' ) -> item ( 0 ) -> nodeValue );
                       $this -> Response -> offsetSet ( 'Neighborhood' , $this -> DOMDocument -> getElementsByTagName ( 'bairro' ) -> item ( 0 ) -> nodeValue );
                       $this -> Response -> offsetSet ( 'Street' , $this -> DOMDocument -> getElementsByTagName ( 'logradouro' ) -> item ( 0 ) -> nodeValue );
                       $this -> Response -> offsetSet ( 'StreetType' , $this -> DOMDocument -> getElementsByTagName ( 'tipo_logradouro' ) -> item ( 0 ) -> nodeValue );
                }

                /**
                 * Recupera o estado
                 * @return String
                 */
                public function getState () {
                       return $this -> Response -> offsetGet ( 'State' );
                }

                /**
                 * Recupera a cidade
                 * @return String
                 */
                public function getCity () {
                       return $this -> Response -> offsetGet ( 'City' );
                }

                /**
                 * Recupera o bairro referente ao cep
                 * @return String / Null
                 */
                public function getNeighBorhood () {
                       return $this -> Response -> offsetGet ( 'Neighborhood' );
                }

                /**
                 * Recupera o nome da rua referente ao cep
                 * @return String / Null
                 */
                public function getStreet () {
                       return $this -> Response -> offsetGet ( 'Street' );
                }

                /**
                 * Recupera o tipo do logradouro, Avenida, Rua .. 
                 * @return String / Null
                 */
                public function getStreetType () {
                       return $this -> Response -> offsetGet ( 'StreetType' );
                }

                /**
                 * Recupera um objeto iteravel do ArrayObject
                 * @return Iterator of ArrayObject Object()
                 */
                public function getIterator () {
                       return $this -> Response -> getIterator ();
                }

         }

 

Usando ..

<?php

         require_once 'Address.php';
         $Address = new Address ( '14401-150' );
         $Response = $Address -> getResponse ();

         echo '<pre>';
                var_dump ( $Response -> getCity () );
                var_dump ( $Response -> getState () );
                var_dump ( $Response -> getNeighBorhood () );
                var_dump ( $Response -> getStreet () );
                var_dump ( $Response -> getStreetType () );
         echo '</pre>';

 

Não faz diferença o traço ali, pode mandar com traço ou sem traço .. Saída:

string(6) "Franca"
string(2) "SP"
string(11) "Cidade Nova"
string(15) "Frederico Moura"
string(3) "Rua"

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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