Git Product home page Git Product logo

preciosa's Introduction

Preciosa

https://travis-ci.org/mgaitan/preciosa.png?branch=develop

Preciosa es una plataforma web con aplicaciones para teléfonos inteligentes que facilita conocer los precios de venta minorista y ayuda a encontrar mejores ofertas.

A diferencia de otras aplicaciones existentes, Preciosa no limita la información a precios de productos bajo acuerdo o informados por los propios supermercados y enfatiza la participación de los usuarios para mantener la información actualizada.

web:http://preciosdeargentina.com.ar
documentación:http://preciosa.readthedocs.org/
issue tracker:https://github.com/mgaitan/preciosa/issues
twitter:@PreciosaApp
lista:https://groups.google.com/forum/#!forum/preciosa-devs

¡Necesitamos tu ayuda!

Si sabés python, javascript, diseño/desarrollo web, desarrollo de apps para móviles, webscraping en cualquier lenguaje o cualquier otra tecnologia o conocimiento que consideres relevante para Preciosa, por favor, sumate a la lista de correo y ponete en contacto. ¡Te necesitamos!

preciosa's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

preciosa's Issues

Formato del JSON entregado por los scrapers & código de ciudad.

@mgaitan Tengo un par de dudas.

Formato JSON

Ya tengo listo los dumps en json. La primer duda es sobre el formato. ¿Está bien si el scraper entrega una lista? Del estilo que tenés dentro de "fields" en los fixtures. Por ejemplo para Mariano Max, los dumps que genero son:

[{"nombre": "Cruz del Eje (Suc. 6)", "ciudad": "Cruz del eje", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 13 hs. y de 17 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 13 hs.", "direccion": "Jos\u00e9 Hern\u00e1ndez esq. Mitre, Cruz del Eje \u2013 Provincia de C\u00f3rdoba."}, {"nombre": "Jes\u00fas Mar\u00eda (Suc. 4)", "ciudad": "Jesus Maria", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 13 hs. y de 17 hs. a 21.30 hs.Domingos y Feriados: de 9 hs. a 13.30 hs.", "direccion": "Italia 363, Jes\u00fas Mar\u00eda."}, {"nombre": "Jos\u00e9 Ignacio D\u00edaz (Suc. 1)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bado: de 8 hs. a 13 hs. y de 17 hs. a 21 hs.Domingos y Feriados: de 9 hs. a 13 hs.", "direccion": "Av. 11 de Setiembre 2765 - B\u00b0 Jos\u00e9 Ignacio Diaz 2da Secci\u00f3n."}, {"nombre": "Villa Corina (Suc. 2)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 22 hs.", "direccion": "Av. A. Capdevila 1831 esq. Rancagua - B\u00b0 Villa Corina."}, {"nombre": "Amp. Centro Am\u00e9rica (Suc. 3)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 13 hs. y de 17 hs. a 21 hs.Domingos y Feriados: de 9 hs. a 13 hs.", "direccion": "Av. Saavedra Lamas 900 esq. L. Membrives - B\u00b0 A. C. Am\u00e9rica."}, {"nombre": "Los Pl\u00e1tanos (Suc. 5)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 22 hs.", "direccion": "Santa Ana 3551 esq. F\u00e9lix Paz - B\u00ba Los Pl\u00e1tanos."}, {"nombre": "Las Flores (Suc. 7)", "ciudad": "Cordoba", "horarios": "Lunes a S\u00e1bados: de 8 hs. a 22 hs.Domingos y Feriados: de 9 hs. a 22 hs.", "direccion": "Av. Velez Sarsfield 4051 \u2013 Provincia de C\u00f3rdoba."}]

¿O necesitás que te pase también los parámetros "pk" y "model"?

Segunda duda

Como verás, las ciudades aún están referenciadas por nombre, lo cual es ambiguo, tenés razón. ¿Te parece bien si directamente te paso el código de la ciudad, de acuerdo a los códigos que usas en tus fixtures?

Resolviendo estas dudas, hoy mismo te entrego los scrapers de Hiper Libertad, Mariano Max y Yaguar. Aún pueden quedar errores, va quedando cada vez más completo.

Página Facebook

Crear página en facebook y poner el botón "Me gusta" bien visible en la web.

Marcas Nestlé

http://www.nestle.com.ar/marcas

PUREZA VITAL  
AWAFRUT
ECO DE LOS ANDES
GLACIAR
NESTUM
NAN PRO 3
Purina
Nesquick
Nescau
Nescafé
NESPRESSO
AMANACER
COFFEE-MATE 
Dolca
CHOCAPIC
TRIX
FITNESS
Nestlé 
SUFLAIR
CRUNCH
GAROTO
SERENATA DE AMOR
BATÓN
Maggi
    EPA!
    TORPEDO
    CHOMP
    FRIGOR
    SIN PARAR
    MEGA
    LA FRUTTA
    NOVELTY
    LUXOR
    CONOGOL
    NESQUIK
    PICO DULCE
    POPSY
    HELLO KITTY
NIDO
LA LECHERA
SVELTY 

Sucursales Chango Más

las sucursales de chango más se pueden scrappear desde http://www.superchangomas.com.ar/

similares expresiones regulares que para el sitio de walmart

[
 '/sucursales/alberdi.php',
 '/sucursales/cap_fed_av_san_juan.php',
 '/sucursales/canada_de_gomez.php',
 '/sucursales/cuenca.php',
 '/sucursales/flores.php',
 '/sucursales/la_boca.php',
 '/sucursales/liniers.php',
 '/sucursales/mataderos.php',
 '/sucursales/sucursal.php?id=1090',
 '/sucursales/3_de_febrero.php',
 '/sucursales/almirante_brown.php',
 '/sucursales/jose_c_paz.php',
 '/sucursales/junin.php',
 '/sucursales/lanus.php',
 '/sucursales/malvinas_argentinas.php',
 '/sucursales/moreno.php',
 '/sucursales/moreno_shopping.php',
 '/sucursales/san_martin.php',
 '/sucursales/sucursal.php?id=1084',
 '/sucursales/gba_tigre.php',
 '/sucursales/sucursal.php?id=1059',
 '/sucursales/sucursal.php?id=1076',
 '/sucursales/sucursal.php?id=1077',
 '/sucursales/sucursal.php?id=1100',
 '/sucursales/sucursal.php?id=1044',
 '/sucursales/sucursal.php?id=1045',
 '/sucursales/sucursal.php?id=1069',
 '/sucursales/sucursal.php?id=1089',
 '/sucursales/sucursal.php?id=1091',
 '/sucursales/sucursal.php?id=1046',
 '/sucursales/catamarca.php',
 '/sucursales/villa_nueva.php',
 '/sucursales/cordoba_fuerza_aerea.php',
 '/sucursales/sucursal.php?id=1097',
 '/sucursales/sucursal.php?id=1098',
 '/sucursales/parana.php',
 '/sucursales/formosa.php',
 '/sucursales/san_pedro_jujuy.php',
 '/sucursales/jujuy.php',
 '/sucursales/la_pampa.php',
 '/sucursales/la_rioja.php',
 '/sucursales/?fid=4',
 '/sucursales/mendoza_maipu.php',
 '/sucursales/mendoza_san_martin.php',
 '/sucursales/sucursal.php?id=1051',
 '/sucursales/sucursal.php?id=1099',
 '/sucursales/neuquen.php',
 '/sucursales/bariloche.php',
 '/sucursales/cipolletti.php',
 '/sucursales/viedma.php',
 '/sucursales/salta.php',
 '/sucursales/salta_oran.php',
 '/sucursales/sucursal.php?id=1075',
 '/sucursales/sucursal.php?id=1078',
 '/sucursales/santiago_del_estero.php',
 '/sucursales/sucursal.php?id=1081',
 '/sucursales/sucursal.php?id=1092',
 '/sucursales/villa_mercedes.php',
 '/sucursales/rio_sali.php',
 '/sucursales/sucursal.php?id=1082',
 '/sucursales/sucursal.php?id=1106',
 '/sucursales/sucursal.php?id=1088',
  '/sucursales/neuquen.php',
 '/sucursales/catamarca.php',
 '/sucursales/parana.php',
 '/sucursales/formosa.php',
 '/sucursales/la_pampa.php',
 '/sucursales/la_rioja.php',
 '/sucursales/neuquen.php',
 '/sucursales/santiago_del_estero.php',
 '/sucursales/villa_mercedes.php']

Menu categorias

A patir del modelo Categorias, hacer un menu desplegable con links a las vistas de listados de productos por categoria

Sucursales Carrefour y submarcas

El sistema de carrefour es un buscador geolocalizado basicamente hace un POST
a la direccion
http://www.carrefour.com.ar/storelocator/index/search/

r = requests.post('http://www.carrefour.com.ar/storelocator/index/search/', {'search[address]': 'Mendoza, Argentina', 'search[geocode]': '-32.890183,-68.8440498'})

El parametro search[geocode] es latitude, longitude de la ciudad en cuestion (datos existentes en el modelo City)

Los resultados pueden capturarse así.

pq = PyQuery(r.content)
pq('div.storelocator_result')

Tener en cuenta que los resultados son por proximidad geográfica. Si se busca "Ushuaia", aparecen tambien locales de Rio Grande.

Asociar producto a marca

En la vista de detalle de producto (#35), si no tiene asociada una marca, preguntar al usuario

plan a) Si se puede inferir marca (a partir del UPC o por palabra clave en la descripción)
preguntar "Ayudanos a confirmar ¿Este producto es marca XX? Si, NO. Si responde NO, aparece el formulario de plan b)

plan b) Presenta un combo autocompletable que permita buscar la marca en cuestion. Si esta no existe en la bbdd, ofrece la vista para cargar Marca y logo (#36)

Implementar API rest v1

Dado el modelo de datos, implementar una API rest pública básica. Debe permitir consultar

  • Sucursales de super. List + Create. /sucursales/ Filtro por ciudad o posición + radio
  • Categorias. ListAPIView /categorias/ devuelve roots, categorias/<pk> devuelve hijas de categoria <pk>
  • Productos de categorias. ListAPIView /categorias/XX/productos devuelve un LIST de productos para esa categoria
  • Productos. ListView + Create. /productos/[<UPC>] . Debe permitir filtrar por los numeros UPC (istartswith) y palabras, similar al buscador que tenemos. El post (crear instancia) requiere UPC y categoria de nivel 3 como obligatorio.
  • Precios para sucursal + producto. List + Create /sucursales/<pk>/productos/[<UPC>] . Si no se especififica el UPC devuelve la lista de productos mas frecuentes (con más instancias de precios relacionadas). Para POST requiere el UPC y el dato obligatorio es el importe
  • Cadena. List + create
  • Ciudades . List (sólo lectura)

Homepage: blog

Para el primer deploy, la homepage será un sistema de blog. Poner resumen de articulos y comentarios de disqus.

Vista detalle

Muestra Detalle del producto

  • UPC
  • mejor precio para "mi ubicación"

Mapa de productos de coto

Completado #18, hay que realizar un algoritmo que trate de asociar el listado de productos (por descripcion y opcionalmente categorias) a un producto existente en la base con UPC.

debe discriminar los productos no encontrados y generar otro json.

Tambien agregar un modelo UrlProd que asocie una url a un producto y cadena.

Una posibilidad es utilizar difflib. O bien hacer subsecuentes filtros de palabras en la descripcion de Coto.

Ejemplo:

http://www.cotodigital.com.ar/s.asp?id=69977&st=articulo&U=http%3A//www.cotodigital.com.ar/l.asp%3Fcat%3D691%26id%3D691 ($195)

en datos de walmart relevados es:

In [16]: Producto.objects.filter(descripcion__icontains='paladini').filter(descripcion__icontains='bondiola')
Out[16]: [<Producto: Bondiola paladini 100 gr>]
In [17]: Producto.objects.filter(descripcion__icontains='paladini').filter(descripcion__icontains='bondiola')[0].precio_set.all()
Out[17]: [<Precio: Bondiola paladini 100 gr: $ 21>]

PD: notar que es el mismo producto expresado en distinta unidad.

sucursales yaguar

Se pueden scrappear desde

www.yaguar.com/frontendSP/asp/XX

donde XX es

['iframe_Autopista.asp',
 'iframe_sucursalSantaFe.asp',
 'iframe_SucursalesChaco.asp',
 'iframe_SucursalesMendoza.asp',
 'iframe_Sucursalesbahiablanca.asp',
 'iframe_SucursalesCampana.asp',
 'iframe_SucursalesMoreno.asp',
 'iframe_SucursalesjoseCpaz.asp',
 'iframe_sucursalescordoba.asp',
 'iframe_SucursalesTigre.asp',
 'iframe_sucursalesneuquen.asp',
 'iframe_sucursalesSalta.asp',
 'iframe_MardelPlata.asp',
 'iframe_SanJuan.asp']

Twitter

incluir un widget del stream (filtrado ?) del hash #Preciosa y/o registrar un usuario y retuitear.

Marcas de Kellog's

Pringles
Zucaritas
Corn Flakes
Kellness
Choco Krispis
All-bran
Froot Loops

Importar acuerdo de Precios

La información de acuerdo de precios (~500 productos por cadena) fue sistematizada en un formato de texto plano tabular por Ezequiel Fernandez Vera a partir de los PDF difundidos por el gobierno.

Realizamos un script que parsea estos datos.

Hay que extender ese script para incoporar los datos directamente a la base de datos y. de ser posible, incoporar los códigos UPC de los productos referidos cruzando datos con otra fuente de información (quizas los datos de #6 sirvan, al menos para el caso del acuerdo con Walmart).

En el repositorio de datos se encuentra disponible el archivo acuerdo_de_precios.tar.gz que contiene los archivos aportados por Ezequiel y el json generado hasta el momento

Vista listado

Una vista que liste los productos por categoria.

debe estar paginado y mostrar el thumbnail del producto con mejor precio

quizas deba presentarse en un grid a 2 columnas

Marcas Arcor

generar fixture y conseguir logos

    Arcor
    Bon o Bon
    Rocklets
    Cofler
    Butter Toffees
    Nikolo
    Hamlet
    Sapito
    Mr. Pop´s
    Menthoplus
    Poosh
    Blow Up
    Mogul
    Topline 
    BigTime
    Noel
    Águila
    Cabsha
    Saladix
    Cereal Mix
    Arcor Helados
    Criollitas
    Diversión
    Formis
    Tofi
    Prestopronta
    Godet
    Hogareñas
    Alka
    Formis
    Maná
    Ser
    Traviata
    Cindor
    Sonrisas
    Rumba
    Opera
    Rex
    Godet
    Slice
    Menthoplus
    Cremino
    Blanco y Negro
    La Campagnola
    BC
    Nereida
    Salsati
    Poncho Negro
    La Vendimia
    Dulciora
    Arcoa

Scrapping de productos y categorías de Walmart

El sitio web https://www.walmartonline.com.ar/ (plataforma de compra online de la cadena Walmart) tiene una gran cantidad de productos clasificados en un árbol de categorías de hasta 3 niveles, con detalles de producto, precio, código UPC y foto.

Realizar un script (posiblemente en formato de management command) que incorpore toda esta información a la base.

  • Realizar un filtro que obtenga la Marca a partir de la descripción del producto
  • Opcionalmente, permitir actualizar el precio de un producto que ya se encuentra en la base.

Nota: En el repositorio de datos el archivo walmart.zip es un aporte de Pablo Peralta que contiene la información cruda de los productos en formato json. Se puede usar como referencia, pero no tiene discriminación de Marca ni categoría de los productos.

Sucursales Hiper Libertad

https://www.libertadsa.com.ar/XX

donde XX es

['misucursal_cordoba.php',
 'misucursal_mendoza.php',
 'misucursal_salta.php',
 'misucursal_santafe.php',
 'misucursal_chaco.php',
 'misucursal_misiones.php',
 'misucursal_sanjuan.php',
 'misucursal_tucuman.php',
 'misucursal_santiago.php']

Super Mami

Estos locales son de Córdoba. Al parecer existe otro en Mendoza

Dinosaurio Mall - Av. Fuerza Aérea Argentina 1700 Bº San Francisco.
Lunes a domingos de 10:00 a 22:00 Hs.Tel.: (351) 526 1566

Dinosaurio Express: Agustín Garzón 1252 Bº San Vicente
Lunes a domingos de 10:00 a 22:00 Hs.Tel.: (351) 526 1595

Colectora Norte de Circunvalación Sur, entre Av. Velez Sarfield y Av. Armada Argentina.
Lunes a domingos de 09:00 a 21:00 Hs. Tel.: (351) 535 1100

Av. Sarmiento 1037 – Ruta E53, Salsipuedes.
Lunes a domingos de 09:00 a 22:00 Hs. 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.