Tuesday, September 18, 2012

LinkedIn Integration with Drupal

LinkedIn Integration with Drupal

How to send Message or Invitation to LinkedIn friends using Linkedin account with Drupal?

1) Create LinkedIn Application
URL - https://www.linkedin.com/secure/developer

• Create LinkedIn Application
• Get Api Key and Secret Key

2) Use following Module for integration
• Linkedin - http://drupal.org/project/linkedin/
• OAuth- http://drupal.org/project/oauth

Set consumer key and secret Key then authenticate using OAuth. After authentication it will open a connection to linkedIn. And you will be able to access the friends and their information.
function connection()
{
$consumer_key = ‘abcde’ // app key
$consumer_secret = ‘xyz’ // secret key
Send token to oauth for authentication
$consumer = new OAuthConsumer($consumer_key, $consumer_secret, NULL);
$base_url = "https://api.linkedin.com/uas/oauth";
$url = $base_url . "/requestToken";
$signature = new OAuthSignatureMethod_HMAC_SHA1();
$request = OAuthRequest::from_consumer_and_token($consumer, NULL, 'POST', $url);
$request->sign_request($signature, $consumer, NULL);
$header = $request->to_header("http://api.linkedin.com");

$provider = 'linkedin';
$tokens = db_fetch_array(db_query("SELECT * FROM {linkedin_token} WHERE uid = 120 AND type = 'access'")); // get token key and token secret from query
$token = array(
'token_key' => $tokens['token_key'],
'token_secret' => $tokens['token_secret'],
); // get login user token

$result = linkedin_get_fields('http://api.linkedin.com/v1/people/~/connections', $token);
// $result is array of connection of friends

}

This function is sending Message to Friends

Send message()
{

$base_url = "http://api.linkedin.com/v1/people/~/mailbox";
$signature = new OAuthSignatureMethod_HMAC_SHA1();
$consumer_key = ‘ app key’ // app key
$consumer_secret = ‘secret key’ // secret key
$consumer = new OAuthConsumer($consumer_key, $consumer_secret, NULL);
$token = new OAuthConsumer($tokens['token_key'], $tokens['token_secret'], 1); // user key
$request = OAuthRequest::from_consumer_and_token($consumer, $token, "POST", $base_url);

// send URL
$request->sign_request($signature, $consumer, $token);
$header = $request->to_header("http://api.linkedin.com");
$friends_id=’abcdf43’;



// send you message using xml format
$xml_message_body .= '<?xml version="1.0" encoding="UTF-8"?>';
$xml_message_body .= '<mailbox-item>';
 $xml_message_body .= '<recipients>';
 $xml_message_body .= '<recipient>';
 $xml_message_body .= '<person path="/people/' . $friends_id. '" />';
 $xml_message_body .= '</recipient>';
 $xml_message_body .= '</recipients>';
$xml_message_body .= '<subject>Invitation</subject>';
 $xml_message_body .= '<body>this is text message</body>';
 $xml_message_body .= '</mailbox-item>';

$response = _linkedin_connections_http_request($base_url, $header, $xml_message_body);

}


The linkedin conncetion http request function post your request to server.

function _linkedin_connections_http_request($url, $header, $body = NULL) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_URL, $url);

if ($body) {
curl_setopt($ch, CURLOPT_POST, 1);
if ($body == 'token_request') {

curl_setopt($ch, CURLOPT_POSTFIELDS, '');
} else {
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header, 'Content-Type: text/xml;charset=utf-8'));
curl_setopt($ch, CURLOPT_POST, 1);
// It is important to set request to POST for sending messages.
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
}
}

// execute the curl call
$output = curl_exec($ch);

// get the http response code
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// close the curl connection
curl_close($ch);

// check for success. An httpd status of 201 inicates success:
// see https://developer.linkedin.com/documents/messaging-between-connections-api
if ($http_code == '201') {
return $http_code;
} else {
// otherwise, return the xml $output
return $output;
}
}

No comments: