Linkedin, API, OAuth – Se connecter et rapatrier des informations de la plate-forme Linkedin
Il y avait au départ de cet article, la volonté de pouvoir partager correctement des articles sur Linkedin donc d’implémenter le protocole Open Graph
, le même que sur Facebook afin d’optimiser le partage sur cette plate-forme plus professionnelle.
De fil en aiguille, nous avons finalement explorer un peu plus profondément l’API linkedin. C’est une chose que de partager, c’est aussi une chose de pouvoir rapatrier de l’information.
Pour mémoire, on avait consacré un billet à ce fameux Open Graph protocol
qui facilite le partage sur Facebook
- Facebook, Open Graph protocol, Partage, Réseau social – Les bonnes pratiques pour le partage social sur Facebook
https://flaven.fr/2012/04/facebook-open-graph-protocol-partage-reseau-social-les-bonnes-pratiques-pour-la-partage-social-sur-facebook/
D’évidence, en comparaison avec l’API Twitter, les règles de création d’une API sur Linkedin sont relativement similaires. C’est le pré-requis indispensable pour se connecter à l’API linkedin.
Créer une application sur Linkedin
Voici les principales captures d’écran pour la création d’un app sur l’API Linkedin sur http://developer.linkedin.com/.
Vous obtenez donc les codes nécessaires au paramétrage de votre authentification que vous allez utiliser dans votre script.
- Nom de l’application : test_flaven_oauth
- Clé API : msqi8kmf9dy4
- Clé secrète : RP71sq5fGWwLMbsN
- Token utilisateur OAuth : 6c98dcd0-3hg5-7i47-aw0v-0a621b650faI
- Secret utilisateur OAuth : d4d824f1-f1a0-1048-7s78-921a87q20MLL
Conclusion : en comparaison de l’API Twitter, l’API linkedin semble moins bien documenté. L’authentification est plus contraignante sans doute parce les données y sont peut-être plus sensibles sur cette plate-forme professionnelle mais enfin on parvient finalement à ces fins. La bonne nouvelle c’est que si vous faites les modifications nécessaires pour le partage sur Facebook, les données Open Graph Protocol
seront utilisées à l’identique sur Linkedin
Un script d’authentification et de rapatriement des données de votre compte Linkedin.
<?php // Change these // define('API_KEY', 'YOUR_API_KEY_HERE' ); // define('API_SECRET', 'YOUR_API_SECRET_HERE' ); /* To change with your own credentials */ define('API_KEY', 'msqi8kmf9dy4' ); define('API_SECRET', 'RP71sq5fGWwLMbsN' ); define('REDIRECT_URI', 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME']); define('SCOPE', 'r_fullprofile r_emailaddress rw_nus' ); // You'll probably use a database session_name('linkedin'); session_start(); // OAuth 2 Control Flow if (isset($_GET['error'])) { // LinkedIn returned an error print $_GET['error'] . ': ' . $_GET['error_description']; exit; } elseif (isset($_GET['code'])) { // User authorized your application if ($_SESSION['state'] == $_GET['state']) { // Get token so you can make API calls getAccessToken(); } else { // CSRF attack? Or did you mix up your states? exit; } } else { if ((empty($_SESSION['expires_at'])) || (time() > $_SESSION['expires_at'])) { // Token has expired, clear the state $_SESSION = array(); } if (empty($_SESSION['access_token'])) { // Start authorization process getAuthorizationCode(); } } define ('_SOURCE_LINKEDIN_', '/v1/people/~:(id,first-name,last-name,headline,industry)'); $user = fetch('GET', ''._SOURCE_LINKEDIN_.''); // http://api.linkedin.com/ /* http://developer.linkedin.com/apis */ print (''.$user->id.''); echo ('<br>'); print (''.$user->firstName.''); echo ('<br>'); print (''.$user->lastName.''); echo ('<br>'); print (''.$user->headline.''); echo ('<br>'); /* print (''.$user->picture-url.''); echo ('<br>'); */ print (''.$user->industry.''); echo ('<br>'); // print "Hello $user->firstName $user->lastName."; exit; function getAuthorizationCode() { $params = array('response_type' => 'code', 'client_id' => API_KEY, 'scope' => SCOPE, 'state' => uniqid('', true), // unique long string 'redirect_uri' => REDIRECT_URI, ); // Authentication request $url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params); // Needed to identify request when it returns to us $_SESSION['state'] = $params['state']; // Redirect user to authenticate header("Location: $url"); exit; } function getAccessToken() { $params = array('grant_type' => 'authorization_code', 'client_id' => API_KEY, 'client_secret' => API_SECRET, 'code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI, ); // Access Token request // $url = 'https://www.linkedin.com/uas/oauth2/accessToken?' . http_build_query($params); // Tell streams to make a POST request $context = stream_context_create( array('http' => array('method' => 'POST', ) ) ); // Retrieve access token information $response = file_get_contents($url, false, $context); // Native PHP object, please $token = json_decode($response); // Store access token and expiration time $_SESSION['access_token'] = $token->access_token; // guard this! $_SESSION['expires_in'] = $token->expires_in; // relative time (in seconds) $_SESSION['expires_at'] = time() + $_SESSION['expires_in']; // absolute time return true; } function fetch($method, $resource, $body = '') { $params = array('oauth2_access_token' => $_SESSION['access_token'], 'format' => 'json', ); // Need to use HTTPS $url = 'https://api.linkedin.com' . $resource . '?' . http_build_query($params); // print_r($url); // Tell streams to make a (GET, POST, PUT, or DELETE) request $context = stream_context_create( array('http' => array('method' => $method, ) ) ); // Hocus Pocus $response = file_get_contents($url, false, $context); // Native PHP object, please return json_decode($response); } ?> |
En savoir plus
- simple-linkedinphp, a PHP-based wrapper for the LinkedIn API
https://code.google.com/p/simple-linkedinphp/wiki/QuickStart - mahmudahsan / Linkedin—Simple-integration-for-your-website
https://github.com/mahmudahsan/Linkedin—Simple-integration-for-your-website - petewarden / linkedinoauthexample
https://github.com/petewarden/linkedinoauthexample - LinkedIn Developer Network – Getting an OAuth Token in PHP
http://developer.linkedin.com/documents/getting-oauth-token-php - LinkedIn Developer Network – Authentication
http://developer.linkedin.com/documents/authentication - LinkedIn Developer Network – Share API
https://developer.linkedin.com/documents/share-api - LinkedIn Developer Network – OAuth Test Console
http://developer.linkedin.com/oauth-test-console - Integrate linkedin api in your site
http://thinkdiff.net/linkedin/integrate-linkedin-api-in-your-site/