ogticrd / territorial-division-api

Dominican Republic Territorial Division API. Creado y mantenido por Div. Arquitectura Digital Gubernamental.
18 stars 3 forks source link

Municipios por provincia #21

Open RonnyG2121 opened 1 year ago

RonnyG2121 commented 1 year ago

¡Hola!

He estado leyendo la documentación y no encuentro como organizar los municipios por provincia.

Me explico si selecciono Azua en un select, quiero que me aparezcan solo los municipios de esa provincia.

Gracias

plusiv commented 1 year ago

Hola @RonnyG2121 , de acuerdo a la documentación oficial, puedes consultar el endpoint /v1/territories/municipalities, y mediante el parámetro provinceCode, filtrar la provincia que quieres. Por ejemplo, el código 11 pertenece a la Provincia La Altagracia, por lo que ejecutando el siguiente request con cURL, obtendrías todos los municipios de dicha provincia.

curl -X 'GET' \
  'https://api.digital.gob.do/v1/territories/municipalities?provinceCode=11' \
  -H 'accept: */*'
{
  "valid": true,
  "data": [
    {
      "name": "Higüey",
      "code": "01",
      "identifier": "081101",
      "provinceCode": "11",
      "regionCode": "08"
    },
    ...
  ]
}
RonnyG2121 commented 1 year ago

Lo que estoy haciendo son varias funciones que hacen peticiones a fetch y al obtener los resultados en json lo recorre con un foreach.

Luego le asigna el nombre a los options de un select dinamicamente.

Estoy teniendo problemas al filtrar los municipios de la provincia en cuestión.


plusiv commented 1 year ago

Eso es porque tienes que utilizar el parámetro provinceCode en la url del request. Tomando el contexto que mencionas, sería algo como esto utilizando fetch.

const fetch = require('node-fetch');

const baseUrl = 'https://api.digital.gob.do/v1/territories/municipalities'; 
const params = { provinceCode: '11' }; // Replace with your province code

const url = new URL(baseUrl);
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

fetch(url)
  .then(response => response.json())
  .then(data => {
    for (const obj of data) {
      console.log(obj); // Do something with each object
    }
  })
  .catch(error => console.error('Error fetching data:', error));
RonnyG2121 commented 1 year ago

Ya casi lo tengo. Lo que hice fue ponerle un data attribute a los options de las provincias, luego lo obtengo y se lo paso a la función que carga los municipios en el evento change de el select de las provincias. Lo que sucede es que me los filtra todos de golpe, y no me filtra por provincia. Voy a compartir el código si lo termino