From f971086446079f0f0dd344c9a684a4ad41544328 Mon Sep 17 00:00:00 2001 From: Gabriel De Los Rios Date: Thu, 9 Oct 2025 20:37:40 -0300 Subject: [PATCH] refactor: adapts to new site HTML structure --- cuit/search.go | 168 +++++++++++++++++++++++-------------------------- 1 file changed, 80 insertions(+), 88 deletions(-) diff --git a/cuit/search.go b/cuit/search.go index 2f9c920..eb57751 100644 --- a/cuit/search.go +++ b/cuit/search.go @@ -7,7 +7,6 @@ import ( "io" "net/http" "strings" - "sync" "github.com/gabdlr/api-cuit-go/utils" ) @@ -17,16 +16,15 @@ type Address struct { Localidad string `json:"localidad"` Domicilio string `json:"domicilio"` PisoDeptoOfi string `json:"pisoDeptoOfi"` - CodigoPostal string `json:"codigoPostal"` + CodigoPostal int `json:"codigoPostal"` EstadoDeDomicilio string `json:"estadoDeDomicilio"` } type Society struct { - RazonSocial string `json:"razonSocial"` - Cuit string `json:"cuit"` - TipoSocietario string `json:"tipoSocietario"` - FechaDeContrato string `json:"fechaDeContrato"` - NumeroRegistroLocal string `json:"numeroRegistroLocal"` + RazonSocial string `json:"razonSocial"` + Cuit string `json:"cuit"` + TipoSocietario string `json:"tipoSocietario"` + FechaDeContrato string `json:"fechaDeContrato"` } type CuitInfo struct { @@ -36,8 +34,40 @@ type CuitInfo struct { FechaActualizacion string `json:"fechaActualizacion"` } -const htmlOfInterestStart = ` -1 || endElement > -1 { - elements = append(elements, s[startElement+len(startMarker):endElement]) - s = s[endElement+len(endMarker):] - } else { - thereAreMoreElements = false - } - } - return elements +func updateCuitInfo(cuitInfo *CuitInfo, rawRegister *SocietyRegister) { + cuitInfo.Sociedad.RazonSocial = rawRegister.Razon_social + cuitInfo.Sociedad.Cuit = rawRegister.Cuit + cuitInfo.Sociedad.TipoSocietario = rawRegister.Tipo_societario + cuitInfo.Sociedad.FechaDeContrato = rawRegister.Fecha_contrato_social + + cuitInfo.DomicilioFiscal.Provincia = rawRegister.Df_provincia + cuitInfo.DomicilioFiscal.Localidad = rawRegister.Df_localidad + cuitInfo.DomicilioFiscal.Domicilio = rawRegister.Df_domicilio + cuitInfo.DomicilioFiscal.PisoDeptoOfi = rawRegister.Df_piso + ", " + rawRegister.Df_departamento + cuitInfo.DomicilioFiscal.CodigoPostal = rawRegister.Df_cp + cuitInfo.DomicilioFiscal.EstadoDeDomicilio = rawRegister.Df_estado_domicilio + + cuitInfo.DomicilioLegal.Provincia = rawRegister.Dl_provincia + cuitInfo.DomicilioLegal.Localidad = rawRegister.Dl_localidad + cuitInfo.DomicilioLegal.Domicilio = rawRegister.Dl_domicilio + cuitInfo.DomicilioLegal.PisoDeptoOfi = rawRegister.Dl_piso + ", " + rawRegister.Dl_departamento + cuitInfo.DomicilioLegal.CodigoPostal = rawRegister.Dl_cp + cuitInfo.DomicilioLegal.EstadoDeDomicilio = rawRegister.Dl_estado_domicilio + + cuitInfo.FechaActualizacion = rawRegister.Fecha_actualizacion + } -func searchParagraphElements(s string) []string { - return searchElements(s, "

", "

") -} - -func updateCuitInfo(cuitInfo *CuitInfo, keyElements []string, wg *sync.WaitGroup) { - go func() { - defer wg.Done() - sociedadElements := searchParagraphElements(keyElements[0]) - if len(sociedadElements) == 5 { - cuitInfo.Sociedad.RazonSocial = sociedadElements[0] - cuitInfo.Sociedad.Cuit = sociedadElements[1] - cuitInfo.Sociedad.TipoSocietario = sociedadElements[2] - cuitInfo.Sociedad.FechaDeContrato = sociedadElements[3] - cuitInfo.Sociedad.NumeroRegistroLocal = sociedadElements[4] - } - }() - go func() { - defer wg.Done() - domicilioFiscalElements := searchParagraphElements(keyElements[1]) - if len(domicilioFiscalElements) == 6 { - cuitInfo.DomicilioFiscal.Provincia = domicilioFiscalElements[0] - cuitInfo.DomicilioFiscal.Localidad = domicilioFiscalElements[1] - cuitInfo.DomicilioFiscal.Domicilio = domicilioFiscalElements[2] - cuitInfo.DomicilioFiscal.PisoDeptoOfi = domicilioFiscalElements[3] - cuitInfo.DomicilioFiscal.CodigoPostal = domicilioFiscalElements[4] - cuitInfo.DomicilioFiscal.EstadoDeDomicilio = domicilioFiscalElements[5] - } - }() - go func() { - defer wg.Done() - domicilioLegalElements := searchParagraphElements(keyElements[2]) - if len(domicilioLegalElements) == 6 { - cuitInfo.DomicilioLegal.Provincia = domicilioLegalElements[0] - cuitInfo.DomicilioLegal.Localidad = domicilioLegalElements[1] - cuitInfo.DomicilioLegal.Domicilio = domicilioLegalElements[2] - cuitInfo.DomicilioLegal.PisoDeptoOfi = domicilioLegalElements[3] - cuitInfo.DomicilioLegal.CodigoPostal = domicilioLegalElements[4] - cuitInfo.DomicilioLegal.EstadoDeDomicilio = domicilioLegalElements[5] - } - }() - go func() { - defer wg.Done() - fechaActualizacionElements := searchParagraphElements(keyElements[3]) - if len(fechaActualizacionElements) == 1 { - cuitInfo.FechaActualizacion = fechaActualizacionElements[0] - } - }() -} - -func parseResponse(html string) (cuitInfo CuitInfo, err error) { +func parseResponse(html string) (CuitInfo, error) { + var cuitInfo CuitInfo notFoundErr := "información no disponible" - + jsonParseErr := "ocurrió un error" if strings.Contains(html, exitSignal) { - err = errors.New(notFoundErr) - return cuitInfo, err + return cuitInfo, errors.New(notFoundErr) } startPosition := strings.Index(html, htmlOfInterestStart) endPosition := strings.Index(html, htmlOfInterestEnd) if startPosition != -1 && endPosition != -1 { - info := html[startPosition:endPosition] - startMarker := " 0 { + updateCuitInfo(&cuitInfo, ®isters[0]) + return cuitInfo, nil + } else { + return cuitInfo, errors.New(notFoundErr) + } + } - return cuitInfo, err + return cuitInfo, errors.New(notFoundErr) }