BUSCADOR DE OFERTAS PARA MERCADO LIBRE Y AMAZON CON C# y JSON (Parte 1)

 


En este video les mostrare como pueden crear un buscador de ofertas para Mercado Libre y Amazon utilizando C# y JSON


CODIGO


using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace buscadorOfertas { public partial class Form1 : Form { /// <summary> /// Variables /// </summary> //Declaramos la variable termino a buscar string nombreProducto; //Instanciamos un objeto HttpClient para la conexion al sitio HttpClient cliente = new HttpClient(); //Declaramos la variable resultado string cadenaObtenida; //Declaramos la variable URL string url; //Declaramos la terminoBuscado y le asignamos el valor string terminoBuscado; //Declaramos la variable cuentaCaracteres int cuentaCaracteres; //Declaramos la variable code y le asignamos un valor vacio string code = ""; //Declaramos la variable nuevaCadena y le asignamos un valor vacio string nuevaCadena = ""; /// <summary> /// Fin de variables /// </summary> public Form1() { InitializeComponent(); } private void consultaOfertasML() { try { //Declaramos una variable para guardar el termino de busqueda nombreProducto = textBox1.Text; //Sustituimos los espacios es blanco y agregamos un guion medio nombreProducto = nombreProducto.Replace(" ", "-"); //Asignamos el valor de la URL de ML url = "https://listado.mercadolibre.com.mx/" + nombreProducto; //Agregamos las cebeceras a client para que se muestre el contenido correctamente cliente.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"); //realizamos la peticion a la URL de ML using (HttpResponseMessage respuesta = cliente.GetAsync(url).Result) { using (HttpContent content = respuesta.Content) { //Guardamos la string que recibimos de la consulta al sitio cadenaObtenida = content.ReadAsStringAsync().Result; } } //Declaramos la terminoBuscado y le asignamos el valor terminoBuscado = "window.__PRELOADED_STATE__ ="; //Asginamos el valor de indexof que devuelve la posicion cuentaCaracteres = cadenaObtenida.IndexOf(terminoBuscado); //Si encontro la palabra if (cuentaCaracteres != -1) { //Cortamos la cadena code = cadenaObtenida.Substring(cuentaCaracteres + terminoBuscado.Length); } //Asignmos un valor nuevo a termino buscado para hacer una nueva limpieza de la cadena recibida y convertirla a JSON terminoBuscado = "mapApiKey"; cuentaCaracteres = code.IndexOf(terminoBuscado); //Si encontro el termino buscado if (cuentaCaracteres != -1) { nuevaCadena = code.Substring(0, cuentaCaracteres); //Agregamos un texto al final para corregir la cadena JSON nuevaCadena = nuevaCadena + "mapApiKey\":\"AIzaSyBKpigzeKC4SICrIn0Z -3xIR8iQl3yvYUI\"}"; } //Parseamos el JSON recibido JObject jsonML = JObject.Parse(nuevaCadena); // Obtener la propiedades result en una lista IList<JToken> results = jsonML["initialState"]["results"].Children().ToList(); // Serializa resultados JSON a un objeto .NET IList<Product> busquedaObtenida = new List<Product>(); //recorremos los datos y los agregamos a la lista foreach (JToken resultado in results) { Product busquedaDeserializada = JsonConvert.DeserializeObject<Product>(resultado.ToString()); busquedaObtenida.Add(busquedaDeserializada); } //Limpiamos el datagridview dataGridView1.Columns.Clear(); //Iterar el arreglo o matriz foreach (Product item in busquedaObtenida) { //Establecemos el numero de columnas de DGV dataGridView1.ColumnCount = 6; //Agregamos las columnas dataGridView1.Columns[0].Name = "Sitio"; dataGridView1.Columns[1].Name = "Nombre"; dataGridView1.Columns[2].Name = "Stock"; dataGridView1.Columns[3].Name = "Precio"; dataGridView1.Columns[4].Name = "Ciudad"; dataGridView1.Columns[5].Name = "Enlace"; //Definimos el formato de las columnas DataGridView dgv = dataGridView1; dgv.Columns[3].DefaultCellStyle.Format = "c"; dgv.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; try { //Instaciamos y creamos un objeto tipo row y copiamos la priemr fila DataGridViewRow row = (DataGridViewRow)dataGridView1.Rows[0].Clone(); //Insertamos los datos en las filas row.Cells[0].Value = "ML"; row.Cells[1].Value = item.title; row.Cells[2].Value = int.Parse(item.available_quantity); row.Cells[3].Value = decimal.Parse(item.price.amount); row.Cells[4].Value = item.seller_info.address.city.name; row.Cells[5].Value = item.permalink; //Agregamos las filas al DGV dataGridView1.Rows.Add(row); } catch(Exception e) { //MessageBox.Show("Error:" + e); } } } catch (Exception e) { MessageBox.Show("Error:" + e); } } private void button1_Click(object sender, EventArgs e) { consultaOfertasML(); } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText.Contains("Enlace")) { if (!String.IsNullOrWhiteSpace(dataGridView1.CurrentCell.EditedFormattedValue.ToString())) { System.Diagnostics.Process.Start("" + dataGridView1.CurrentCell.EditedFormattedValue); } } } } }


______________________________________________________________________________
CLASE PRODUCT

namespace buscadorOfertas
{
    internal class Product
    {
      
            public string siteId { get; set; }

            public string id { get; set; }

            public string title { get; set; }

            public precios price { get; set; }

            public seller seller_info { get; set; }

            public string permalink { get; set; }

            public string available_quantity { get; set; }


            public class precios
            {

                public string currency_id { get; set; }
                public string amount { get; set; }

            }

            public class seller
            {

                public direccion address { get; set; }

            }


            public class direccion
            {

                public ciudad city { get; set; }


            }


            public class ciudad
            {

                public string name { get; set; }

            

        }

    }
}






Comentarios

Lo mejor de Pixels Price

CREA TU PROPIO TEAM VIEWER CON C# (PARTE 3) CONTROLA EL TECLADO

Crear códigos de barras con C#

Crear documentos PDF con C#