backend adecco manage filters

Signed-off-by: sebastien <sebastien@perso>
Signed-off-by: Romain Bignon <romain@symlink.me>
This commit is contained in:
sebastien 2013-07-16 13:51:05 +02:00 committed by Romain Bignon
commit 892b85274a
2 changed files with 266 additions and 10 deletions

View file

@ -18,7 +18,9 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
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 weboob.capabilities.job import ICapJob
from .browser import AdeccoBrowser from .browser import AdeccoBrowser
from .job import AdeccoJobAdvert from .job import AdeccoJobAdvert
@ -35,9 +37,256 @@ class AdeccoBackend(BaseBackend, ICapJob):
BROWSER = AdeccoBrowser 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): def search_job(self, pattern=None):
with self.browser: 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 yield advert
def get_job_advert(self, _id, advert=None): def get_job_advert(self, _id, advert=None):

View file

@ -21,7 +21,7 @@ from weboob.tools.browser.decorators import id2url
from weboob.tools.browser import BaseBrowser from weboob.tools.browser import BaseBrowser
from .job import AdeccoJobAdvert from .job import AdeccoJobAdvert
from .pages import SearchPage, AdvertPage from .pages import SearchPage, AdvertPage
import urllib
__all__ = ['AdeccoBrowser'] __all__ = ['AdeccoBrowser']
@ -32,17 +32,24 @@ class AdeccoBrowser(BaseBrowser):
ENCODING = None ENCODING = None
PAGES = { 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, '%s://%s/trouver-un-emploi/Pages/Details-de-l-Offre/(.*?)/(.*?).aspx\?IOF=(.*?)$' % (PROTOCOL, DOMAIN): AdvertPage,
} }
def search_job(self, pattern): def search_job(self, pattern = None, publication_date = None, conty = None, region = None, job_category = None, activity_domain = None):
if pattern is not None: if pattern:
self.location('%s://%s/trouver-un-emploi/Pages/Offres-d-emploi.aspx?keywords=%s' % (self.PROTOCOL, self.DOMAIN, pattern.replace(' ', '+'))) 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) else:
return self.page.iter_job_adverts() data = {
else: 'publicationDate': publication_date,
return [] '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) @id2url(AdeccoJobAdvert.id2url)
def get_job_advert(self, url, advert): def get_job_advert(self, url, advert):