EricSoft.DgiiWebScraper 1.1.2

dotnet add package EricSoft.DgiiWebScraper --version 1.1.2                
NuGet\Install-Package EricSoft.DgiiWebScraper -Version 1.1.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EricSoft.DgiiWebScraper" Version="1.1.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add EricSoft.DgiiWebScraper --version 1.1.2                
#r "nuget: EricSoft.DgiiWebScraper, 1.1.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install EricSoft.DgiiWebScraper as a Cake Addin
#addin nuget:?package=EricSoft.DgiiWebScraper&version=1.1.2

// Install EricSoft.DgiiWebScraper as a Cake Tool
#tool nuget:?package=EricSoft.DgiiWebScraper&version=1.1.2                

EricSoft.DgiiWebScraper

EricSoft.DgiiWebScraper es una pequeña librería para realizar consultas en línea a la página oficial de la Dirección General de Impuestos Internos (DGII) de la República Dominicana, con el fin de obtener datos de RNC o Cédula (por ejemplo, Nombre o Razón Social, Estado, Nombre Comercial, etc.).

Características

  • Ligera: El Scraping se hace solo con HttpClient (evita el uso de navegadores como lo hace Selenium, PuppeteerSharp u otras librerias).
  • Alta compatibilidad: Este proyecto está desarrollado sobre .NET Standard 2.0, lo cual le otorga un amplio rango de compatibilidad con diversas plataformas de .NET, incluyendo: .NET Core 2.0 o superior, .NET 5 / .NET 6 / .NET 7, .NET Framework 4.6.1 o superior Gracias a esto, puedes integrar este paquete en una amplia variedad de aplicaciones y proyectos sin problemas de compatibilidad.
  • Configuración flexible: Personaliza las URLs y las etiquetas que la DGII usa en las tablas para obtener los resultados, si algo de esto cambia en el futuro, no debes esperar a que hagamos el cambio, puedes enviar los nuevos datos como parámetro.

Instalación

dotnet add package EricSoft.DgiiWebScraper

Ejemplos básicos

  • Consulta RNC o Cédula
//Cosulta básica
 string rnc = "131204783"; //Rnc o Cédula
 var scraper = new DgiiWebScraperClient();
 var result = await scraper.ConsultarRncCedulaAsync(rnc);

En esta consulta el único dato que se pasa como parámetro es el número de cédula o rnc, el metodo devuelve como respuesta un objeto de la clase:

public class RncCedula
{
    public string Rnc { get; set; }
    public string Nombre { get; set; }
    public string NombreComercial { get; set; }
    public string Estado { get; set; }
}

Esta consulta busca el rnc o cédula en la sección de consulta de RNC Contribuyentes y si no lo encuentra lo busca en RNC Registrados. Para estos casos puntuales solo se devulven los campos comunes definidos en la clase anteriomente citada, si necesitas más datos podrías utilizar el método definido para cada sección, el cual devolvería un diccionario con todos los regsitros que figuran en la tabla html que se muestra en la página de la DGII al realizar la consulta. Los métodos para cada sección son ConsultarContribuyenteAsync() para "RNC Contribuyentes" y ConsultarCiudadanoAsync() para "RNC Registrados".

  • Consulta principal RNC Cotribuyentes
//Consulta principal RNC Cotribuyentes
 string rnc = "131204783"; //Rnc o Cédula
 var scraper = new DgiiWebScraperClient();
 var result = await scraper.ConsultarContribuyenteAsync(rnc);

Esta consulta devuelve un diccionario con los valores que se encuentran en la tabla HTML que se muestra en la página de la DGII al realizar una consulta en la sección Herramientas > Consultas > RNC Contribuyentes

  • Consulta principal RNC Registrados
//Consulta principal RNC Registrados
 string rnc = "131204783"; //Rnc o Cédula
 var scraper = new DgiiWebScraperClient();
 var result = await scraper.ConsultarCiudadanoAsync(rnc);

Esta consulta devuelve un diccionario con los valores que se encuentran en la tabla HTML que se muestra en la página de la DGII al realizar una consulta en la sección Herramientas > Consultas > RNC Registrados.

  • Consulta NCF
//Consulta NCF
 string rnc = "131204783"; //Rnc o Cédula
 string ncf = "BXXXXXXXXXX"; //Indique el NCF que desea consultar.
 var scraper = new DgiiWebScraperClient();
 var result = await scraper.ConsultarCiudadanoAsync(rnc,ncf);

Esta consulta devuelve un objeto de la siguiente clase:

public class NcfResult
{
    public string RncCedula { get; set; }
    public string Nombre { get; set; }
    public string TipoComprobante { get; set; }
    public string Ncf { get; set; }
    public string Estado { get; set; }
    public string ValidoHasta { get; set; }
}

Pasar parámetros

La manera de pasar parámetros a la case DgiiWebScraperClient() es por medio de su constructor, el cual recibe un objeto de la siguiente clase:

public class DgiiWebScraperOptions
{
    public string UrlContribuyente {  get; set; }  
        = "https://dgii.gov.do/app/WebApps/ConsultasWeb2/ConsultasWeb/consultas/rnc.aspx";
    public string UrlCiudadanos { get; set; } 
        = "https://dgii.gov.do/app/WebApps/ConsultasWeb2/ConsultasWeb/consultas/ciudadanos.aspx";

    public string UrlNcf { get; set; }
        = "https://dgii.gov.do/app/WebApps/ConsultasWeb2/ConsultasWeb/consultas/ncf.aspx";

    public ContribuyenteEtiqueta ContribuyenteEtiqueta { get; set; } = new ContribuyenteEtiqueta();
    public CiudadanoEtiqueta CiudadanoEtiqueta { get; set; } = new CiudadanoEtiqueta();
    public NcfEtiqueta NcfEtiqueta { get; set; } = new NcfEtiqueta();
}

Como se puede notar, cada propiedad tiene un valor por defecto, pero si alguno de estos cambia, podemos enviarlo como parámetro, por ejemplo, si la URL para consultar el RNC en la sección de contribuyentes cambia, podemos indicar la nueva URL de la siguiente manera

var scraper = new DgiiWebScraperClient( new DgiiWebScraperOptions
{
    UrlContribuyente ="nuevaUrl" 
});

Esta flexibilidad de poder pasar parámetros no se limita a las URLs sino también a las etiquetas. Con el término "etiqueta" o "label" nos referimos a la primera columna que se muestra en la tabla HTML en la página de la DGII la cual contiene el resultado de nuestra consulta. Como comprenderás, para los métodos que no devuelven un diccionario, sino un objeto, es necesario poder vincular los datos de la tabla HTML con las propiedades de la clase, por ejemplo, está configurado por defuault que el nombre comercial del RNC consultado se encuentra en la tabla cuya fila tenga en su primera columna el texto "Nombre Comercial", si en el futuro la DGII devuelve un texto diferente entonces podemos configurarlo de la siguiente manera:

var scraper = new DgiiWebScraperClient( new DgiiWebScraperOptions
{
    ContribuyenteEtiqueta = new ContribuyenteEtiqueta
    {
        NombreComercial = "Nuevo nombre" //Coloca el nuevo nombre de la etiqueta
    }
});

Si quieres hacer una prueba podrías jugar con los nombres de las etiquetas de la siguiente manera: te propongo enviemos los parámetros de manera tal que el estado del RNC figure en el campo NombreComercial y el nombre comercial en el campo Estado, eso lo podemos hacer de la siguiente manera:

var scraper = new DgiiWebScraperClient( new DgiiWebScraperOptions
{
    ContribuyenteEtiqueta = new ContribuyenteEtiqueta
    {
        NombreComercial = "Estado",
        Estado = "Nombre Comercial"
    }
});
var result = await scraper.ConsultarRncCedulaAsync("131204783");

Nota:

  • Si está leyendo esta documentación en nuget u otro sitio, tome en consideración que la misma puede ser mejorada sin que esto implique publicar un release, por lo que sugerimos ver la documentación en el repositorio github https://github.com/ericsoftdr/EricSoft.DgiiWebScraper
  • Utilice esta librería de manera ética y respete los términos de uso del sitio web de la DGII.
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
.NET Core netcoreapp1.0 was computed.  netcoreapp1.1 was computed.  netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard1.3 is compatible.  netstandard1.4 was computed.  netstandard1.5 was computed.  netstandard1.6 was computed.  netstandard2.0 was computed.  netstandard2.1 was computed. 
.NET Framework net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen30 was computed.  tizen40 was computed.  tizen60 was computed. 
Universal Windows Platform uap was computed.  uap10.0 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.2 76 1/16/2025
1.1.1 69 1/16/2025
1.1.0 73 1/16/2025
1.0.1 28 1/8/2025
1.0.0 81 1/7/2025

Bajamos a la version .NET Standard 1.3 para que sea compatible con versiones mas antiguas de .NET Framework