Convert dresdenwetter to browser2

This commit is contained in:
Florent 2014-03-18 10:43:06 +01:00
commit 8b0bb88d14
3 changed files with 57 additions and 56 deletions

View file

@ -43,7 +43,9 @@ class DresdenWetterBackend(BaseBackend, ICapGauge):
gauge.name = u"Private Wetterstation Dresden" gauge.name = u"Private Wetterstation Dresden"
gauge.city = u"Dresden" gauge.city = u"Dresden"
gauge.object = u"Weather" gauge.object = u"Weather"
gauge.sensors = self.browser.get_sensors_list() gauge.sensors = []
for sensor in self.browser.get_sensors_list():
gauge.sensors.append(sensor)
yield gauge yield gauge
def _get_gauge_by_id(self, id): def _get_gauge_by_id(self, id):

View file

@ -18,27 +18,18 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser import BaseBrowser from weboob.tools.browser2 import PagesBrowser, URL
from .pages import StartPage from .pages import StartPage
__all__ = ['DresdenWetterBrowser'] __all__ = ['DresdenWetterBrowser']
class DresdenWetterBrowser(BaseBrowser): class DresdenWetterBrowser(PagesBrowser):
DOMAIN = u'www.dresden-wetter.de' BASEURL = 'http://www.dresden-wetter.de'
ENCODING = None
PAGES = {'.*': StartPage}
homepage = '/Current_Vantage_Pro.htm' home = URL('/Current_Vantage_Pro.htm', StartPage)
def __init__(self, *args, **kwargs):
BaseBrowser.__init__(self, *args, **kwargs)
def home(self):
self.location(self.homepage)
def get_sensors_list(self): def get_sensors_list(self):
if not self.is_on_page(StartPage): return self.home.stay_or_go().get_sensors_list()
self.home()
return self.page.get_sensors_list()

View file

@ -17,7 +17,8 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser import BasePage from weboob.tools.browser2.page import HTMLPage, method, ListElement, ItemElement
from weboob.tools.browser2.filters import CleanText, Env
from weboob.capabilities.gauge import GaugeMeasure, GaugeSensor from weboob.capabilities.gauge import GaugeMeasure, GaugeSensor
from weboob.capabilities.base import NotAvailable from weboob.capabilities.base import NotAvailable
@ -25,43 +26,50 @@ from weboob.capabilities.base import NotAvailable
__all__ = ['StartPage'] __all__ = ['StartPage']
class StartPage(BasePage): class StartPage(HTMLPage):
name = [u"Temperatur", u"Wind", u"Luftdruck", u"Luftfeuchtigkeit",
u"Niederschlag", u"Globalstrahlung"]
unit = [u"°C", u"km/h", u"hPa", u"%", u"mm", u"W/m²"]
def get_sensors_list(self): @method
paraphs = self.document.xpath('//p[@align="center"]') class get_sensors_list(ListElement):
sensors = [] item_xpath = '//p[@align="center"]'
for i in range(len(paraphs)):
sensor = GaugeSensor("dd-%s" % self.name[i].lower()) class item(ItemElement):
sensor.name = self.name[i] klass = GaugeSensor
sensor.unit = self.unit[i]
sensor.forecast = NotAvailable obj_name = Env('name')
sensor.history = NotAvailable obj_id = Env('id')
sensor.gaugeid = u"wetter" obj_unit = Env('unit')
paraph = paraphs[i] obj_lastvalue = Env('lastvalue')
obj_gaugeid = u"wetter"
obj_forecast = Env('forecast')
def get_name(self, text):
if u"Niederschlag" not in text:
return text.split(':')[0].strip()
else:
return text.split()[0]
def split_unit(self, text):
if u"Temperatur" in text:
value = text.split(': ')[1].split(u'°')[0]
unit = u'°C'
else:
value = text.split(':')[-1].split()[0]
unit = text.split(':')[-1].split()[1]
return value, unit
def parse(self, el):
text = CleanText(el)(self)
name = self.get_name(text)
_id = u"dd-%s" % name
self.env['name'] = name
self.env['id'] = _id
level, self.env['unit'] = self.split_unit(text)
lastvalue = GaugeMeasure() lastvalue = GaugeMeasure()
lastvalue.level = float(level)
lastvalue.alarm = NotAvailable lastvalue.alarm = NotAvailable
if i == 0: self.env['lastvalue'] = lastvalue
text = paraph.xpath('b/span/font[@size="4"]')[1].text self.env['forecast'] = NotAvailable
lastvalue.level = float(text.split('\n')[1].split(u'°')[0])
if i == 1:
text = paraph.xpath('b/span/font')[2].text
lastvalue.level = float(text.split('\n')[1])
if i == 2:
text = paraph.xpath('span/font/b')[0].text
lastvalue.level = float(text.split('\n')[2].split('hPa')[0])
if i == 3:
text = paraph.xpath('span/font[@size="4"]/b')[0].text
lastvalue.level = float(text.split('\n')[2].split(u'%')[0]
.split(':')[1])
if i == 4:
text = paraph.xpath('b/font[@size="4"]/span')[0].text
lastvalue.level = float(text.split('\n')[0])
if i == 5:
text = paraph.xpath('b/font/span')[0].text
lastvalue.level = float(text.split('\n')[1])
sensor.lastvalue = lastvalue
sensors.append(sensor)
return sensors