예제 #1
0
    def parse_suc(self, html_snippet):
        pq = PyQuery(html_snippet)
        data = {}
        data['nombre'] = 'Sucursal ' + pq('.name a').text()
        data['cadena_nombre'] = pq('.name + div img').attr('title')
        data['cadena_id'] = nombre2id[data['cadena_nombre']]
        data['direccion'] = pq('.name + div + div').text()

        prov_ciudad = pq('.name + div + div + div').text()
        normal_prov_ciudad = texto.normalizar(prov_ciudad)
        prov_ciudad = prov_ciudad.split()
        for p in PROVINCIAS:
            if p in normal_prov_ciudad:
                break
        else:
            assert ValueError("provincia en %s" % normal_prov_ciudad)

        # la pampa, la rioja
        sep = len(p.split())
        data['provincia'] = " ".join(prov_ciudad[:sep])
        data['ciudad'] = " ".join(prov_ciudad[sep:])

        ciudad = inferir_ciudad(data['ciudad'], data['provincia'])
        if ciudad:
            data['ciudad_relacionada_id'] = ciudad[2]
        ubicacion = pq('.encuentra-la-ruta').attr('rel').split('l(')[1][:-1].split(', ')
        data['lat'], data['lon'] = ubicacion
        data['telefono'] = pq('.name + div + div + div + div').text().strip()
        return data
예제 #2
0
    def parse_sucursal(self, suc):

        s = {}
        s['nombre'] = suc['nombre']
        s['cadena'] = 'Disco'
        s['cadena_id'] = 6

        dire = re.findall(r'(^.*)\.([ \d / -]+)$', suc['direccion'])
        if dire:
            s['direccion'] = dire[0][0].strip()
            s['telefono'] = dire[0][1].strip()
        else:
            s['direccion'] = suc['direccion']

        if suc['barrio'] in BARRIOS_CBA:
            # simplifico a cba
            suc['barrio'] = u'Córdoba'

        ciudad_inferida = inferir_ciudad(suc['barrio'], suc['provincia'])

        if ciudad_inferida:

            s['ciudad'] = suc['barrio']
            s['ciudad_inferida'] = ciudad_inferida[0]
            s['ciudad_relacionada_id'] = ciudad_inferida[2]

        s['provincia'] = suc['provincia']
        return s
예제 #3
0
    def limpiar(self, place, ciudad):
        """
        devuelve un diccionario con las siguientes claves::

            nombre, cadena, direccion, lon, lat, ciudad_segun_google,
            related_city_id, telefono, url, cadena_nombre, cadena_id
        """

        place.get_details()
        suc = {}

        # Place a veces no trae la direccion
        # y quedará (ciudad, provincia), en vez de (direccion, ciudad)
        dire = place.formatted_address.split(',')
        hay = len(dire) == 4
        suc['direccion'] = dire[0].strip() if hay else ''

        suc['ciudad'] = dire[1].strip() if hay else dire[0].strip()
        suc['provincia'] = dire[2].strip() if hay else dire[1].strip()
        suc['provincia'] = suc['provincia'].strip(' Province')

        # como google place busca un radio a partir de una ciudad, no necesariamente
        # el supermercado encontrado **es** de esa ciudad.
        # La ciudad_relacionada debe tomarse sólo como referencia.
        # porque la inferencia puede fallar.
        suc['ciudad_relacionada_id'] = ciudad.id
        ciudad_data = inferir_ciudad(suc['ciudad'], suc['provincia'])
        if ciudad_data:
            (suc['ciudad'],
             suc['provincia'],
             suc['ciudad_relacionada_id']) = ciudad_data
        suc['nombre'] = place.name
        cadena = inferir_cadena(place.name)
        if cadena:
            suc['cadena_nombre'], suc['cadena_id'] = cadena
        suc['lon'] = place.geo_location['lng']
        suc['lat'] = place.geo_location['lat']
        if suc['direccion'] == '':
            # Se deberia hacer un reverse lookup a partir de la localizacion
            # via la API de google maps.
            dire = reverse_geocode(suc['lat'], suc['lon'])
            if dire:

                suc['direccion'] = dire.split(',')[0]

        suc['telefono'] = place.local_phone_number
        suc['url'] = place.website

        return suc