diff --git a/modules/yahoo/backend.py b/modules/yahoo/backend.py index 5f1758ec..8beb2426 100644 --- a/modules/yahoo/backend.py +++ b/modules/yahoo/backend.py @@ -22,13 +22,14 @@ from __future__ import with_statement import urllib2 from xml.dom import minidom +from dateutil.parser import parse as parse_dt # TODO store datetime objects instead of strings # from datetime import datetime from weboob.capabilities.weather import ICapWeather, CityNotFound, Current, Forecast, City from weboob.tools.backend import BaseBackend -from weboob.tools.browser import BaseBrowser +from weboob.tools.browser import StandardBrowser __all__ = ['YahooBackend'] @@ -41,50 +42,27 @@ class YahooBackend(BaseBackend, ICapWeather): VERSION = '0.d' DESCRIPTION = 'Yahoo!' LICENSE = 'AGPLv3+' - BROWSER = BaseBrowser + BROWSER = StandardBrowser WEATHER_URL = 'http://weather.yahooapis.com/forecastrss?w=%s&u=%s' - SEARCH_URL = 'http://fr.meteo.yahoo.com/search/weather?p=%s' def create_default_browser(self): - return self.create_browser() + return self.create_browser(parser='json') def iter_city_search(self, pattern): - # minidom doesn't seem to work with that page + args = {'q': 'select line1, line2, line3, line4, city, uzip, statecode, countrycode, latitude, longitude, ' + 'country, woeid, quality, house, street, state from locdrop.placefinder ' + 'where text="%s" and locale="fr-FR" and gflags="f"' % pattern.encode('utf-8'), + 'format': 'json', + } + doc = self.browser.location(self.browser.buildurl('http://locdrop.query.yahoo.com/v1/public/yql', **args)) - #handler = urllib2.urlopen((self.SEARCH_URL % pattern).replace(' ','+')) - #dom = minidom.parse(handler) - #handler.close() - #results = dom.getElementById('search-results') - #for no in results.childNodes: - # print no.nodeValue + cities = doc['query']['results']['Result'] + if not isinstance(cities, (tuple,list)): + cities = [cities] - # so i use a basic but efficient parsing - with self.browser: - content = self.browser.readurl((self.SEARCH_URL % pattern.encode('utf-8')).replace(' ','+')) - - page='' - for line in content.split('\n'): - if "