diff --git a/modules/lolix/backend.py b/modules/lolix/backend.py
index 9b624dc3..cebb7b25 100644
--- a/modules/lolix/backend.py
+++ b/modules/lolix/backend.py
@@ -17,18 +17,17 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.backend import BaseBackend #, BackendConfig
-# from weboob.tools.value import Value
-
-from .browser import LolixBrowser
-
+from weboob.tools.backend import BaseBackend, BackendConfig
+from weboob.tools.ordereddict import OrderedDict
+from weboob.tools.value import Value
from weboob.capabilities.job import ICapJob
+from .browser import LolixBrowser
__all__ = ['LolixBackend']
-class LolixBackend(BaseBackend, ICapJob):
+class LolixBackend(BaseBackend, BackendConfig, ICapJob):
NAME = 'lolix'
DESCRIPTION = u'Lolix est un centre de compétences spécialisé dans les technologies à base de Logiciel Libre.'
MAINTAINER = u'Bezleputh'
@@ -37,9 +36,108 @@ class LolixBackend(BaseBackend, ICapJob):
BROWSER = LolixBrowser
+ region_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
+ '0': u'-- Indifférent --',
+ '100000000': u'-- France entière',
+ '100100000': u'-- France métropolitaine',
+ '100100001': u'-- Alsace',
+ '100100002': u'-- Auvergne',
+ '100100003': u'-- Aquitaine',
+ '100100004': u'-- Bourgogne',
+ '100100005': u'-- Bretagne',
+ '100100025': u'-- Centre',
+ '100100027': u'-- Champagne-Ardenne',
+ '100100030': u'-- Corse',
+ '100100037': u'-- Franche-Comté',
+ '100100040': u'-- Ile de France',
+ '100100044': u'-- Languedoc-Roussillon',
+ '100100048': u'-- Limousin',
+ '100100051': u'-- Lorraine',
+ '100100055': u'-- Midi-Pyrénées',
+ '100100060': u'-- Nord-Pas-de-Calais',
+ '100100073': u'-- Normandie',
+ '100100076': u'-- Pays-de-Loire',
+ '100100079': u'-- Picardie',
+ '100100082': u'-- Poitou-Charentes',
+ '100100085': u'-- Provence Alpes Cote d\'azur',
+ '100100090': u'-- Rhône Alpes',
+ '100200000': u'-- DOM et TOM',
+ '100200001': u'-- Guadeloupe',
+ '100200002': u'-- Guyane',
+ '100200003': u'-- Martinique',
+ '100200004': u'-- Réunion',
+ '100200005': u'-- Saint-Pierre et Miquelon',
+ '200000000': u'-- Etranger',
+ }.iteritems())])
+
+ poste_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
+ '0': u'-- Indifférent',
+ '100000000': u'-- Service Technique',
+ '100005000': u'-- Administrateur base de données',
+ '100004000': u'-- Admin. Système/Réseaux',
+ '100004004': u'-- Administrateur système',
+ '100004002': u'-- Administrateur réseaux',
+ '100007000': u'-- Analyste',
+ '100002000': u'-- Chef de projet',
+ '100002001': u'-- Chef de projet junior',
+ '100002002': u'-- Chef de projet senior',
+ '100021000': u'-- Consultant',
+ '100003000': u'-- Développeur',
+ '100003001': u'-- Développeur junior',
+ '100003002': u'-- Développeur senior',
+ '100009000': u'-- Directeur technique',
+ '100006000': u'-- Ingénieur d\'étude',
+ '100011000': u'-- Ingénieur support',
+ '100012000': u'-- Responsable R & D',
+ '100010000': u'-- Technicien',
+ '100010002': u'-- Technicien hotline',
+ '100010003': u'-- Technicien maintenance',
+ '100020000': u'-- Webmaster',
+ '200000000': u'-- Service Commercial',
+ '200300000': u'-- Commercial',
+ '200200000': u'-- Directeur commercial',
+ '200100000': u'-- Technico commercial',
+ '400000000': u'-- Service Marketing',
+ '400100000': u'-- Responsable Marketing',
+ '300000000': u'-- Service qualité',
+ '300100000': u'-- Assistant qualité',
+ '300200000': u'-- Responsable qualité',
+ '2000000': u'-- Fondateur',
+ '7000000': u'-- Formateur',
+ '6000000': u'-- Journaliste',
+ '500100000': u'-- Assistant(e) de direction',
+ '4000000': u'-- Stagiaire',
+ '5000000': u'-- Traducteur',
+ }.iteritems())])
+
+ contrat_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
+ '0': u'-- Indifférent --',
+ '6': u'Alternance',
+ '5': u'Apprentissage',
+ '2': u'CDD',
+ '1': u'CDI',
+ '4': u'Freelance',
+ '3': u'Stage',
+ }.iteritems())])
+
+ limit_date_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
+ '2592000': u'30 jours',
+ '5184000': u'60 jours',
+ '7776000': u'90 jours',
+ '0': u'Illimitée',
+ }.iteritems())])
+
+ CONFIG = BackendConfig(Value('region', label=u'Région', choices=region_choices),
+ Value('poste', label=u'Poste', choices=poste_choices),
+ Value('contrat', label=u'Contrat', choices=contrat_choices),
+ Value('limit_date', label=u'Date limite', choices=limit_date_choices))
+
def search_job(self, pattern=None):
with self.browser:
- for advert in self.browser.search_job():
+ for advert in self.browser.search_job(region=self.config['region'].get(),
+ poste=self.config['poste'].get(),
+ contrat=self.config['contrat'].get(),
+ limit_date=self.config['limit_date'].get()):
yield advert
def get_job_advert(self, _id, advert):
diff --git a/modules/lolix/browser.py b/modules/lolix/browser.py
index c46893d9..10ad3b0d 100644
--- a/modules/lolix/browser.py
+++ b/modules/lolix/browser.py
@@ -21,6 +21,7 @@ from weboob.tools.browser.decorators import id2url
from weboob.tools.browser import BaseBrowser
from .job import LolixJobAdvert
from .pages import SearchPage, AdvertPage
+import urllib
__all__ = ['LolixBrowser']
@@ -31,12 +32,21 @@ class LolixBrowser(BaseBrowser):
ENCODING = 'iso-8859-1'
PAGES = {
- '%s://%s/date.php' % (PROTOCOL, DOMAIN): SearchPage,
+ '%s://%s/search.php' % (PROTOCOL, DOMAIN): SearchPage,
'%s://%s/offre.php\?id=(?P.+)' % (PROTOCOL, DOMAIN): AdvertPage,
}
- def search_job(self):
- self.location('%s://%s/date.php' % (self.PROTOCOL, self.DOMAIN))
+ def search_job(self, region=None, poste=None, contrat=None, limit_date=None):
+ data = {
+ 'mode': 'find',
+ 'page': '0',
+ 'posteid': poste,
+ 'contratid': contrat,
+ 'regionid': region,
+ 'limitjour': limit_date
+ }
+
+ self.location('%s://%s/search.php' % (self.PROTOCOL, self.DOMAIN), urllib.urlencode(data))
assert self.is_on_page(SearchPage)
return self.page.iter_job_adverts()
diff --git a/modules/lolix/pages.py b/modules/lolix/pages.py
index 96bcb41a..24ea0e62 100644
--- a/modules/lolix/pages.py
+++ b/modules/lolix/pages.py
@@ -80,15 +80,16 @@ class SearchPage(BasePage):
def is_row_advert(self, row):
cols = self.parser.select(row, 'td')
- d = dict(cols[1].attrib)
- if 'class' in d.keys():
- if 'ListeDark' == d['class'] or 'ListeLight' == d['class']:
- return cols
+ if len(cols) > 1:
+ d = dict(cols[1].attrib)
+ if 'class' in d.keys():
+ if 'ListeDark' == d['class'] or 'ListeLight' == d['class']:
+ return cols
def create_job_advert(self, cols):
- a = self.parser.select(cols[3], 'a')[0]
+ a = self.parser.select(cols[2], 'a')[0]
advert = LolixJobAdvert(re.match(r'offre.php\?id=(.*)', a.attrib['href']).group(1))
- advert.publication_date = dateutil.parser.parse(cols[1].text).date()
- advert.society_name = u'%s' % self.parser.select(cols[2], 'a')[0].text
+ advert.publication_date = dateutil.parser.parse(cols[0].text).date()
+ advert.society_name = u'%s' % self.parser.select(cols[1], 'a')[0].text
advert.title = u'%s' % a.text
return advert