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
Publicar un comentario