diff --git a/modules/adecco/backend.py b/modules/adecco/backend.py index 2da6363d..4e1b3cc5 100644 --- a/modules/adecco/backend.py +++ b/modules/adecco/backend.py @@ -18,7 +18,9 @@ # along with weboob. If not, see . -from weboob.tools.backend import BaseBackend +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 AdeccoBrowser from .job import AdeccoJobAdvert @@ -35,9 +37,256 @@ class AdeccoBackend(BaseBackend, ICapJob): BROWSER = AdeccoBrowser + publicationDate_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ + '000000': u'-- Indifférent --', + '1': u'Moins de 48 heures', + '2': u'Moins de 1 semaine', + '4': u'Moins de 2 semaines', + '3': u'Moins de 5 semaines', + }.iteritems())]) + + searchCounty_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ + '000000' : u'Tous les départements', + '95' : u'Ain (01)', + '81' : u'Aisne (02)', + '8' : u'Allier (03)', + '89' : u'Alpes-de-Haute-Provence (04)', + '91' : u'Alpes-Maritimes (06)', + '104' : u'Andorre (991)', + '96' : u'Ardèche (07)', + '29' : u'Ardennes (08)', + '66' : u'Ariège (09)', + '30' : u'Aube (10)', + '54' : u'Aude (11)', + '67' : u'Aveyron (12)', + '1' : u'Bas-Rhin (67)', + '92' : u'Bouches-du-Rhône (13)', + '12' : u'Calvados (14)', + '9' : u'Cantal (15)', + '85' : u'Charente (16)', + '86' : u'Charente-Maritime (17)', + '23' : u'Cher (18)', + '59' : u'Corrèze (19)', + '33' : u'Corse-du-Sud (2A)', + '15' : u'Côte-d\'Or (21)', + '19' : u'Côtes-d\'Armor (22)', + '60' : u'Creuse (23)', + '87' : u'Deux-Sèvres (79)', + '3' : u'Dordogne (24)', + '40' : u'Doubs (25)', + '97' : u'Drôme (26)', + '49' : u'Essonne (91)', + '44' : u'Eure (27)', + '24' : u'Eure-et-Loir (28)', + '20' : u'Finistère (29)', + '55' : u'Gard (30)', + '69' : u'Gers (32)', + '4' : u'Gironde (33)', + '35' : u'Guadeloupe (971)', + '37' : u'Guyane (973)', + '34' : u'Haute-Corse (2B)', + '68' : u'Haute-Garonne (31)', + '10' : u'Haute-Loire (43)', + '32' : u'Haute-Marne (52)', + '90' : u'Hautes-Alpes (05)', + '42' : u'Haute-Saône (70)', + '102' : u'Haute-Savoie (74)', + '71' : u'Hautes-Pyrénées (65)', + '61' : u'Haute-Vienne (87)', + '2' : u'Haut-Rhin (68)', + '50' : u'Hauts-de-Seine (92)', + '56' : u'Hérault (34)', + '21' : u'Ille-et-Vilaine (35)', + '25' : u'Indre (36)', + '26' : u'Indre-et-Loire (37)', + '98' : u'Isère (38)', + '41' : u'Jura (39)', + '38' : u'La Réunion (974)', + '5' : u'Landes (40)', + '99' : u'Loire (42)', + '76' : u'Loire-Atlantique (44)', + '28' : u'Loiret (45)', + '27' : u'Loir-et-Cher (41)', + '70' : u'Lot (46)', + '6' : u'Lot-et-Garonne (47)', + '57' : u'Lozère (48)', + '77' : u'Maine-et-Loire (49)', + '13' : u'Manche (50)', + '31' : u'Marne (51)', + '36' : u'Martinique (972)', + '78' : u'Mayenne (53)', + '39' : u'Mayotte (976)', + '62' : u'Meurthe-et-Moselle (54)', + '63' : u'Meuse (55)', + '105' : u'Monaco (992)', + '22' : u'Morbihan (56)', + '64' : u'Moselle (57)', + '16' : u'Nièvre (58)', + '74' : u'Nord (59)', + '109' : u'Nouvelle Calédonie (988)', + '83' : u'Oise (60)', + '14' : u'Orne (61)', + '46' : u'Paris (75)', + '75' : u'Pas-de-Calais (62)', + '108' : u'Polynésie (987)', + '11' : u'Puy-de-Dôme (63)', + '7' : u'Pyrénées-Atlantiques (64)', + '58' : u'Pyrénées-Orientales (66)', + '100' : u'Rhône (69)', + '17' : u'Saône-et-Loire (71)', + '79' : u'Sarthe (72)', + '101' : u'Savoie (73)', + '47' : u'Seine-et-Marne (77)', + '45' : u'Seine-Maritime (76)', + '51' : u'Seine-Saint-Denis (93)', + '84' : u'Somme (80)', + '107' : u'St Pierre et Miquelon (975)', + '106' : u'Suisse (993)', + '72' : u'Tarn (81)', + '73' : u'Tarn-et-Garonne (82)', + '43' : u'Territoire de Belfort (90)', + '103' : u'Tous pays (99)', + '52' : u'Val-de-Marne (94)', + '53' : u'Val-d\'Oise (95)', + '93' : u'Var (83)', + '94' : u'Vaucluse (84)', + '80' : u'Vendée (85)', + '88' : u'Vienne (86)', + '65' : u'Vosges (88)', + '18' : u'Yonne (89)', + '48' : u'Yvelines (78)', + }.iteritems())]) + + Region_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ + '000000' : u'Toutes les régions', + '1' : u'Alsace', + '2' : u'Aquitaine', + '3' : u'Auvergne', + '4' : u'Basse-Normandie', + '5' : u'Bourgogne', + '6' : u'Bretagne', + '7' : u'Centre', + '8' : u'Champagne-Ardenne', + '9' : u'Corse', + '10' : u'DOM TOM', + '11' : u'Franche-Comté', + '12' : u'Haute-Normandie', + '13' : u'île-de-France', + '14' : u'Languedoc-Roussillon', + '15' : u'Limousin', + '16' : u'Lorraine', + '17' : u'Midi-Pyrénées', + '18' : u'Nord-Pas-de-Calais', + '19' : u'Pays de la Loire', + '20' : u'Picardie', + '21' : u'Poitou-Charentes', + '22' : u'Provence-Alpes-Côte d\'Azur', + '23' : u'Rhône-Alpes', + '24' : u'International', + }.iteritems())]) + + JobCategory_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ + '000000' : u'Toutes catégories', + '1' : u'Accueil', + '4' : u'Achats ', + '32' : u'Aéronautique - Navale', + '9' : u'Agriculture - Viticulture - Pêche ', + '33' : u'Agroalimentaire', + '15' : u'Architecture - Immobilier ', + '13' : u'Assurance', + '41' : u'Autres ', + '57' : u'Autres', + '60' : u'Autres', + '3' : u'Autres Fonctions Administratives', + '11' : u'Banque - Finance ', + '14' : u'Bâtiment - Travaux Publics', + '58' : u'Chimie - Pétrochimie', + '20' : u'Commerce - Vente', + '59' : u'Commerce Appareillage', + '42' : u'Conduite de véhicule', + '8' : u'Direction Générale', + '37' : u'Direction informatique encadrement', + '53' : u'Direction, Encadrement', + '50' : u'Directions, Cadres et Enseignement', + '28' : u'Electricité - Electronique - Automatisme', + '22' : u'Environnement - HSE - Développement durable', + '10' : u'Espaces Verts - Exploitation Forestière', + '38' : u'Etude et développement', + '43' : u'Exploitation de logistique - supply chain', + '39' : u'Exploitation, maintenance et support ', + '12' : u'Gestion - Comptabilité', + '21' : u'Grande et Moyenne Distribution', + '25' : u'Hôtellerie', + '47' : u'Imprimerie - Edition - Arts Graphiques', + '16' : u'Industrie Pharmaceutique / Cosmétologique - Biotech', + '5' : u'Juridique', + '29' : u'Maintenance - Entretien - SAV ', + '44' : u'Manutention', + '46' : u'Marketing - Communication - Medias', + '30' : u'Mécanique Générale', + '27' : u'Métiers de bouche', + '23' : u'Nettoyage - Assainissement - Pressing', + '34' : u'Nucléaire - Production d\'énergie', + '18' : u'Pharmacie Officine / Hospit / Para-pharmacie', + '35' : u'Plasturgie - Bois - Papier - Verre - Cuir - Textile', + '31' : u'Production - Fabrication ', + '6' : u'Qualité', + '17' : u'Recherche Clinique', + '49' : u'Rééducation, Radiologie, Appareillage, LAM', + '7' : u'Ressources Humaines - Formation', + '26' : u'Restauration', + '2' : u'Secrétariat - Assistanat', + '51' : u'Secrétariat, Dentaire, Social, Esthétique et Autres', + '24' : u'Sécurité - Premiers secours', + '36' : u'Sidérurgie - Métallurgie - Tuyauterie - Soudure', + '48' : u'Soignants - Auxiliaires', + '55' : u'Spectacle - Audiovisuel', + '40' : u'Systèmes et réseaux informatique et télécom', + '52' : u'Téléconseil - Télévente - Autres', + '54' : u'Tourisme - Loisirs', + '45' : u'Transport', + '19' : u'Vente, information et promotion du médicament', + '56' : u'Autres', + }.iteritems())]) + + activityDomain_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ + '000000' : u'Tous domaines d\'activité', + '1' : u'Accueil - Secrétariat - Fonctions Administratives', + '2' : u'Achats - Juridique - Qualité - RH - Direction', + '3' : u'Agriculture - Viticulture - Pêche - Espaces Verts', + '4' : u'Automobile', + '5' : u'Banque - Finance - Gestion Comptabilité - Assurance', + '6' : u'Bâtiment - Travaux Publics - Architecture - Immobilier', + '13' : u'Bureaux d\'Etudes - Méthodes', + '8' : u'Commerce - Vente - Grande Distribution', + '9' : u'Environnement - Nettoyage - Sécurité', + '10' : u'Hôtellerie - Restauration - Métiers de Bouche', + '11' : u'Industrie', + '12' : u'Informatique - Technologie de l\'Information', + '14' : u'Logistique - Manutention - Transport', + '15' : u'Marketing - Communication - Imprimerie - Edition', + '16' : u'Médical - Paramédical - Esthétique', + '7' : u'Pharmacie (Industrie, Officine) - Recherche clinique', + '17' : u'Télémarketing - Téléservices', + '18' : u'Tourisme - Loisirs - Spectacle - Audiovisuel', + }.iteritems())]) + + CONFIG = BackendConfig(Value('publication_date', label=u'Publication Date', choices=publicationDate_choices), + Value('conty', label=u'County', choices=searchCounty_choices), + Value('region', label=u'Region', choices=Region_choices), + Value('job_category', label=u'Job Category', choices=JobCategory_choices), + Value('activity_domain', label=u'Activity Domain', choices=activityDomain_choices), + ) + def search_job(self, pattern=None): with self.browser: - for advert in self.browser.search_job(pattern): + for advert in self.browser.search_job(pattern, + publication_date=int(self.config['publication_date'].get()), + conty=int(self.config['conty'].get()), + region=int(self.config['region'].get()), + job_category=int(self.config['job_category'].get()), + activity_domain=int(self.config['activity_domain'].get()) + ): yield advert def get_job_advert(self, _id, advert=None): diff --git a/modules/adecco/browser.py b/modules/adecco/browser.py index 0981ec77..3472b05c 100644 --- a/modules/adecco/browser.py +++ b/modules/adecco/browser.py @@ -21,7 +21,7 @@ from weboob.tools.browser.decorators import id2url from weboob.tools.browser import BaseBrowser from .job import AdeccoJobAdvert from .pages import SearchPage, AdvertPage - +import urllib __all__ = ['AdeccoBrowser'] @@ -32,17 +32,24 @@ class AdeccoBrowser(BaseBrowser): ENCODING = None PAGES = { - '%s://%s/trouver-un-emploi/Pages/Offres-d-emploi.aspx\?keywords=(.*?)' % (PROTOCOL, DOMAIN): SearchPage, + '%s://%s/trouver-un-emploi/Pages/Offres-d-emploi.aspx?(.*)$' % (PROTOCOL, DOMAIN): SearchPage, '%s://%s/trouver-un-emploi/Pages/Details-de-l-Offre/(.*?)/(.*?).aspx\?IOF=(.*?)$' % (PROTOCOL, DOMAIN): AdvertPage, } - def search_job(self, pattern): - if pattern is not None: + def search_job(self, pattern = None, publication_date = None, conty = None, region = None, job_category = None, activity_domain = None): + if pattern: self.location('%s://%s/trouver-un-emploi/Pages/Offres-d-emploi.aspx?keywords=%s' % (self.PROTOCOL, self.DOMAIN, pattern.replace(' ', '+'))) - assert self.is_on_page(SearchPage) - return self.page.iter_job_adverts() - else: - return [] + else: + data = { + 'publicationDate': publication_date, + 'department' : conty, + 'region' : region, + 'jobCategory' : job_category, + 'activityDomain' : activity_domain, + } + self.location('%s://%s/trouver-un-emploi/Pages/Offres-d-emploi.aspx?%s' % (self.PROTOCOL, self.DOMAIN, urllib.urlencode(data))) + assert self.is_on_page(SearchPage) + return self.page.iter_job_adverts() @id2url(AdeccoJobAdvert.id2url) def get_job_advert(self, url, advert):