Interconnexion de la plateforme LinkedIn avec l'ePortfolio Mahara

La page est créée Florian Mahe
 
CONTINUER À LIRE
Interconnexion de la plateforme LinkedIn avec l'ePortfolio Mahara
D 1.3.3 Prototype

        Interconnexion de la plateforme
       LinkedIn avec l’ePortfolio Mahara

                                    D 1.3.3 Prototype

Auteurs: Johann Luethi, Patrick Roth

Projet “Learning Infrastructure 2013”

Work Package 1.3 - Integration of 3rd party Environments with e-portfolios and institutional
services

22.05.2013

Learning Infrastructure 2013 - WP 1.3                                                     1
Interconnexion de la plateforme LinkedIn avec l'ePortfolio Mahara
D 1.3.3 Prototype

Introduction
Dans le rapport “Identification des réseaux sociaux professionnels” nous avons
identifié les plateformes professionnelles et sociales pouvant bénéficier d’un canal
de communication dédié avec le ePortfolio institutionnel. Suite à cela, le rapport
“Exploration des technologies web pour créer une interaction entre Mahara et les
plateformes professionnelles et sociales” nous a permis d’étudier les technologies
mises à disposition par chaque plateforme retenue pour permettre le transfert
d’artefacts avec le ePortfolio institutionnel et vice-versa. Cette étude nous a permis
de constater que l’API de LinkedIn offre à ce jour le plus grand potentiel en matière
de transfert d’artefact. Notre choix c’est donc porté sur cette plateforme pour
développer le prototype présentant l’échange d’artefacts entre Mahara et LinkedIn.

Dans ce document, nous détaillons les fonctionnalités et les interfaces que nous
avons développées dans notre prototype. L’ensemble des éléments ainsi
développés font partie d’un plugin que nous avons mis à disposition de la
communauté Maraha1.

Besoins utilisateurs
La multiplication des plateformes de gestion de profil professionnel est une problématique à
laquelle sont confrontés les étudiants. Celle-ci se développe lorsque l’étudiant doit maintenir
une multitude de profil orienté (CV). L’objectif de notre prototype est donc de résoudre en
partie ce problème. Nous allons pour cela lier le profil LinkedIn à celui de Mahara comme
nous montre l’image ci-dessous.

                    Figure 1: Liaison du profil LinkedIn avec celui de Mahara.

1
 Ce plugin est accessible à l’adresse suivante:
https://wiki.mahara.org/index.php/Plugins/Artefact/Linkedin

Learning Infrastructure 2013 - WP 1.3                                                     2
D 1.3.3 Prototype

Environnement Mahara 1.8
Nous avons développé un plugin qui pourra être intégré à la plateforme “Mahara” et qui
propose la gestion d’un profil utilisateur équivalant à celui contenu dans le profil LinkedIn.
Mahara 1.8 fonctionne sur un serveur Apache et nécessite une base de données
PostgreSQL 8.1 ou MySQL 5.0.25 (ou plus récent). Nous conseillons d’utiliser PostgreSQL
dans la mesure du possible. Le langage de programmation utilisé et devant tourner sur le
serveur est PHP 5.1.3 ou plus récent.

Les extensions PHP nécessaires sont :
   ● JSON
   ● cURL
   ● libxml
   ● SimpleXML
   ● Session
   ● pgSQL ou Mysqli
   ● EXIF
   ● OpenSSL ou XML-RCP.

Une version de Mahara est disponible au téléchargement sur le site http://www.mahara.org.

Objectifs du plugin
Le plugin doit permettre de récupérer les informations relatives au profil LinkedIn et de les
intégrer dans son profil Mahara. Les informations que nous avons ainsi récupérées sont les
suivantes :

