Développeur web et mobile (3),
API emploi store dev…

Publié le 12 février 2021, par Richard Carlier
Série: Développeur Web et Mobile
#annonces #api #developpeurMobile #developpeurWeb #emploi #pole emploi #python

Une API (interface de programmation d’application), dans ce cas, est un moyen de récupérer des données sans passer par l’interface web de Pole Emploi.

Et de pouvoir me constituer des fichiers structurés, locaux, permettant toutes sortes d’analyses.

Boite à outils pour développeurs

La suite se trouve sur le site spécifique Emploi Store Développeurs.

Ils proposent de nombreuses API, dont :

  • Offres d’emploi disponibles sur pole-emploi.fr, que je vais utiliser,
  • Explorateur de métiers, pour associer une appellation métier et/ou une compétence à partir de mots clés (qui sera peut être l’objet d’une étude de ma part…)
  • Infotravail, pour explorer les données du marché du travail
  • Et de nombreuses autres

Toutes nécessitent un processus d’inscription et de validation (ce que j’avais fait il y a presque un an sans avoir eu le temps d’aller au delà, un certain confinement étant intervenu changeant certaines priorités). Certaines API sont en accès restreint, d’autres en test…

Bref, beaucoup de matières potentiellement intéressante.

A l’attaque !

Une fois déclarée mon application, j’obtiens classiquement un identifiant et une clé secrète (qui resteront secrets bien sûr).

Lesquels, après un petit coup de Postman, me permettent d’obtenir le sésame, un access_token, qui va permettre d’interroger le stock d’annonces.

J’ai pas trop compris pourquoi, le token en question expire assez rapidement, ce qui nécessite de le rafraichir régulièrement.

A ce point (une vingtaine de minutes), c’est un peu court. Mais bon, j’avoue ne pas avoir cherché plus que cela, j’ai le droit de faire 3 appels de l’API par seconde, et je peux rafraichir le token si besoin; mon étude étant ponctuelle, cela devrait suffire.

La documentation

C’est toujours bien de le souligner, je l’ai trouvé assez bien faite.

Déjà (et ça c’est rare)  elle est en français (moins pour les données françaises quand même).

Et nous explique tous les critères utilisables pour le moteur (très légèrement plus nombreux que ceux de l’interface web semble-t-il).

Quelques tests plus tard, je retrouve la seconde annonce 9779732 évoquée dans l’épisode précédent (la première n’était pas accessible, je présume qu’il y a un léger décalage entre les annonces du site et celles de l’API).

GET https://api.emploi-store.fr/partenaire/offresdemploi/v2/offres/9779732

Mais ce coup ci, sous forme de fichier JSON.

A priori, interroger une seule annonce m’intéresse moins, je vais plutôt utiliser le critère search pour récupérer des listes. Les paramètres dépendent de ce que l’on cherche (voir ci après), dans un premier temps je teste avec un seul mot clef:

GET https://.../offresdemploi/v2/offres/search?motsCles=Wordpress

On récupère alors un JSON structuré, avec une entrée resultat (un tableau, c’est à dire la liste des résultats, identique au JSON individuel évoqué ci dessus) et une entrée filtresPossibles (avec des filtres possibles… clair, non ?)

Personnellement, je trouve cette API bien faite.

Les référentiels

Pour utiliser le moteur de recherche, il convient d’utiliser des référentiels, donc de les connaître. Ce que permet la ressource des référentiels, qui me permet de récupérer les listes :

  • Code ROME (Répertoire opérationnel des métiers et des emplois) : Domaines professionnels, Appellations, Métiers, Thèmes
  • Géographie : Régions, Départements, Communes (il s’agit des codes INSEE et non des numéros de département)
  • Secteurs d’activités
  • Natures de contrats
  • Types de contrats
  • Niveaux de formations

Ces référentiels apparaîtront comme critères de recherche (on peut aussi utiliser des mots clefs), ainsi que dans la réponse des annonces (y apparait le code et le libellé, ce qui est plutôt pratique pour l’étude).

Récupération des données

Il est temps de passer à la vitesse supérieure, et organiser un script python pour constituer mon stock d’annonces, avant analyse.

Si on se focalise sur mon secteur (issu du référentiel ROME), le M1805, cela nous donne pour ce jour 2848 annonces…

{ "code": "M1805", "libelle": "Études et développement informatique" },

Sachant que l’API ne fournit les résultats que par groupe de 50, et dans la limite de 1050 annonces maxi, il va falloir faire un peu de pagination…

Après quelques manips (et interruptions du fait de l’expiration du token…) me voici à la tête de quelques données

Pour les principaux intitulés de poste, cela nous donne:

J’ai sans doute vu un peu large dans la catégorie M1805 (ou, disons-le, un peu à côté), de nombreux intitulés évoquent des métiers par trop éloignés du développement Web et mobile, qui sont un peu plus mon cœur de métier…

On va donc utiliser le référentiel des appellations, en ciblant encore un peu largement. J’ai bien conscience que Web Designer est un peu hors de mon sujet… mais assez proche dans la logique de travail. Donc cela nous donne cette série d’appellations:

{ "14155", "Développeur / Développeuse multimédia" },
{ "14156", "Développeur / Développeuse web" },
{ "12258", "Chef de projet Web" },
{ "15564", "Infographiste web master" },
{ "20727", "Webmaster concepteur / conceptrice de site web"},
{ "20726", "Web designer" },
{ "38782", "Designer web mobile" },
{ "126559", "Chef de produit web mobile" },
{ "38745", "Développeur / Développeuse web mobile" },

En faisant tourner la moulinette pendant quelques minutes (chaque appellation doit être appelée une à une), j’obtiens ce coup ci 6342 annonces, profilées ainsi:

Le jeu de données n’est sans doute pas parfait (certaines appellations évoquent toujours du développement plus informatique et moins web ou mobile).

Dernière approche, quelques mots clefs habilement sélectionnés:

CRITERES_LISTE = ["Developpeur,mobile", "application,mobile",
                  "Developpeur,web", "full,stack",
                  "javascript", "php", "python",
                  "react", "Wordpress", "angular"]

Bon, j’oriente un peu la direction par rapport à quelques unes de mes spécialités, mais après tout… 2900 récupérations plus tard:

Même remarque que précédemment, il y a sans doute ses annonces un peu à côté, mais on est pas trop mal.

La prochaine étape sera de fusionner ces jeux de données, en retirant les éventuels doublons, et de filtrer sur les intitulés de poste intéressant

Pour ce faire, plus besoin de l’API, j’ai tout gardé au format JSON…

A suivre dans l’épisode 4…

Top