improve deep search in popolemploi

This commit is contained in:
Bezleputh 2013-08-28 21:23:02 +02:00 committed by Florent
commit a63dcdfa8e
3 changed files with 361 additions and 148 deletions

View file

@ -39,143 +39,142 @@ class PopolemploiBackend(BaseBackend, ICapJob):
BROWSER = PopolemploiBrowser BROWSER = PopolemploiBrowser
places_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ places_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
'': u'Tout type de lieux', '100|FRANCE|FRANCE': u'France entière',
'FRANCE_01': u'France entière', '102|REGION|checkbox': u'Alsace',
'REGION_42': u'Alsace', '103|DEPARTEMENT|checkbox_66': u'-- Rhin (Bas) (67)',
'DEPARTEMENT_67': u'-- Rhin (Bas) (67)', '104|DEPARTEMENT|checkbox_67': u'-- Rhin (Haut) (68)',
'DEPARTEMENT_68': u'-- Rhin (Haut) (68)', '105|REGION|checkbox_0': u'Aquitaine',
'REGION_72': u'Aquitaine', '106|DEPARTEMENT|checkbox_21': u'-- Dordogne (24)',
'DEPARTEMENT_24': u'-- Dordogne (24)', '107|DEPARTEMENT|checkbox_32': u'-- Gironde (33)',
'DEPARTEMENT_33': u'-- Gironde (33)', '108|DEPARTEMENT|checkbox_39': u'-- Landes (40)',
'DEPARTEMENT_40': u'-- Landes (40)', '109|DEPARTEMENT|checkbox_46': u'-- Lot et Garonne (47)',
'DEPARTEMENT_47': u'-- Lot et Garonne (47)', '110|DEPARTEMENT|checkbox_63': u'-- Pyrénées Atlantiques (64)',
'DEPARTEMENT_64': u'-- Pyrénées Atlantiques (64)', '111|REGION|checkbox_1': u'Auvergne',
'REGION_83': u'Auvergne', '112|DEPARTEMENT|checkbox_1': u'-- Allier (03)',
'DEPARTEMENT_03': u'-- Allier (03)', '113|DEPARTEMENT|checkbox_13': u'-- Cantal (15)',
'DEPARTEMENT_15': u'-- Cantal (15)', '114|DEPARTEMENT|checkbox_42': u'-- Loire (Haute) (43)',
'DEPARTEMENT_43': u'-- Loire (Haute) (43)', '115|DEPARTEMENT|checkbox_62': u'-- Puy de Dôme (63)',
'DEPARTEMENT_63': u'-- Puy de Dôme (63)', '116|REGION|checkbox_2': u'Bourgogne',
'REGION_26': u'Bourgogne', '117|DEPARTEMENT|checkbox_18': u'-- Côte d\'Or (21)',
'DEPARTEMENT_21': u'-- Côte d\'Or (21)', '118|DEPARTEMENT|checkbox_57': u'-- Nièvre (58)',
'DEPARTEMENT_58': u'-- Nièvre (58)', '119|DEPARTEMENT|checkbox_70': u'-- Saône et Loire (71)',
'DEPARTEMENT_71': u'-- Saône et Loire (71)', '120|DEPARTEMENT|checkbox_88': u'-- Yonne (89)',
'DEPARTEMENT_89': u'-- Yonne (89)', '121|REGION|checkbox_3': u'Bretagne',
'REGION_53': u'Bretagne', '122|DEPARTEMENT|checkbox_19': u'-- Côtes d\'Armor (22)',
'DEPARTEMENT_22': u'-- Côtes d\'Armor (22)', '123|DEPARTEMENT|checkbox_26': u'-- Finistère (29)',
'DEPARTEMENT_29': u'-- Finistère (29)', '124|DEPARTEMENT|checkbox_34': u'-- Ille et Vilaine (35)',
'DEPARTEMENT_35': u'-- Ille et Vilaine (35)', '125|DEPARTEMENT|checkbox_54': u'-- Morbihan (56)',
'DEPARTEMENT_56': u'-- Morbihan (56)', '126|REGION|checkbox_4': u'Centre',
'REGION_24': u'Centre', '127|DEPARTEMENT|checkbox_16': u'-- Cher (18)',
'DEPARTEMENT_18': u'-- Cher (18)', '128|DEPARTEMENT|checkbox_25': u'-- Eure et Loir (28)',
'DEPARTEMENT_28': u'-- Eure etLoir (28)', '129|DEPARTEMENT|checkbox_35': u'-- Indre (36)',
'DEPARTEMENT_36': u'-- Indre (36)', '130|DEPARTEMENT|checkbox_36': u'-- Indre et Loire (37)',
'DEPARTEMENT_37': u'-- Indre et Loire (37)', '131|DEPARTEMENT|checkbox_40': u'-- Loir et Cher (41)',
'DEPARTEMENT_41': u'-- Loir et Cher (41)', '132|DEPARTEMENT|checkbox_44': u'-- Loiret (45)',
'DEPARTEMENT_45': u'-- Loiret (45)', '133|REGION|checkbox_5': u'Champagne Ardenne',
'REGION_21': u'Champagne Ardenne', '134|DEPARTEMENT|checkbox_6': u'-- Ardennes (08)',
'DEPARTEMENT_08': u'-- Ardennes (08)', '135|DEPARTEMENT|checkbox_8': u'-- Aube (10)',
'DEPARTEMENT_10': u'-- Aube (10)', '136|DEPARTEMENT|checkbox_50': u'-- Marne (51)',
'DEPARTEMENT_51': u'-- Marne (51)', '137|DEPARTEMENT|checkbox_51': u'-- Marne (Haute) (52)',
'DEPARTEMENT_52': u'-- Marne (Haute) (52)', '138|REGION|checkbox_6': u'Corse',
'REGION_94': u'Corse', '139|DEPARTEMENT|checkbox_26': u'-- Corse du Sud (2A)',
'DEPARTEMENT_2A': u'-- Corse du Sud (2A)', '140|DEPARTEMENT|checkbox_27': u'-- Haute Corse (2B)',
'DEPARTEMENT_2B': u'-- Haute Corse (2B)', '141|REGION|checkbox_7': u'Franche Comté',
'REGION_43': u'Franche Comté', '142|DEPARTEMENT|checkbox_89': u'-- Belfort (Territoire de) (90)',
'DEPARTEMENT_90': u'-- Belfort (Territoire de) (90)', '143|DEPARTEMENT|checkbox_22': u'-- Doubs (25)',
'DEPARTEMENT_25': u'-- Doubs (25)', '144|DEPARTEMENT|checkbox_38': u'-- Jura (39)',
'DEPARTEMENT_39': u'-- Jura (39)', '145|DEPARTEMENT|checkbox_69': u'-- Saône (Haute) (70)',
'DEPARTEMENT_70': u'-- Saône (Haute) (70)', '146|REGION|checkbox_8': u'Ile de France',
'REGION_11': u'Ile de France', '147|DEPARTEMENT|checkbox_90': u'-- Essonne (91)',
'DEPARTEMENT_91': u'-- Essonne (91)', '148|DEPARTEMENT|checkbox_91': u'-- Hauts de Seine (92)',
'DEPARTEMENT_92': u'-- Hauts de Seine (92)', '149|DEPARTEMENT|checkbox_74': u'-- Paris (Dept.) (75)',
'DEPARTEMENT_75': u'-- Paris (Dept.) (75)', '150|DEPARTEMENT|checkbox_92': u'-- Seine Saint Denis (93)',
'DEPARTEMENT_93': u'-- Seine Saint Denis (93)', '151|DEPARTEMENT|checkbox_76': u'-- Seine et Marne (77)',
'DEPARTEMENT_77': u'-- Seine et Marne (77)', '152|DEPARTEMENT|checkbox_94': u'-- Val d\'Oise (95)',
'DEPARTEMENT_95': u'-- Val d\'Oise (95)', '153|DEPARTEMENT|checkbox_93': u'-- Val de Marne (94)',
'DEPARTEMENT_94': u'-- Val de Marne (94)', '154|DEPARTEMENT|checkbox_77': u'-- Yvelines (78)',
'DEPARTEMENT_78': u'-- Yvelines (78)', '155|REGION|checkbox_9': u'Languedoc Roussillon',
'REGION_91': u'Languedoc Roussillon', '156|DEPARTEMENT|checkbox_9': u'-- Aude (11)',
'DEPARTEMENT_11': u'-- Aude (11)', '157|DEPARTEMENT|checkbox_39': u'-- Gard (30)',
'DEPARTEMENT_30': u'-- Gard (30)', '158|DEPARTEMENT|checkbox_33': u'-- Hérault (34)',
'DEPARTEMENT_34': u'-- Hérault (34)', '159|DEPARTEMENT|checkbox_47': u'-- Lozère (48)',
'DEPARTEMENT_48': u'-- Lozère (48)', '161|DEPARTEMENT|checkbox_65': u'-- Pyrénées Orientales (66)',
'DEPARTEMENT_66': u'-- Pyrénées Orientales (66)', '162|REGION|checkbox_10': u'Limousin',
'REGION_74': u'Limousin', '163|DEPARTEMENT|checkbox_17': u'-- Corrèze (19)',
'DEPARTEMENT_19': u'-- Corrèze (19)', '164|DEPARTEMENT|checkbox_20': u'-- Creuse (23)',
'DEPARTEMENT_23': u'-- Creuse (23)', '165|DEPARTEMENT|checkbox_86': u'-- Vienne (Haute) (87)',
'DEPARTEMENT_87': u'-- Vienne (Haute) (87)', '166|REGION|checkbox_11': u'Lorraine',
'REGION_41': u'Lorraine', '167|DEPARTEMENT|checkbox_53': u'-- Meurthe et Moselle (54)',
'DEPARTEMENT_54': u'-- Meurthe et Moselle (54)', '168|DEPARTEMENT|checkbox_54': u'-- Meuse (55)',
'DEPARTEMENT_55': u'-- Meuse (55)', '169|DEPARTEMENT|checkbox_56': u'-- Moselle (57)',
'DEPARTEMENT_57': u'-- Moselle (57)', '170|DEPARTEMENT|checkbox_87': u'-- Vosges (88)',
'DEPARTEMENT_88': u'-- Vosges (88)', '171|REGION|checkbox_12': u'Midi Pyrénées',
'REGION_73': u'Midi Pyrénées', '172|DEPARTEMENT|checkbox_7': u'-- Ariège (09)',
'DEPARTEMENT_09': u'-- Ariège (09)', '173|DEPARTEMENT|checkbox_10': u'-- Aveyron (12)',
'DEPARTEMENT_12': u'-- Aveyron (12)', '174|DEPARTEMENT|checkbox_30': u'-- Garonne (Haute) (31)',
'DEPARTEMENT_31': u'-- Garonne (Haute) (31)', '175|DEPARTEMENT|checkbox_31': u'-- Gers (32)',
'DEPARTEMENT_32': u'-- Gers (32)', '176|DEPARTEMENT|checkbox_45': u'-- Lot (46)',
'DEPARTEMENT_46': u'-- Lot (46)', '177|DEPARTEMENT|checkbox_64': u'-- Pyrénées (Hautes) (65)',
'DEPARTEMENT_65': u'-- Pyrénées (Hautes) (65)', '178|DEPARTEMENT|checkbox_80': u'-- Tarn (81)',
'DEPARTEMENT_81': u'-- Tarn (81)', '179|DEPARTEMENT|checkbox_81': u'-- Tarn et Garonne (82)',
'DEPARTEMENT_82': u'-- Tarn et Garonne (82)', '180|REGION|checkbox_13': u'Nord Pas de Calais',
'REGION_31': u'Nord Pas de Calais', '181|DEPARTEMENT|checkbox_58': u'-- Nord (59)',
'DEPARTEMENT_59': u'-- Nord (59)', '182|DEPARTEMENT|checkbox_61': u'-- Pas de Calais (62)',
'DEPARTEMENT_62': u'-- Pas de Calais (62)', '183|REGION|checkbox_14': u'Normandie (Basse)',
'REGION_25': u'Normandie (Basse)', '184|DEPARTEMENT|checkbox_12': u'-- Calvados (14)',
'DEPARTEMENT_14': u'-- Calvados (14)', '185|DEPARTEMENT|checkbox_49': u'-- Manche (50)',
'DEPARTEMENT_50': u'-- Manche (50)', '186|DEPARTEMENT|checkbox_60': u'-- Orne (61)',
'DEPARTEMENT_61': u'-- Orne (61)', '187|REGION|checkbox_15': u'Normandie (Haute)',
'REGION_23': u'Normandie (Haute)', '188|DEPARTEMENT|checkbox_24': u'-- Eure (27)',
'DEPARTEMENT_27': u'-- Eure (27)', '189|DEPARTEMENT|checkbox_75': u'-- Seine Maritime (76)',
'DEPARTEMENT_76': u'-- Seine Maritime (76)', '190|REGION|checkbox_16': u'Pays de la Loire',
'REGION_52': u'Pays de la Loire', '191|DEPARTEMENT|checkbox_43': u'-- Loire Atlantique (44)',
'DEPARTEMENT_44': u'-- Loire Atlantique (44)', '192|DEPARTEMENT|checkbox_48': u'-- Maine et Loire (49)',
'DEPARTEMENT_49': u'-- Maine et Loire (49)', '193|DEPARTEMENT|checkbox_52': u'-- Mayenne (53)',
'DEPARTEMENT_53': u'-- Mayenne (53)', '194|DEPARTEMENT|checkbox_71': u'-- Sarthe (72)',
'DEPARTEMENT_72': u'-- Sarthe (72)', '195|DEPARTEMENT|checkbox_84': u'-- Vendée (85)',
'DEPARTEMENT_85': u'-- Vendée (85)', '196|REGION|checkbox_17': u'Picardie',
'REGION_22': u'Picardie', '197|DEPARTEMENT|checkbox_0': u'-- Aisne (02)',
'DEPARTEMENT_02': u'-- Aisne (02)', '198|DEPARTEMENT|checkbox_59': u'-- Oise (60)',
'DEPARTEMENT_60': u'-- Oise (60)', '199|DEPARTEMENT|checkbox_79': u'-- Somme (80)',
'DEPARTEMENT_80': u'-- Somme (80)', '200|REGION|checkbox_18': u'Poitou Charentes',
'REGION_54': u'Poitou Charentes', '201|DEPARTEMENT|checkbox_14': u'-- Charente (16)',
'DEPARTEMENT_16': u'-- Charente (16)', '202|DEPARTEMENT|checkbox_15': u'-- Charente Maritime (17)',
'DEPARTEMENT_17': u'-- Charente Maritime (17)', '203|DEPARTEMENT|checkbox_78': u'-- Sèvres (Deux) (79)',
'DEPARTEMENT_79': u'-- Sèvres (Deux) (79)', '204|DEPARTEMENT|checkbox_85': u'-- Vienne (86)',
'DEPARTEMENT_86': u'-- Vienne (86)', '205|REGION|checkbox_19': u'Provence Alpes Côte d\'Azur',
'REGION_93': u'Provence Alpes Côte d\'Azur', '206|DEPARTEMENT|checkbox_3': u'-- Alpes (Hautes) (05)',
'DEPARTEMENT_05': u'-- Alpes (Hautes) (05)', '207|DEPARTEMENT|checkbox_4': u'-- Alpes Maritimes (06)',
'DEPARTEMENT_06': u'-- Alpes Maritimes (06)', '208|DEPARTEMENT|checkbox_2': u'-- Alpes de Haute Provence (04)',
'DEPARTEMENT_04': u'-- Alpes de Haute Provence (04)', '209|DEPARTEMENT|checkbox_13': u'-- Bouches du Rhône (13)',
'DEPARTEMENT_13': u'-- Bouches du Rhône (13)', '210|DEPARTEMENT|checkbox_82': u'-- Var (83)',
'DEPARTEMENT_83': u'-- Var (83)', '211|DEPARTEMENT|checkbox_83': u'-- Vaucluse (84)',
'DEPARTEMENT_84': u'-- Vaucluse (84)', '212|REGION|checkbox_20': u'Rhône Alpes',
'REGION_82': u'Rhône Alpes', '213|DEPARTEMENT|checkbox': u'-- Ain (01)',
'DEPARTEMENT_01': u'-- Ain (01)', '214|DEPARTEMENT|checkbox_5': u'-- Ardèche (07)',
'DEPARTEMENT_07': u'-- Ardèche (07)', '215|DEPARTEMENT|checkbox_23': u'-- Drôme (26)',
'DEPARTEMENT_26': u'-- Drôme (26)', '216|DEPARTEMENT|checkbox_37': u'-- Isère (38)',
'DEPARTEMENT_38': u'-- Isère (38)', '217|DEPARTEMENT|checkbox_41': u'-- Loire (42)',
'DEPARTEMENT_42': u'-- Loire (42)', '218|DEPARTEMENT|checkbox_68': u'-- Rhône (69)',
'DEPARTEMENT_69': u'-- Rhône (69)', '219|DEPARTEMENT|checkbox_72': u'-- Savoie (73)',
'DEPARTEMENT_73': u'-- Savoie (73)', '220|DEPARTEMENT|checkbox_73': u'-- Savoie (Haute) (74)',
'DEPARTEMENT_74': u'-- Savoie (Haute) (74)', '221|REGION|checkbox_21': u'Région Antilles / Guyane',
'REGION_96': u'Région Antilles / Guyane', '222|DEPARTEMENT|checkbox_95': u'-- Guadeloupe (971)',
'DEPARTEMENT_971': u'-- Guadeloupe (971)', '223|DEPARTEMENT|checkbox_97': u'-- Guyane (973)',
'DEPARTEMENT_973': u'-- Guyane (973)', '224|DEPARTEMENT|checkbox_96': u'-- Martinique (972)',
'DEPARTEMENT_972': u'-- Martinique (972)', '225|DEPARTEMENT|checkbox_101': u'-- Saint Barthélémy (977)',
'DEPARTEMENT_977': u'-- Saint Barthélémy (977)', '226|DEPARTEMENT|checkbox_102': u'-- Saint Martin (978)',
'DEPARTEMENT_978': u'-- Saint Martin (978)', '227|REGION|checkbox_22': u'Région Atlantique Nord',
'REGION_98': u'Région Atlantique Nord', '228|DEPARTEMENT|checkbox_99': u'-- Saint Pierre et Miquelon (975)',
'DEPARTEMENT_975': u'-- Saint Pierre et Miquelon (975)', '229|REGION|checkbox_23': u'Région Pacifique',
'REGION_95': u'Région Pacifique', '230|DEPARTEMENT|checkbox_107': u'-- Ile de Clipperton (989)',
'DEPARTEMENT_989': u'-- Ile de Clipperton (989)', '231|DEPARTEMENT|checkbox_106': u'-- Nouvelle Calédonie (988)',
'DEPARTEMENT_988': u'-- Nouvelle Calédonie (988)', '232|DEPARTEMENT|checkbox_105': u'-- Polynésie française (987)',
'DEPARTEMENT_987': u'-- Polynésie française (987)', '233|DEPARTEMENT|checkbox_103': u'-- Terres australes/antarctiques (984)',
'DEPARTEMENT_984': u'-- Terres australes/antarctiques (984)', '234|DEPARTEMENT|checkbox_104': u'-- Wallis et Futuna (986)',
'DEPARTEMENT_986': u'-- Wallis et Futuna (986)', '235|REGION|checkbox_24': u'Région Réunion / Mayotte',
'REGION_97': u'Région Réunion / Mayotte', '236|DEPARTEMENT|checkbox_100': u'-- Mayotte (976)',
'DEPARTEMENT_976': u'-- Mayotte (976)', '237|DEPARTEMENT|checkbox_98': u'-- Réunion (974)',
'DEPARTEMENT_974': u'-- Réunion (974)',
}.iteritems())]) }.iteritems())])
type_contrat_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ type_contrat_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
@ -196,9 +195,140 @@ class PopolemploiBackend(BaseBackend, ICapJob):
'6': u'Profession commerciale', '6': u'Profession commerciale',
}.iteritems())]) }.iteritems())])
salary_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
' ': u'Tout salaire annuel',
'FOURCHETTE1': u'Moins de 15000',
'FOURCHETTE2': u'Compris entre 15000 et 18000',
'FOURCHETTE3': u'Compris entre 18000 et 21000',
'FOURCHETTE4': u'Compris entre 21000 et 24000',
'FOURCHETTE5': u'Compris entre 24000 et 36000',
'FOURCHETTE6': u'Compris entre 36000 et 60000',
'FOURCHETTE7': u'Supérieur à 60000',
}.iteritems())])
qualification_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
' ': u'Toute Qualification',
'1': u'Manoeuvre',
'2': u'Ouvrier spécialisé',
'3': u'Ouvrier qualifié (P1,P2)',
'4': u'Ouvrier qualifié (P3,P4,OHQ)',
'5': u'Employé non qualifié',
'6': u'Employé qualifié',
'7': u'Technicien',
'8': u'Agent de maîtrise',
'9': u'Cadre',
}.iteritems())])
limit_date_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
'': u'Aucune limite',
'UN_JOUR': u'Hier',
'TROIS_JOUR': u'3 jours',
'UNE_SEMAINE': u'1 semaine',
'DEUX_SEMAINES': u'2 semaines',
'UN_MOIS': u'1 mois',
'TROIS_MOIS': u'3 mois',
}.iteritems())])
domain_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({
' ': u'Tout secteur d\'activité',
'88': u'Action sociale sans hebergt',
'82': u'Activ.admin/soutien entreprise',
'66': u'Activ. auxiliaire finance/assu',
'90': u'Activ. crea/artistiq/spectacle',
'77': u'Activ. de loc. et loc.-bail',
'70': u'Activ. siege soc/conseil gest.',
'93': u'Activ. sportive/recreat/loisir',
'69': u'Activite juridique/comptable',
'94': u'Activite organisations assoc.',
'86': u'Activite pr la sante humaine',
'53': u'Activites de poste/courrier',
'64': u'Activite services financiers',
'68': u'Activites immobilieres',
'62': u'Activites informatiques',
'78': u'Activites liees a l\'emploi',
'75': u'Activites veterinaires',
'84': u'Administration publiq/defense',
'79': u'Agences voyage/activ. liees',
'71': u'Archi/ing/control/analyse tech',
'65': u'Assurance',
'32': u'Autre industrie manufacturiere',
'74': u'Autres activ.spe scientif/tech',
'08': u'Autres industries extractives',
'91': u'Biblio/ musée/ activ. culturel',
'36': u'Captage/traitement/distrib.eau',
'19': u'Cokefaction et raffinage',
'37': u'Collecte/traitement eaux usees',
'38': u'Collecte/traitnt/elimin dechet',
'45': u'Commerce/reparation auto/moto',
'47': u'Commerce detail sauf auto/moto',
'46': u'Commerce gros sauf auto/moto',
'41': u'Construction de batiments',
'01': u'Cult./prod. animale, chasse',
'39': u'Depollution/autre gest. dechet',
'58': u'Edition',
'80': u'Enquetes et securite',
'85': u'Enseignement',
'52': u'Entreposage/sce auxil. transp',
'06': u'Extraction d\'hydrocarbures',
'05': u'Extraction houille/ lignite',
'07': u'Extraction minerais metalliq.',
'26': u'Fab. prod. info/electro/optiq',
'22': u'Fabr. prod. caoutchouc/plastiq',
'30': u'Fabric. autre materiel transp.',
'23': u'Fabric.autre produit non metal',
'28': u'Fabric. autres machines/equip.',
'27': u'Fabric. d\'equip. electriques',
'31': u'Fabrication de meubles',
'12': u'Fabrication produit base tabac',
'25': u'Fabrication produits metalliq',
'42': u'Genie civil',
'55': u'Hebergement',
'87': u'Hebergt médico-social/ social',
'18': u'Imprimerie/reprod. enregistre.',
'00': u'Indetermine',
'29': u'Industrie automobile',
'20': u'Industrie chimique',
'14': u'Industrie de l\'habillement',
'11': u'Industrie des boissons',
'15': u'Industrie du cuir/la chaussure',
'17': u'Industrie du papier/du carton',
'21': u'Industrie pharmaceutique',
'10': u'Industries alimentaires',
'13': u'Industrie textile',
'24': u'Metallurgie',
'92': u'Orga. jeux hasard/argent',
'99': u'Organisations et organismes',
'03': u'Peche et aquaculture',
'35': u'Prod./distrib.elec/gaz/vap/air',
'59': u'Prod film cine/video/tv/musiq',
'98': u'Production menage bien propre',
'60': u'Programmation et diffusion',
'73': u'Publicite et etudes de marche',
'72': u'Rech.-dev. scientifique',
'33': u'Repar./instal. machines/equip.',
'95': u'Repar.pc/biens perso/domestiq',
'56': u'Restauration',
'97': u'Sce domestique pr particuliers',
'81': u'Services bat/amenagnt paysager',
'63': u'Services d\'information',
'96': u'Services personnels',
'09': u'Soutien industries extractives',
'02': u'Sylvicult./exploit. forestiere',
'61': u'Telecommunications',
'51': u'Transports aeriens',
'50': u'Transports par eau',
'49': u'Transports terrestres',
'16': u'Travail bois/fab. article bois',
'43': u'Travaux constr.specialises',
}.iteritems())])
CONFIG = BackendConfig(Value('metier', label='Job name', masked=False, default=''), CONFIG = BackendConfig(Value('metier', label='Job name', masked=False, default=''),
Value('place', label=u'Place', choices=places_choices, default='FRANCE_01'), Value('place', label=u'Place', choices=places_choices, default='100|FRANCE|FRANCE'),
Value('contrat', label=u'Contract', choices=type_contrat_choices, default='')) Value('contrat', label=u'Contract', choices=type_contrat_choices, default=''),
Value('salary', label=u'Salary', choices=salary_choices, default=''),
Value('qualification', label=u'Qualification', choices=qualification_choices, default=''),
Value('limit_date', label=u'Date limite', choices=limit_date_choices, default=''),
Value('domain', label=u'Domain', choices=domain_choices, default=''))
def search_job(self, pattern=None): def search_job(self, pattern=None):
with self.browser: with self.browser:
@ -207,7 +337,11 @@ class PopolemploiBackend(BaseBackend, ICapJob):
def advanced_search_job(self): def advanced_search_job(self):
return self.browser.advanced_search_job(metier=self.config['metier'].get(), return self.browser.advanced_search_job(metier=self.config['metier'].get(),
place=self.config['place'].get(), place=self.config['place'].get(),
contrat=self.config['contrat'].get()) contrat=self.config['contrat'].get(),
salary=self.config['salary'].get(),
qualification=self.config['qualification'].get(),
limit_date=self.config['limit_date'].get(),
domain=self.config['domain'].get())
def get_job_advert(self, _id, advert=None): def get_job_advert(self, _id, advert=None):
with self.browser: with self.browser:

