Buscar um número num link e traz a palavra para uma string

Eu faço leitura de nota de serviço (São paulo), utilizo o tpNFe para trazer as informações do xml, entretanto preciso exibir o nome da cidade, mas através do tpNFe consigo apenas exibir o código da cidade (System.out.println(tpNFe.getEnderecoTomador().getCidade().toString()))
ao inves do nome, e precisaria exibir o nome da exibir conforme o IBTG https://www.ibge.gov.br/explica/codigos-dos-municipios.php#SP

Exemplo:
Resultado do System.out: 3552205

ai fazeria uma busca no link para buscar o nome da cidade e colocar o nome da cidade numa string para exibir.

Nome da Cidade: Sorocaba

Alguém sabe se é possível fazer uma busca assim?

É possível extrair dados da URL que você passou usando um Crawler. Mas nesse caso específico é desnecessário.

O IBGE tem uma API que vai te ajudar:
https://servicodados.ibge.gov.br/api/v1/localidades/municipios/CODIGO

Só mandar um GET para o endereço acima e ele te retorna um JSON com os dados do município.
Ex.:
https://servicodados.ibge.gov.br/api/v1/localidades/municipios/3552205

Depois é só ler o JSON com alguma biblioteca, como Gson.

1 curtida

Acredito que o @alinelsilva esteja querendo fazer o inverso do apresentado pelo amigo @RoinujNosde.

Sendo assim as informações de todos município estão aqui:
https://servicodados.ibge.gov.br/api/v1/localidades/distritos?orderBy=nome.

Em minha opinião, é muito mais interessante você fazer o request desse Link e alocar esses dados de uma só vez do que você fazer vários requests em links diferentes.

Ou até melhor, você ja botar esse .json dentro da sua aplicação.

De qualquer forma tem inumeros jeitos de se fazer isso, aqui tem mais informações:
https://servicodados.ibge.gov.br/api/docs/localidades

1 curtida

Não sei não, hein?
No tópico ela mostrou um ID e que quer transformar no nome de uma cidade.
A API que eu passei faz justamente isso.

Seria mesmo passando um id e ele me retornar com o nome da cidade, sem exibir as demais. vou tentar usar API.
Entretanto preciso retornar o nome do código no xml que gero, não irei exibir para o usuário.

E retorno se der certo.

Desde já agradeço.

Você pode definir uma classe Cidade assim:

public class Cidade {

    String id;
    String nome;
}

E depois obter uma instância dela através da API Gson lendo a URL que o @RoinujNosde postou.

Veja o exemplo abaixo:

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;

import com.google.gson.Gson;

public class Exemplo {

    public static void main(String[] args) {
        try {
            new Exemplo().executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void executar() throws Exception {
        int codigo = 3552205;
        Cidade cidade = getCidade(codigo);
        System.out.println(cidade.id + ": " + cidade.nome);
    }

    private Cidade getCidade(int codigo) throws Exception {
        String url = "https://servicodados.ibge.gov.br/api/v1/localidades/municipios/" + codigo;
        String json = readUrl(url);
        Gson gson = new Gson();
        return gson.fromJson(json, Cidade.class);
    }

    private static String readUrl(String url) throws Exception {
        try (InputStream in = new URL(url).openStream(); ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            byte[] buffer = new byte[8192];
            for (int read = -1; (read = in.read(buffer)) != -1; out.write(buffer, 0, read)) {}
            return new String(out.toByteArray());
        }
    }
}
1 curtida

O seu exemplo @staroski deu certo!!! Ai eu coloquei o código conforme vem do xml e deu certo para mostra a cidade. Muito Obrigada!

Obrigada a todos pela ajuda.

1 curtida