Tableaux de données (termes anglais)          Donnée unique (termes anglais)
   ● associations                                ● first-name
   ● skills                                      ● last-name
   ● positions                                   ● headline
   ● educations                                  ● industry
   ● languages                                   ● picture-url
   ● interests                                   ● email-address
   ● job-bookmarks                               ● last-modified-timestamp
   ● suggestions                                 ● proposal-comments
   ● publications                                ● num-recommenders
   ● recommendations-received                    ● mfeed-rss-url
   ● patents                                     ● following
   ● certifications                              ● date-of-birth
   ● courses                                     ● member-url-resources
   ● volunteer                                   ● related-profile-views
   ● three-current-positions                     ● honors-awards
   ● three-past-positions                        ● phone-numbers
                                                 ● bound-account-types
                                                 ● im-accounts

Learning Infrastructure 2013 - WP 1.3                                                    3
D 1.3.3 Prototype

                                                 ●   main-address
                                                 ●   twitter-accounts
                                                 ●   primary-twitter-account
                                                 ●   connections
                                                 ●   group-memberships
                                                 ●   network

Fonctionnalités et interfaces
Les fonctionnalités que nous avons développées devaient permettre de récupérer les
informations sur le profil d’un utilisateur. Les fonctionnalités getUser(), getProfile() et
sendMessage() ont ainsi été développées. Le schéma ci-dessous détail les étapes et
fonctionnalités nécessaires à la récupération du profil LinkedIn depuis Mahara.

              Figure 2: Schéma de communication entre LinkedIn et Mahara.

Learning Infrastructure 2013 - WP 1.3                                                  4
D 1.3.3 Prototype
Voyons en détail chacune des principales étapes que sont :
   1. Authentification de l’utilisateur
   2. Sécurisation de la connexion
   3. Extraction des données du profil LinkedIn
   4. Envoi de messages sur son profil LinkedIn

Authentification de l’utilisateur
Inscription de Mahara sur LinkedIn
Pour authentifier ses utilisateurs sur LinkedIn il est nécessaire d’inscrire son application avec
LinkedIn. Ainsi nous définissons les adresses URL absolues pour les redirections des
demandes et pour créer les “token” OAuth.

Récupération de l’API KEY et de la SECRET KEY
Nous conservons la clé API et la clé secrète, qui nous permettrons d’identifier l’application et
nous permettra de faire les appels d’API. Ces deux éléments garantissent la sécurité de
votre application.

Récupération du token d’accès
Le “token” ou jeton d’accès est unique pour un utilisateur et la clé API. Pour faire des appels
API il est nécessaire d’avoir ce “token”. La récupération du code d’accès de l’utilisateur est
effectuée en envoyant l’utilisateur à l’URL suivante :

https://www.linkedin.com/uas/oauth2/authorization?response_type=code
                          &client_id=YOUR_API_KEY
                          &scope=SCOPE
                          &state=STATE
                          &redirect_uri=YOUR_REDIRECT_URI

            Code 1: requête responsable de récupérer le code d’accès utilisateur.

La requête redirigera l’utilisateur vers votre application avec le code d’authentification. Quant
à la récupération du token, elle se fait en envoyant le code d’accès de l’utilisateur avec la
requête suivante :

https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code
                          &code=AUTHORIZATION_CODE
                          &redirect_uri=YOUR_REDIRECT_URI
                          &client_id=YOUR_API_KEY
                          &client_secret=YOUR_SECRET_KEY

                 Code 2: requête renvoyant l’access_token au format JSON

Learning Infrastructure 2013 - WP 1.3                                                       5
D 1.3.3 Prototype

Appel à l’API
Il suffit alors de faire les appels API en incluant le jeton d’accès.

https://api.linkedin.com/v1/people/~?oauth2_access_token=AQXdSP_W41_UPs5ioT_t8H
ESyODB4FqbkJ8LrV_5mff4gPODzOYR

                                     Code 3: appel API type.

Sécurisation de la connexion
Comme nous l’avons vu précédemment, notre application utilisera une clé API ainsi qu’une
clé secrète. Cela nous permet d’obtenir pour l’utilisateur un code d’autorisation, qui atteste
que l’utilisateur accepte que ses données soient récoltées par notre application au travers
des appels API. Afin que l’utilisateur puisse effectuer les appels API, nous échangeons le
code d’autorisation contre un jeton d’accès (ou token access). Ce jeton d’accès est utilisable
durant une période limitée et doit être mis à jour si celui-ci est expiré. À l’aide de ce jeton
d’accès nous pouvons récolter les données du profil de l’utilisateur et publier sur son fil
d’actualité LinkedIn des messages (textes et URL). Les requêtes doivent être au format
https pour assurer la sécurité des échanges et la récupération des codes et token. Ces
mesures permettent d’assurer la sécurité en terme de confidentialité.

Envoi de la requête de connexion
       Si la clé “API” est reconnu et que l’application utilise la bonne URL Alors
                Demander à l’utilisateur la permission d’accéder à son profil
                       Si l’utilisateur accepte Alors
                                 Récupérer les informations de son profil
                       Sinon terminer l’opération
       Sinon terminer l’opération
Retourner un fichier format JSON des données du profil de l’utilisateur
                 Pseudo-code 1: connexion et récupération du profil LinkedIn

Extraction des données du profil LinkedIn
Une fois le jeton d’accès récupéré et l’utilisateur authentifié nous utilisons la requête API
“https://api.linkedin.com/v1/people/~” pour récupérer les données du profil LinkedIn.

Envoi de l’appel API “people”
  Si le token et l’id de l’utilisateur sont correctes
     Retourner les informations du profil LinkedIn demandés et authorisé
  Sinon renvoi d’une erreur

                          Pseudo-code 2: extraction du profil LinkedIn

Learning Infrastructure 2013 - WP 1.3                                                     6
D 1.3.3 Prototype

Détails sur les attributs à récupérer
Les éléments du profil qui sont récupérés sont les suivants :
   ● Compétences (skills)
   ● Expériences professionnelels (positions)
   ● Formations (educations)
   ● Langues (languages)
   ● Emploi annotés (job-bookmarks)
   ● Suggestions (suggestions)
   ● Publications (publications)
   ● Recommendations reçues (recommendations-received)
   ● Brevets (patents)
   ● Certifications (certifications)
   ● Cours (courses)
   ● Volontariat (volunteer)
   ● Trois positions professionnelles actuelles (three-current-positions)
   ● Trois positions professionnelles passées (three-past-positions)

$array = array('associations','skills','positions','educations','languages'
,'interests','job-bookmarks','suggestions','publications','recommendations-received'
,'patents','certifications','courses','volunteer','three-current-positions','three-past-positions');
$values = array('id','first-name','last-name','headline','industry','picture-url'
,'email-address','last-modified-timestamp','proposal-comments','num-recommenders'
,'mfeed-rss-url,following','date-of-birth','member-url-resources','related-profile-views'
,'honors-awards','phone-numbers','bound-account-types','im-accounts','main-address'
,'twitter-accounts','primary-twitter-account','connections','group-memberships','network');

                         Code 4: structure contenant le profil utilisateur

Learning Infrastructure 2013 - WP 1.3                                                             7
D 1.3.3 Prototype

Envoi d’un message sur son profil LinkedIn
Nous utilisons la requête API “https://api.linkedin.com/v1/people/~/shares” pour publier sur le
profil de l’utilisateur une nouvelle actualité, comme par exemple la publication d’un nouveau
portfolio.

data = "".
"".
"$comment";
if (!empty($url)) {
$data .= "".
 "$title".
"$description".
"$url".
"$img".
"";
}
$data .=          "".
"$visibility".
"".
"";

                                Code 5: détail d’un message

Quant au stockage des données de connexion au profil LinkedIn de l’utilisateur, elles sont
enregistrées dans la table “usr_security_token”:

 name          type

 usr           int (10)

 app           char (255)

 token         char (255)

 salt          char (255)

 profile       char (255)

 ctime         datetime

Learning Infrastructure 2013 - WP 1.3                                                     8
D 1.3.3 Prototype

Interfaces développées
Pour cette application nous avons
développé deux interfaces en PHP/MySQL.
Elles permettent de récupérer le code
d’autorisation de l’utilisateur puis d’envoyer
les appels API nécessaires à LinkedIn.