View file

@ -20,6 +20,7 @@
from weboob.tools.browser.decorators import id2url from weboob.tools.browser.decorators import id2url
from weboob.tools.browser import BaseBrowser from weboob.tools.browser import BaseBrowser
import urllib import urllib
import copy
from .pages import SearchPage, AdvertPage from .pages import SearchPage, AdvertPage
from .job import PopolemploiJobAdvert from .job import PopolemploiJobAdvert
@ -44,19 +45,98 @@ class PopolemploiBrowser(BaseBrowser):
assert self.is_on_page(SearchPage) assert self.is_on_page(SearchPage)
return self.page.iter_job_adverts() return self.page.iter_job_adverts()
def advanced_search_job(self, metier=None, place=None, contrat=None): def advanced_search_job(self, metier=None, place=None, contrat=None, salary=None,
qualification=None, limit_date=None, domain=None):
self.location('http://candidat.pole-emploi.fr/candidat/rechercheoffres/rechercheavanceeparparametres')
data = { data = {
't:formdata': 'H4sIAAAAAAAAAJVSwUocQRAtJ1HBPSQonoLIEo1BpPeiErJ42AQ8LYlkMRdPPW3N2trT3emu2Vkv3vIb+YIg5Bs85JZ/yAfkmlMO6d5hR0UY1oEZpqtfVb33qr7/gfnyDew7FGfowmuyzKHvDGRulcwk4luuFLoROq94jeIjrgWid3CUOWaR5YIJk+eFZsQtenKXTJ7lMWaNRk2e9aW+GBRpLqk3QvHeaMIx4caRMwK9n9x4L40+/vrj+qDVXksgOYFFUeEIVk7656FrR3E97HxMz1FQtw8tVJiH8h94jgTLdyADclIPu2MHz2OQxSCr8uD2GVtL8GKi8HNQ2Oefpgp7lcJyB7YbvMHwZ2QNCH7sGTdk3PJwqq3YCz44VDJlKffIemkIckGHEtXpxgCpsJvHN63fqz//JTAXREXRzqgo6gtcQTKO3ycEz6p2NcdHk+s9ltyD6dxcn+5mf7/9SoJ3E1ZlG9YbOCiJhY/ABYKn8TADPsKXypfQbsD5MHhB08oL1XGmnKr6Fmw2IOsrF0w7nHXD35mCjK52vGmv5+7v7b0RL922Ll/DqwaOljtCzcN8/dSG1p3Y7NkTQ/4DH0zoXggEAAA=', 't:formdata': 'H4sIAAAAAAAAALVYz2/cRBj9sqilZFtafkkICSQgvSEn67YQkqZlu9lWgNNEXcolBzTr/XYzxfaYmfGue4ETR5A4I3HiiCoB9x7oASkHDvwH/AGckDiBxIxnbSfbJu16TKREyvM3b957M54Zzw9/wonJKrzN0d9Drn7ZcMhRLLfHJPIR10gQIB8jFwEpSgQN44AOKaLgsDPkToxO6Ds+C8MkciSJUUh+16F7ocZiFmEkhePR6NNe0g+pbI/R77BIYipxaYczH4XInghBWXT7yx/vbTRff7UBjV142jd1El7Y9e6QMVkOSDRa3u7fQV+ue9DEAENFf5OEKOH5AyU9yWk0Wk85nNOgo0HHtIPyJ41jCa9lJj9WJj1yKzfZK0xOrsDlo+IpcGKAzK8gkXQ4GVA24iyJVUirjI8cEhNVWORzSYXDMaD9gyHd0q1u6FZLPZRJ/M3K/bd+fvavXxqwoMzqMDgLtNnP4HNopPrvUxIWy85qEHuxgtjWfrq//1Pv3/sNlWmmarIGq/MLEShbKy0l4tKxIvpEoNPuK5D48jrFYGDiOn/7QfOPl3795/i4TppeLBW251X40Ex/cG9wcfj3d7/ZZ+YqRZqhacy5FuZUW810dvIeXJmfYMRJNBiwkNAIc0WnM3DTgPa0Rt1N8OxolqYrh8iWJDWenWMXspCmNBJO1zQy69jDI/rtF199/f327u9q7fLglB9QVfv+IJt85Vqm/13I5+KhcOLJVdioMGosETOZNzWWR25LahJ/F96Zn0XuqbxyUSey/yyIjJAb0K3YfmbMNd2Luax40oH2/LzTiGLCD1k9O8V3CP8oM10HubFfaTSjJETOTHk+RQy2rTFrUoslI2QDvc1y9bIkmTZQW/LpHPUUWk2dvBtjtgMQWVjWWMdg1qTG8hZ8aMXy6Cl5UGg8uQxrFd5fRezLT1Zy76dywI7OuO5CZ36KIUs0LiUKEhBazsTnyic986SmDoxYG7+t2fhadnQWivYw4RiStFCUAVsktaMziiqdGjGNkastzjcjeVIdREvIllIzLk424dr8JGMSaHOH1anEzpkH3VJjLfQWCSYRlThQZIXGxQza1JAtpdHVhqsVNh7dHqeHmlzamQztTtEaiC1OckK9TWoQ1NmajpVftYByjDkVWLywr0xL2tOSbllSd5f/hw/38T7curu0Xy7d2eXStaOzV3RhVtEFOzoLRfoGIkFRbik5YEdn8ZpHdIwkMUSFrDMG9QxaA7F9ZO5sZBWnVd66psjcR0bm1kBsBG7AeoWzpfrCHOr7hlzcMwViSWhEefBBhful4upQcqqWn5BJ4Qfq03mq8eWioGcKtlRBRxXU251xcB7ePIpSf2lhlJ1Ni2+GA9gTNjXdLMEbj1XOBYfrT3qBeo0lkkVHXT2U16YLh69FZ24Ki67/A14oWbX6FQAA',
'emploiRecherche': metier, 'radiogroup': u'MOTS_CLES',
'lieu': place, 'set101': metier,
'select': contrat, 'set201': u'',
'partenaires': 'on', 'grandDomaine': u'',
'sousDomaine': u'',
'theme': u'',
'domaineParTheme': u'',
'numeroOffre': u'',
'lieu': u'',
'lieuCode': u'',
'lieuCodePostal': u'',
'lieuType': u'',
'typeContrat': contrat,
'fourchetteSalaire': salary,
'select_1': qualification,
'heureMax': u'',
'experience': u'INDIFFERENT',
'dureeEmission': limit_date,
'secteurActiviteEntreprise1': domain,
'secteurActiviteEntreprise2': u'',
'select_2': u'',
'select_3': u'',
'langues1': u'',
'langues2': u'',
'textfield': u'',
} }
self.location('http://candidat.pole-emploi.fr/candidat/rechercheoffres/simplifiee.recherche',
if place.split('|')[1] == 'DEPARTEMENT':
self.choose_departement(place.split('|')[2], copy.deepcopy(data))
elif place.split('|')[1] == 'REGION':
self.choose_region(place.split('|')[2], copy.deepcopy(data))
else:
data['select'] = u'10'
data['radiogroup_0'] = 'FRANCE'
data['rechercher'] = u''
data['partenaires'] = u'on'
data['rechercher:hiddenelementSubmit'] = u'rechercher:hiddenelementSubmit'
self.location('http://candidat.pole-emploi.fr/candidat/rechercheoffres/avancee.recherche',
urllib.urlencode(data)) urllib.urlencode(data))
assert self.is_on_page(SearchPage) assert self.is_on_page(SearchPage)
return self.page.iter_job_adverts() return self.page.iter_job_adverts()
def choose_region(self, place, data):
data['select'] = u'10'
data['radiogroup_0'] = u'REGION'
data['choixRegion:hiddenelementSubmit'] = u'choixRegion:hiddenelementSubmit'
self.location('http://candidat.pole-emploi.fr/candidat/rechercheoffres/avancee.recherche',
urllib.urlencode(data))
data2 = {
't:formdata': 'H4sIAAAAAAAAAOWZwWoUQRCGK8GIZD2IoHjxEIigl944u6vRIJIYoodBxSVn6emt2e040z129ybjxZO+hi+gBnwDIQdvvoMP4EXEkwe7XTfbIEgc0BxqYBjo6ar6v545/PC/+QwLeyvADIoRGn/rPDdo23yXK4HYvjPS0kqTon2EQ6mVvVloXVkDTJsh4xX3JczxCq0zz3pMaIOFzPyzrLRC5SxL/f7l5EuVX7l7/vXteYDawJkd358VXA3Zg2wHhYPZVVf/QU/n/eUX9zpf30LQ8xSew9xeF5KjD/V7xJNM135w74+DM26RrWd+kQu3JbEYLPfRjatL2wetT+c+fJ+HuRRaQitndHGfl+jgbBpOpx1Op913Rqrh2kSig1PTuY3Vrv+t2odGC7S2P85Kaa1vd7A/6ObfXn2cndy//1zd+PdpODSUnWh4bqF2wcHidOHxSrNGoc9iM+mnj5n4KjnihBxxhxxxlxxxjxzxNXLE18kRr5IjvkGEuDVzIFRMV4RMxXVFyFRsV4RMxXdFyFSMV4RMxXlFyFSsV4RMxXtFyFTMV4RMz30l9NxXQs99JfTcV0LPfSXH4b42YePoZbu8kAM0hS/Qsh6gNZMX1sBWbliFrBQhJSjH6jA+YHJUxsnBhh47rX4GF+73GGP75bv9W62li5MABgssfVEIYILak9PA5cIvISkGjfXmocIfuzXN7zgbAAA=',
place: 'on',
'validerLeChoixDesRegions': u'',
'validerLeChoixDesRegions:hiddenelementSubmit': 'validerLeChoixDesRegions:hiddenelementSubmit',
}
self.location('http://candidat.pole-emploi.fr/candidat/rechercheoffres/avancee/choisirlesregions.choisirdeslieux',
urllib.urlencode(data2))
def choose_departement(self, place, data):
data['select'] = u'10'
data['radiogroup_0'] = u'DEPARTEMENT'
data['choixDepartement:hiddenelementSubmit'] = u'choixDepartement:hiddenelementSubmit'
self.location('http://candidat.pole-emploi.fr/candidat/rechercheoffres/avancee.recherche',
urllib.urlencode(data))
data2 = {
't:formdata': 'H4sIAAAAAAAAAO3dT2sTQRzG8alYkaYHEfTWg1BBL5u2afpHEamW6iFUofQsm82k3bq7s85M2njxpG/DN6AWfAdCD958D74ALyKePDjz1LYjglACVZinEArJ7swvn/bwpQ3M2y9ifK8tWlpm21K7h+r3tTTNdDetMimb97dVbnLdkWZV1qm2spSVNbcKpWqjRaL0VpLWqbsvsWktjdXP20mmtCzyrvte1qry1ycdd/303Ne6f/PB1Td3zwkx1OLSjtskKdJqK3nU3ZGZFSdfw/qshmp9uPHyYevbO+GHeiZeiLG9ZbF4yp3dhdnTrhq63dt/3b2bGpmsdN2TaWbXcln0pjekHdTXNw8an698/HFOjHVEI1OV1apYT0tpxeWOd2p6p+aG1Xm1dftwTisuHu072sgrpx35sVaZNGZj0C1zY3JVHez35vvfX386MTyjn958+Cs1ys7+3vOjMPoFxq2YOHriycwIq/nFJkZ4J5P/jcIsFZzCHBWcQosKTmGeCk6hTQWnsEAFp7BIBaewRAWnsByxQuOkmmKOx4Ah5noMGGLOx4Ah5n4MGGIOyIAh5oIMGGJOyIAh5oYMGGKOyICBFYm/OrEiwcCKBAMrEgysSDCwIsHAigQDKxIMrEgwsCLBwIrEf+1YkWBgRYKBFQkGViQYWJFgYEWCgRUJBlYkGFiRYGBF4lNPrEgwsCLBwIoEAysSDKxIMLAiwcCKBAMrEgysSDCwIj1DmxUJBlYkGFiRYGBFgoEVCQZWJBhYkWBgRYKBFQkGVqRnWGBFgoEVCQZWJBhYkWBgRYKBFQkGViQYWJFgYEWCgRXpGRZZkWBgRYKBFQkGViQYWJFgYEWCgRUJBlYkGFiRYGBFeoYlViQYWJFgYEWCgRUJBlYkGFiRYGBFgoEVCQZWJBhYkZ5hmRUJBlYkGFiRYGBFgoEVCQZWJBhYkWBgRYKBFQmGmCty8phhdibmjAwdYu7I0CHmkAwdYi7J0CHmlAwdYm7J0CHmmAwd/m1NrovOKe/dTYu8J3Xh7lL5sCdNL3jVaLHW10ktkzLzB+6Vg+r4JL4k3y7DQ/juqYFVFQ4CtH8eC7j56v3+nca1qcNTDWWB9f2phn7uC0enGE79mqYj/bTD1d9n/QkhTJ63oXIAAA==',
place: 'on',
'validerLeChoixDesDepartements': u'',
'validerLeChoixDesDepartements:hiddenelementSubmit': 'validerLeChoixDesDepartements:hiddenelementSubmit',
}
self.location('http://candidat.pole-emploi.fr/candidat/rechercheoffres/avancee/choisirlesdepartements.choisirdeslieux',
urllib.urlencode(data2))
@id2url(PopolemploiJobAdvert.id2url) @id2url(PopolemploiJobAdvert.id2url)
def get_job_advert(self, url, advert): def get_job_advert(self, url, advert):
self.location(url) self.location(url)

View file

@ -58,7 +58,6 @@ class AdvertPage(BasePage):
_id = self.parser.select(content, 'ul/li/ul/li/div[@class="value"]/span', 1, method='xpath').text _id = self.parser.select(content, 'ul/li/ul/li/div[@class="value"]/span', 1, method='xpath').text
advert = PopolemploiJobAdvert(_id) advert = PopolemploiJobAdvert(_id)
print url
advert.title = u'%s' % self.parser.select(content, 'h4', 1, method='xpath').text.strip() advert.title = u'%s' % self.parser.select(content, 'h4', 1, method='xpath').text.strip()
advert.job_name = u'%s' % self.parser.select(content, 'h4', 1, method='xpath').text.strip() advert.job_name = u'%s' % self.parser.select(content, 'h4', 1, method='xpath').text.strip()
advert.description = u'%s' % self.parser.select(content, 'p[@itemprop="description"]', 1, method='xpath').text advert.description = u'%s' % self.parser.select(content, 'p[@itemprop="description"]', 1, method='xpath').text