Advertisement
tanim

Linkedin User Full Profile Grabber Via OAuth 2.0

Dec 4th, 2013
2,478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. // Change these
  3. define('API_KEY',      'YOUR_API_KEY_HERE'                                          );
  4. define('API_SECRET',   'YOUR_API_SECRET_HERE'                                       );
  5. define('REDIRECT_URI', 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME']);
  6. define('SCOPE',        'r_fullprofile r_emailaddress rw_nus'                );
  7.  
  8. // You'll probably use a database
  9. session_name('linkedin');
  10. session_start();
  11.  
  12. // OAuth 2 Control Flow
  13. if (isset($_GET['error'])) {
  14.     // LinkedIn returned an error
  15.     print $_GET['error'] . ': ' . $_GET['error_description'];
  16.     exit;
  17. } elseif (isset($_GET['code'])) {
  18.     // User authorized your application
  19.     if ($_SESSION['state'] == $_GET['state']) {
  20.         // Get token so you can make API calls
  21.         getAccessToken();
  22.     } else {
  23.         // CSRF attack? Or did you mix up your states?
  24.         exit;
  25.     }
  26. } else {
  27.     if ((empty($_SESSION['expires_at'])) || (time() > $_SESSION['expires_at'])) {
  28.         // Token has expired, clear the state
  29.         $_SESSION = array();
  30.     }
  31.     if (empty($_SESSION['access_token'])) {
  32.         // Start authorization process
  33.         getAuthorizationCode();
  34.     }
  35. }
  36.  
  37. // Congratulations! You have a valid token. Now fetch your profile
  38. $user = fetch('GET', '/v1/people/~:(network,honors-awards,certifications:(authority:(name),name,number,start-date,end-date),patents:(title,summary,inventors:(person),date,office:(name),number),languages:(language:(name),proficiency:(name)),num-recommenders,recommendations-received,main-address,summary,date-of-birth,interests,id,first-name,last-name,headline,picture-url,email-address,location:(name),industry,positions,skills,volunteer,educations,publications:(authors:(name),title,date,url,summary,publisher:(name)),phone-numbers)');
  39. print "Hello $user->firstName $user->lastName.";
  40. echo "<pre>";var_dump($user);
  41. echo "</pre>";
  42. exit;
  43.  
  44. function getAuthorizationCode() {
  45.     $params = array('response_type' => 'code',
  46.                     'client_id' => API_KEY,
  47.                     'scope' => SCOPE,
  48.                     'state' => uniqid('', true), // unique long string
  49.                     'redirect_uri' => REDIRECT_URI,
  50.               );
  51.  
  52.     // Authentication request
  53.     $url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params);
  54.    
  55.     // Needed to identify request when it returns to us
  56.     $_SESSION['state'] = $params['state'];
  57.  
  58.     // Redirect user to authenticate
  59.     header("Location: $url");
  60.     exit;
  61. }
  62.    
  63. function getAccessToken() {
  64.     $params = array('grant_type' => 'authorization_code',
  65.                     'client_id' => API_KEY,
  66.                     'client_secret' => API_SECRET,
  67.                     'code' => $_GET['code'],
  68.                     'redirect_uri' => REDIRECT_URI,
  69.               );
  70.    
  71.     // Access Token request
  72.     $url = 'https://www.linkedin.com/uas/oauth2/accessToken?' . http_build_query($params);
  73.    
  74.     // Tell streams to make a POST request
  75.     $context = stream_context_create(
  76.                     array('http' =>
  77.                         array('method' => 'POST',
  78.                         )
  79.                     )
  80.                 );
  81.  
  82.     // Retrieve access token information
  83.     $response = file_get_contents($url, false, $context);
  84.  
  85.     // Native PHP object, please
  86.     $token = json_decode($response);
  87.  
  88.     // Store access token and expiration time
  89.     $_SESSION['access_token'] = $token->access_token; // guard this!
  90.     $_SESSION['expires_in']   = $token->expires_in; // relative time (in seconds)
  91.     $_SESSION['expires_at']   = time() + $_SESSION['expires_in']; // absolute time
  92.    
  93.     return true;
  94. }
  95.  
  96. function fetch($method, $resource, $body = '') {
  97.     $params = array('oauth2_access_token' => $_SESSION['access_token'],
  98.                     'format' => 'json',
  99.               );
  100.    
  101.     // Need to use HTTPS
  102.     $url = 'https://api.linkedin.com' . $resource . '?' . http_build_query($params);
  103.     // Tell streams to make a (GET, POST, PUT, or DELETE) request
  104.     $context = stream_context_create(
  105.                     array('http' =>
  106.                         array('method' => $method,
  107.                         )
  108.                     )
  109.                 );
  110.  
  111.  
  112.     // Hocus Pocus
  113.     $response = file_get_contents($url, false, $context);
  114.  
  115.     // Native PHP object, please
  116.     return json_decode($response);
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement