def __init__(self): ProbeParser.__init__(self) # the HTML parser info self.__html_parser = MunimadridDotEsHTMLParser() # fill up the probe list. # Note that all probes are updated from the same URL # self.probe_list.append( Probe(u'Madrid - Plaza España', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PZAESPANA_LAT, MUNIMADRID_DOT_ES_PZAESPANA_LON)) self.probe_list.append( Probe(u'Madrid - Escuelas Aguirre', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_ESCUELASAGUIRRE_LAT, MUNIMADRID_DOT_ES_ESCUELASAGUIRRE_LON)) self.probe_list.append( Probe(u'Madrid - Avda. Ramon y Cajal', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_RAMONYCAJAL_LAT, MUNIMADRID_DOT_ES_RAMONYCAJAL_LON)) self.probe_list.append( Probe(u'Madrid - Arturo Soria', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_ARTUROSORIA_LAT, MUNIMADRID_DOT_ES_ARTUROSORIA_LON)) self.probe_list.append( Probe(u'Madrid - Villaverde', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_VILLAVERDE_LAT, MUNIMADRID_DOT_ES_VILLAVERDE_LON)) self.probe_list.append( Probe(u'Madrid - Farolillo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_FAROLILLO_LAT, MUNIMADRID_DOT_ES_FAROLILLO_LON)) self.probe_list.append( Probe(u'Madrid - Casa de Campo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_CASADECAMPO_LAT, MUNIMADRID_DOT_ES_CASADECAMPO_LON)) self.probe_list.append( Probe(u'Madrid - Barajas pueblo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_BARAJASPUEBLO_LAT, MUNIMADRID_DOT_ES_BARAJASPUEBLO_LON)) self.probe_list.append( Probe(u'Madrid - Plaza del Carmen', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PZACARMEN_LAT, MUNIMADRID_DOT_ES_PZACARMEN_LON)) self.probe_list.append( Probe(u'Madrid - Moratalaz', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_MORATALAZ_LAT, MUNIMADRID_DOT_ES_MORATALAZ_LON)) self.probe_list.append( Probe(u'Madrid - Cuatro caminos', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_CUATROCAMINOS_LAT, MUNIMADRID_DOT_ES_CUATROCAMINOS_LON)) self.probe_list.append( Probe(u'Madrid - Barrio del pilar', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PILAR_LAT, MUNIMADRID_DOT_ES_PILAR_LON)) self.probe_list.append( Probe(u'Madrid - Puente de Vallecas', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_VALLECAS_LAT, MUNIMADRID_DOT_ES_VALLECAS_LON)) self.probe_list.append( Probe(u'Madrid - Mendez Alvaro', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_MENDEZALVARO_LAT, MUNIMADRID_DOT_ES_MENDEZALVARO_LON)) self.probe_list.append( Probe(u'Madrid - Castellana', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_CASTELLANA_LAT, MUNIMADRID_DOT_ES_CASTELLANA_LON)) self.probe_list.append( Probe(u'Madrid - Retiro', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_RETIRO_LAT, MUNIMADRID_DOT_ES_RETIRO_LON)) self.probe_list.append( Probe(u'Madrid - Plaza de Castilla', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PZACASTILLA_LAT, MUNIMADRID_DOT_ES_PZACASTILLA_LON)) self.probe_list.append( Probe(u'Madrid - Ensanche de Vallecas', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_ENSANCHEVALLECAS_LAT, MUNIMADRID_DOT_ES_ENSANCHEVALLECAS_LON)) self.probe_list.append( Probe(u'Madrid - Urbanizacion embajada', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_URBEMBAJADA_LAT, MUNIMADRID_DOT_ES_URBEMBAJADA_LON)) self.probe_list.append( Probe(u'Madrid - Fernandez Ladreda', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_FDEZLADREDA_LAT, MUNIMADRID_DOT_ES_FDEZLADREDA_LON)) self.probe_list.append( Probe(u'Madrid - Sanchinarro', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_SANCHINARRO_LAT, MUNIMADRID_DOT_ES_SANCHINARRO_LON)) self.probe_list.append( Probe(u'Madrid - El Pardo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PARDO_LAT, MUNIMADRID_DOT_ES_PARDO_LON)) self.probe_list.append( Probe(u'Madrid - Juan Carlos I', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_JUANCARLOSI_LAT, MUNIMADRID_DOT_ES_JUANCARLOSI_LON)) self.probe_list.append( Probe(u'Madrid - Tres Olivos', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_TRESOLIVOS_LAT, MUNIMADRID_DOT_ES_TRESOLIVOS_LON))
class MunimadridDotEsLiveProbeParser(ProbeParser): """ Parser to retrieve probe data from munimadrid.es One single URL updates all probes data feed in munimadrid.es. """ def __init__(self): ProbeParser.__init__(self) # the HTML parser info self.__html_parser = MunimadridDotEsHTMLParser() # fill up the probe list. # Note that all probes are updated from the same URL # self.probe_list.append( Probe(u'Madrid - Plaza España', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PZAESPANA_LAT, MUNIMADRID_DOT_ES_PZAESPANA_LON)) self.probe_list.append( Probe(u'Madrid - Escuelas Aguirre', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_ESCUELASAGUIRRE_LAT, MUNIMADRID_DOT_ES_ESCUELASAGUIRRE_LON)) self.probe_list.append( Probe(u'Madrid - Avda. Ramon y Cajal', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_RAMONYCAJAL_LAT, MUNIMADRID_DOT_ES_RAMONYCAJAL_LON)) self.probe_list.append( Probe(u'Madrid - Arturo Soria', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_ARTUROSORIA_LAT, MUNIMADRID_DOT_ES_ARTUROSORIA_LON)) self.probe_list.append( Probe(u'Madrid - Villaverde', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_VILLAVERDE_LAT, MUNIMADRID_DOT_ES_VILLAVERDE_LON)) self.probe_list.append( Probe(u'Madrid - Farolillo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_FAROLILLO_LAT, MUNIMADRID_DOT_ES_FAROLILLO_LON)) self.probe_list.append( Probe(u'Madrid - Casa de Campo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_CASADECAMPO_LAT, MUNIMADRID_DOT_ES_CASADECAMPO_LON)) self.probe_list.append( Probe(u'Madrid - Barajas pueblo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_BARAJASPUEBLO_LAT, MUNIMADRID_DOT_ES_BARAJASPUEBLO_LON)) self.probe_list.append( Probe(u'Madrid - Plaza del Carmen', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PZACARMEN_LAT, MUNIMADRID_DOT_ES_PZACARMEN_LON)) self.probe_list.append( Probe(u'Madrid - Moratalaz', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_MORATALAZ_LAT, MUNIMADRID_DOT_ES_MORATALAZ_LON)) self.probe_list.append( Probe(u'Madrid - Cuatro caminos', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_CUATROCAMINOS_LAT, MUNIMADRID_DOT_ES_CUATROCAMINOS_LON)) self.probe_list.append( Probe(u'Madrid - Barrio del pilar', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PILAR_LAT, MUNIMADRID_DOT_ES_PILAR_LON)) self.probe_list.append( Probe(u'Madrid - Puente de Vallecas', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_VALLECAS_LAT, MUNIMADRID_DOT_ES_VALLECAS_LON)) self.probe_list.append( Probe(u'Madrid - Mendez Alvaro', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_MENDEZALVARO_LAT, MUNIMADRID_DOT_ES_MENDEZALVARO_LON)) self.probe_list.append( Probe(u'Madrid - Castellana', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_CASTELLANA_LAT, MUNIMADRID_DOT_ES_CASTELLANA_LON)) self.probe_list.append( Probe(u'Madrid - Retiro', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_RETIRO_LAT, MUNIMADRID_DOT_ES_RETIRO_LON)) self.probe_list.append( Probe(u'Madrid - Plaza de Castilla', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PZACASTILLA_LAT, MUNIMADRID_DOT_ES_PZACASTILLA_LON)) self.probe_list.append( Probe(u'Madrid - Ensanche de Vallecas', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_ENSANCHEVALLECAS_LAT, MUNIMADRID_DOT_ES_ENSANCHEVALLECAS_LON)) self.probe_list.append( Probe(u'Madrid - Urbanizacion embajada', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_URBEMBAJADA_LAT, MUNIMADRID_DOT_ES_URBEMBAJADA_LON)) self.probe_list.append( Probe(u'Madrid - Fernandez Ladreda', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_FDEZLADREDA_LAT, MUNIMADRID_DOT_ES_FDEZLADREDA_LON)) self.probe_list.append( Probe(u'Madrid - Sanchinarro', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_SANCHINARRO_LAT, MUNIMADRID_DOT_ES_SANCHINARRO_LON)) self.probe_list.append( Probe(u'Madrid - El Pardo', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_PARDO_LAT, MUNIMADRID_DOT_ES_PARDO_LON)) self.probe_list.append( Probe(u'Madrid - Juan Carlos I', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_JUANCARLOSI_LAT, MUNIMADRID_DOT_ES_JUANCARLOSI_LON)) self.probe_list.append( Probe(u'Madrid - Tres Olivos', MUNIMADRID_DOT_ES_PROBE_URL, MUNIMADRID_DOT_ES_TRESOLIVOS_LAT, MUNIMADRID_DOT_ES_TRESOLIVOS_LON)) def update(self): print "parsing munimadrid.es..." # ensure the aprser is clean to start the parsing process self.__html_parser.reset() req = urllib2.Request(MUNIMADRID_DOT_ES_PROBE_URL, data=None, headers=HTTP_HEADERS) htmlFile = urllib2.urlopen(req) # what character encoding set is this file???? charset = htmlFile.headers.getparam('charset') for line in htmlFile.readlines(): # munimadrid is UTF-8, but still we should be doing things right line = line.strip().decode(charset).encode("utf-8") try: self.__html_parser.feed(line) except HTMLParseError, ex: print "Exception %s" % (ex.msg) htmlFile.close() for probeEntry in self.__html_parser.m_probePollutantsList: # look for the right probe to store the list of pollutants into it for probe in self.probe_list: if (probe.name[9:].upper() == probeEntry['Estaci\xc3\xb3n'].upper().decode("utf-8")): thisMeasure = ProbeMeasure() thisMeasure.sample_time = self.__html_parser.m_sampleTime if ('PM10' in probeEntry): thisMeasure.pm10 = probeEntry['PM10'] if ('PM2.5' in probeEntry): thisMeasure.pm25 = probeEntry['PM2.5'] if ('SO2' in probeEntry): thisMeasure.so2 = probeEntry['SO2'] if ('CO' in probeEntry): thisMeasure.co = probeEntry['CO'] if ('O3' in probeEntry): thisMeasure.o3 = probeEntry['O3'] if ('NO2' in probeEntry): thisMeasure.no2 = probeEntry['NO2'] if ('BEN' in probeEntry): thisMeasure.ben = probeEntry['BEN'] if ('TOL' in probeEntry): thisMeasure.tol = probeEntry['TOL'] probe.last_measure = thisMeasure # Found what we were looking for. Exit this loop break else: if (probeEntry['Estaci\xc3\xb3n'].upper().decode("utf-8") != 'MEDIA RED'): # There is no probe that matches this name. # it always happens with "MEDIA RED" (network average) print 'Error: Can\'t match probe name: ' + probeEntry['Estaci\xc3\xb3n'].upper()