Menu
Nous avons rajouté dans le sous-menu “Content” un lien vers l’application développée voir
ci-dessous).

       Figure 5: onglet “Content” contenant le sous-onglet affichant le titre “LinkedIn”

Ainsi, en cliquant sur ce lien, l’utilisateur peut connecter son profil Mahara à son profil
LinkedIn.

L’utilisateur arrive automatiquement sur la page “Profil”. Si l’utilisateur n’a pas récupéré le
code d’autorisation ou le jeton d’accès il voit apparaître le bouton ci-dessous (“Login”).

Connexion de l’utilisateur à LinkedIn
L’utilisateur doit cliquer sur le bouton “login” pour accéder à la page d’autorisation des droits
d’accès au profil LinkedIn.

Learning Infrastructure 2013 - WP 1.3                                                       9
D 1.3.3 Prototype

Cette page permet à l’utilisateur d’autoriser l’accès de l’application Mahara au profil
LinkedIn.

Learning Infrastructure 2013 - WP 1.3                                              10
D 1.3.3 Prototype

Import du profil utilisateur
Une fois le code d’accès au profil LinkedIn récupérer l’application obtient un jeton d’accès
temporaire pour afficher les données de l’utilisateur en les triant et les affichant de la
manière suivante :

Compétences

Publications

Learning Infrastructure 2013 - WP 1.3                                                   11
D 1.3.3 Prototype

Expériences professionnelles

Formations

Publication d’un message sur LinkedIn
Cette page permet à l’utilisateur de publier sur LinkedIn un commentaire visible par tout le
monde. Celui-ci est composé d’un titre, d’une description, d’une URL et d’une image (url). Le
message est envoyé à LinkedIn qui l’affiche sur le fil d’activité de l’utilisateur.

Learning Infrastructure 2013 - WP 1.3                                                    12
D 1.3.3 Prototype

Déconnexion
La page “Déconnexion” permet à l’utilisateur de se déconnecter de l’application et
d’empêcher l’application de récupérer les informations du profil de l’utilisateur.

Accès au plugin
Le     plugin   a    été    publié   sur   le   wiki   de   Mahara.org   à   l’adresse:
https://wiki.mahara.org/index.php/Plugins.

Le code source du plugin quand à lui peut être téléchargé sur GitHub à l’adresse:
https://github.com/johannluthi/mahara-plugin-linkedin/.

Conclusion
Dans ce document, nous avons détaillé les étapes qui nous ont été nécessaires au
développement du plugin Mahara “LinkedIn Profil Import”. Ce plugin avait pour
principal but d’importer l’ensemble des artefacts contenus dans le profil de l’usager
LinkedIn dans Mahara.

Pour répondre aux objectifs, nous avons développé un ensemble de fonctionnalités
responsables de réaliser les 4 étapes clés que sont: 1) l’authentification; 2) la
sécurisation; 3) le transfert de données LinkedIn et 4) l’envoi de messages. La
communication avec LinkedIn c’est fait quant à elle par le biais de services Web.

Pour permettre à l’usager Mahara d’importer les données LinkedIn, nous avons
développé des interfaces utilisateur que nous avons intégrées dans un nouveau
sous onglet “LinkedIn”. Ces interfaces permettent entre autres de se connecter
LinkedIn, importer son profil, envoyer des messages personnalisés à LinkedIn, etc.

Grâce à nos connaissances techniques de l’environnement Mahara ainsi que la
qualité de la documentation fournie par LinkedIn, aucun problème majeur n’a été
rencontré lors du développement du module. De par ce développement, nous avons
pu démontrer qu’il est possible de connecter la plateforme Mahara avec LinkedIn.
L’objectif à long terme est donc de généraliser le concept aux autres outils identifiés
dans le rapport 1.3.1 “Identification des réseaux sociaux professionnels”.

Learning Infrastructure 2013 - WP 1.3                                              13
Vous pouvez aussi lire