add housing photos

This commit is contained in:
Romain Bignon 2012-02-11 19:06:39 +01:00
commit 0c522d948a
4 changed files with 41 additions and 5 deletions

View file

@ -68,7 +68,13 @@ class SeLogerBackend(BaseBackend, ICapHousing):
def fill_housing(self, housing, fields): def fill_housing(self, housing, fields):
with self.browser: with self.browser:
return self.browser.get_housing(housing.id) if fields != ['photos'] or not housing.photos:
housing = self.browser.get_housing(housing.id)
if 'photos' in fields:
for photo in housing.photos:
if not photo.data:
photo.data = self.browser.readurl(photo.url)
return housing
OBJECTS = {Housing: fill_housing, OBJECTS = {Housing: fill_housing,
} }

View file

@ -20,9 +20,10 @@
import json import json
from weboob.capabilities.base import NotAvailable
from weboob.tools.browser import BaseBrowser from weboob.tools.browser import BaseBrowser
from .pages import SearchResultsPage, HousingPage from .pages import SearchResultsPage, HousingPage, HousingPhotosPage
__all__ = ['SeLogerBrowser'] __all__ = ['SeLogerBrowser']
@ -36,6 +37,7 @@ class SeLogerBrowser(BaseBrowser):
'http://www.seloger.com/(pre)?recherche.htm.*': SearchResultsPage, 'http://www.seloger.com/(pre)?recherche.htm.*': SearchResultsPage,
'http://www.seloger.com/annonces.htm.*': SearchResultsPage, 'http://www.seloger.com/annonces.htm.*': SearchResultsPage,
'http://www.seloger.com/annonces/.*': HousingPage, 'http://www.seloger.com/annonces/.*': HousingPage,
'http://www.seloger.com/\d+/incl_detail_annonce_load_diapo_new.htm': HousingPhotosPage,
} }
def search_geo(self, pattern): def search_geo(self, pattern):
@ -62,4 +64,9 @@ class SeLogerBrowser(BaseBrowser):
self.location('/%d/detail_new.htm' % int(id)) self.location('/%d/detail_new.htm' % int(id))
assert self.is_on_page(HousingPage) assert self.is_on_page(HousingPage)
return self.page.get_housing(obj) housing = self.page.get_housing(obj)
self.location('/%d/incl_detail_annonce_load_diapo_new.htm' % int(id))
housing.photos = list(self.page.iter_photos()) or NotAvailable
return housing

View file

@ -23,10 +23,10 @@ from datetime import date
from weboob.tools.browser import BasePage, BrokenPageError from weboob.tools.browser import BasePage, BrokenPageError
from weboob.capabilities.base import NotAvailable from weboob.capabilities.base import NotAvailable
from weboob.capabilities.housing import Housing from weboob.capabilities.housing import Housing, HousingPhoto
__all__ = ['SearchResultsPage', 'HousingPage'] __all__ = ['SearchResultsPage', 'HousingPage', 'HousingPhotosPage']
def sanitarize_cost(t): def sanitarize_cost(t):
@ -98,3 +98,10 @@ class HousingPage(BasePage):
housing.location = NotAvailable housing.location = NotAvailable
return housing return housing
class HousingPhotosPage(BasePage):
def iter_photos(self):
for i, li in enumerate(self.document.getroot().xpath('//li')):
photo = HousingPhoto(i)
photo.url = li.attrib['rel'].split('|')[0]
yield photo

View file

@ -26,6 +26,21 @@ from .base import IBaseCap, CapBaseObject
__all__ = ['ICapHousing'] __all__ = ['ICapHousing']
class HousingPhoto(CapBaseObject):
def __init__(self, id):
CapBaseObject.__init__(self, id)
self.add_field('url', basestring)
self.add_field('data', str)
def __iscomplete__(self):
return self.data
def __str__(self):
return self.url
def __repr__(self):
return u'<HousingPhoto "%s" data=%do>' % (self.id, len(self.data) if self.data else 0)
class Housing(CapBaseObject): class Housing(CapBaseObject):
def __init__(self, id): def __init__(self, id):
CapBaseObject.__init__(self, id) CapBaseObject.__init__(self, id)
@ -38,6 +53,7 @@ class Housing(CapBaseObject):
self.add_field('station', basestring) self.add_field('station', basestring)
self.add_field('text', basestring) self.add_field('text', basestring)
self.add_field('phone', basestring) self.add_field('phone', basestring)
self.add_field('photos', list)
class Query(CapBaseObject): class Query(CapBaseObject):
def __init__(self): def __init__(self):