Hey Guys,
I had lot of research for silent post into LinkedIn user wall and company page , finally I have integrated as custome the solution and and get long live access token of user/page from Linked to share their user wall/page wall.
Below are the step to post LinkedIn
Step1 -> Login to LinkedIn developer account create app
Step 2 -> Download LinkedIn API
#######################LinkedIn.OAuth2.class.php#################
<?php
require_once('OAuth2.class.php');
class LinkedInOAuth2 extends OAuth2 {
public function __construct($access_token=''){
$this->access_token_url = "https://www.linkedin.com/uas/oauth2/accessToken";
$this->authorize_url = "https://www.linkedin.com/uas/oauth2/authorization";
parent::__construct($access_token);
$this->access_token_name='oauth2_access_token';
}
public function getAuthorizeUrl($client_id,$redirect_url,$scope=''){
$additional_args = array();
if($scope!=''){
if(is_array($scope)){
$additional_args['scope']=implode(" ",$scope);
$additional_args['scope'] = $additional_args['scope'];
}else{
$additional_args['scope'] = $scope;
}
}
$additional_args['state'] = md5(time());
return parent::getAuthorizeUrl($client_id,$redirect_url,$additional_args);
}
public function getAccessToken($client_id="", $secret="", $redirect_url="", $code = ""){
$result = parent::getAccessToken($client_id, $secret, $redirect_url, $code);
$result = json_decode($result,true);
if(isset($result['error'])){
$this->error = $result['error'].' '.$result['error_description'];
return false;
}else{
$this->access_token = $result['access_token'];
return $result;
}
}
public function getProfile(){
$params=array();
$fields = array(
'current-status',
'id',
'picture-url',
'first-name',
'last-name',
'public-profile-url',
'num-connections',
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~:({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getUserProfile($user_id){
$params=array();
$fields = array(
'current-status',
'id',
'picture-url',
'first-name',
'last-name',
'public-profile-url',
'num-connections',
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/".$user_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getConnections(){
$params=array();
$params['url'] = "https://api.linkedin.com/v1/people/~/connections";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroups(){
$fields = array(
'group:(id,name)',
'membership-state',
'show-group-logo-in-profile',
'allow-messages-from-members',
'email-digest-frequency',
'email-announcements-from-managers',
'email-for-every-new-post'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~/group-memberships:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=200;
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroup($group_id=""){
if(!$group_id) return false;
$fields = array(
'id',
'small-logo-url',
'large-logo-url',
'name',
'short-description',
'description',
'site-group-url',
'num-members'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/groups/".$group_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompanies(){
$fields = array(
'id',
'name'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~:(first-name,positions:(company:({$request})))";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=100;
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompany($company_id=""){
if(!$company_id)return false;
$fields = array(
'id',
'name',
'website-url',
'square-logo-url',
'logo-url',
'blog-rss-url',
'description',
'num-followers'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/companies/".$company_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getAdminCompanies(){
$fields = array(
'id',
'name'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/companies:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=100;
$params['args']['is-company-admin']='true';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getFollowedCompanies(){
$fields = array(
'id',
'name'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~/following/companies:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=200;
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getStatuses($self = false, $start=0,$count = 20){
$params['url'] = "https://api.linkedin.com/v1/people/~/network/updates";
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
if($self){
$params['args']['scope']='self';
}
$params['args']['type']='SHAR';
$params['args']['order']='recency';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getUserStatuses($user_id, $self = true, $start=0,$count = 20){
$params['url'] = "https://api.linkedin.com/v1/people/id=".$user_id."/network/updates";
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
if($self){
$params['args']['scope']='self';
}
$params['args']['type']='SHAR';
$params['args']['order']='recency';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroupPosts($group_id, $start=0,$count = 20, $order="", $category="",$role=""){
$fields = array(
'id',
'creator:(id,first-name,last-name,picture-url,headline)',
'title',
'summary',
'likes',
'comments',
'site-group-post-url',
'creation-timestamp',
'attachment:(image-url,content-domain,content-url,title,summary)',
'relation-to-viewer'
);
$request = join(',',$fields);
if($role !=""){
$params['url'] = "https://api.linkedin.com/v1/people/~/group-memberships/".$group_id."/posts:({$request})";
}else{
$params['url'] = "https://api.linkedin.com/v1/groups/".$group_id."/posts:({$request})";
}
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
if($order != '' )$params['args']['order']=$order;
if($category != '' )$params['args']['category']=$category;
if($role != '' )$params['args']['role']=$role;
$params['args']['ts']=time();
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompanyUpdates($company_id, $start=0,$count = 20){
if(!$company_id)return false;
$params['url'] = "https://api.linkedin.com/v1/companies/".$company_id."/updates";
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
$params['args']['order']='recency';
$params['args']['ts']=time();
$params['args']['event-type']='status-update';
$params['args']['twitter-post']='false';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
//returns as ARRAY, if chaning to object change in getGroupPostResponses
protected function getPostMeta($post_id){
$fields = array(
'id',
'site-group-post-url',
'creation-timestamp'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/posts/".$post_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroupPostResponses($post_id, $start = 0){
$fields = array(
'id',
'text',
'creator:(id,first-name,last-name,picture-url)',
'creation-timestamp'
);
$post_info = $this->getPostMeta($post_id);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/posts/".$post_id."/comments:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=500;
if($start != 0 )$params['args']['start']=$start;
$params['args']['order']='recency';
$content_return = $this->makeRequest($params);
$content_return = json_decode($content_return,true);
$content_return['siteGroupPostUrl'] = isset($post_info['siteGroupPostUrl']) ? $post_info['siteGroupPostUrl'] : '';
return $content_return;
}
public function getNetworkPostResponses($update_key){
$params['url'] = "https://api.linkedin.com/v1/people/~/network/updates/key=".$update_key."/update-comments";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompanyUpdateResponses($company_id,$update_id){
$params['url'] = "https://api.linkedin.com/v1/companies/".$company_id."/updates/key=".$update_id."/update-comments";
$params['method']='get';
$params['args']['format']='json';
$params['args']['event-type']='status-update';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function shareStatus($args=array()){
$params['url'] = 'https://api.linkedin.com/v1/people/~/shares';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json=array();
if(isset($args['comment']))
{
$json['comment'] = $args['comment'];
}
if(isset($args['title']) || isset($args['submitted-url']) || isset($args['submitted-image-url']) || isset($args['description']) ){
$json['content']=array();
if(isset($args['title'])){
$json['content']['title'] = $args['title'];
}
if(isset($args['submitted-url'])){
$json['content']['submitted-url'] = $args['submitted-url'];
}
if(isset($args['submitted-image-url'])){
$json['content']['submitted-image-url'] = $args['submitted-image-url'];
}
if(isset($args['description'])){
$json['content']['description'] = $args['description'];
}
}
$json['visibility']['code']='anyone';
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
// return: array('updateKey'=>'...','updateUrl'=>'...')
}
public function postToGroup($group_id,$title,$message,$content=array()){
$params['url'] = 'https://api.linkedin.com/v1/groups/'.$group_id.'/posts';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('title'=>$title,'summary'=>$message);
if(is_array($content) AND count($content)>0) {
// If the content of the post is specified (e.g., a link to a website), add it here
$json['content'] = array();
if(isset($content['title'])){
$json['content']['title'] = $content['title'];
}
if(isset($content['submitted-url'])){
$json['content']['submitted-url'] = $content['submitted-url'];
}
if(isset($content['submitted-image-url'])){
$json['content']['submitted-image-url'] = $content['submitted-image-url'];
}
if(isset($content['description'])){
$json['content']['description'] = $content['description'];
}
}
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function postToCompany($company_id,$message,$content=array())
{
$params['url'] = 'https://api.linkedin.com/v1/companies/'.$company_id.'/shares';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('comment'=>$message , 'visibility'=> array('code'=>'anyone'));
if(is_array($content) AND count($content)>0) {
// If the content of the post is specified (e.g., a link to a website), add it here
$json['content'] = array();
if(isset($content['title'])){
$json['content']['title'] = $content['title'];
}
if(isset($content['submitted-url'])){
$json['content']['submitted-url'] = $content['submitted-url'];
}
if(isset($content['submitted-image-url'])){
$json['content']['submitted-image-url'] = $content['submitted-image-url'];
}
if(isset($content['description'])){
$json['content']['description'] = $content['description'];
}
}
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function deleteFromGroup($post_id){
$params['url'] = 'https://api.linkedin.com/v1/posts/'.$post_id;
$params['method']='delete';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function commentToGroupPost($post_id,$response_text){
$params['url'] = 'https://api.linkedin.com/v1/posts/'.$post_id.'/comments';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('text'=>$response_text);
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function commentToNetworkPost($post_id,$response_text){
$params['url'] = 'https://api.linkedin.com/v1/people/~/network/updates/key='.$post_id.'/update-comments';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('comment'=>$response_text);
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
/**
* Set the access token manually
*
* @param string $token
* @throws \InvalidArgumentException
* @return \LinkedIn\LinkedIn
*/
public function setAccessToken($token)
{
$token = trim($token);
if (empty($token)) {
throw new \InvalidArgumentException('Invalid access token');
}
$this->access_token = $token;
return $this;
}
}
?>
######################LinkedIn.OAuth2.class.php#################
#######################OAuth2.class.php#########################
<?php
class OAuth2{
protected $access_token;
protected $access_token_url;
protected $authorize_url;
protected $access_token_name;
public $error;
function __construct($access_token=''){
$this->access_token = $access_token;
$this->error = "";
$this->access_token_name='access_token';
}
public function getAuthorizeUrl($client_id,$redirect_url, $additional_args=array() ){
$auth_link = $this->authorize_url.
"?response_type=code".
"&client_id=".$client_id.
"&redirect_uri=".urlencode($redirect_url);
foreach($additional_args as $k=>$v){
$auth_link.='&'.$k.'='.urlencode($v);
}
return $auth_link;
}
public function getAccessToken($client_id="", $secret="", $redirect_url="", $code = ""){
if($code==""){
$code = isset($_REQUEST['code'])?$_REQUEST['code']:"";
}
$params=array();
$params['url'] = $this->access_token_url;
$params['method']='post';
$params['args']=array( 'code'=>$code,
'client_id'=>$client_id,
'redirect_uri'=>$redirect_url,
'client_secret'=>$secret,
'grant_type'=>'authorization_code');
$result = $this->makeRequest($params);
return $result;
}
protected function makeRequest($params=array()){
$this->error = '';
$method=isset($params['method'])?$params['method']:'get';
$headers = isset($params['headers'])?$params['headers']:array();
$args = isset($params['args'])?$params['args']:'';
$url = $params['url'];
$url.='?';
if($this->access_token){
$url .= $this->access_token_name.'='.$this->access_token;
}
if($method=='get'){
$url.='&'.$this->preparePostFields($args);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if($method=='post'){
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->preparePostFields($args));
}elseif($method=='delete'){
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
}elseif($method=='put'){
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
}
if(is_array($headers) && !empty($headers)){
$headers_arr=array();
foreach($headers as $k=>$v){
$headers_arr[]=$k.': '.$v;
}
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers_arr);
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
protected function preparePostFields($array) {
if(is_array($array)){
$params = array();
foreach ($array as $key => $value) {
$params[] = $key . '=' . urlencode($value);
}
return implode('&', $params);
}else{
return $array;
}
}
}
?>
Step 3-> create a LinkedInconfig.php
#################Start Paste into config file############################
define("LINKEDIN_API_KEY", "XXXXXXX");
define("LINKEDIN_API_SECRETE_KEY", "XXXXXXXX");
define("LINKEDIN_CALLBACK_URL", "http://localhost/LinkedIn/test.php");
#################End Paste into config file###############################
Step 3-> create a file linkedin_app.php
##################Start####################################
<?php
require_once('config.php');
require_once('LinkedIn.OAuth2.class.php');
class LinkedIn
{
/**
* Function to get LinkedIn Authorize URL and access token
*/
function fnLinkedInConnect()
{
# Object of class
$ObjLinkedIn = new LinkedInOAuth2();
$strApiKey = LINKEDIN_API_KEY;
$strSecreteKey = LINKEDIN_API_SECRETE_KEY;
//put here your redirect url
$strRedirect_url = LINKEDIN_CALLBACK_URL;
$strCode = isset($_REQUEST['code']) ? $_REQUEST['code'] : '';
if ($strCode == "") {
try {
# Get LinkedIn Authorize URL
#If the user authorizes your application they will be redirected to the redirect_uri that you specified in your request .
$strGetAuthUrl = $ObjLinkedIn->getAuthorizeUrl($strApiKey, $strRedirect_url);
} catch (Exception $e) {
}
header("Location: ".$strGetAuthUrl);
exit;
}
# Get LinkedIn Access Token
/**
* Access token is unique to a user and an API Key. You need access tokens in order to make API calls to LinkedIn on behalf of the user who authorized your application.
* The value of parameter expires_in is the number of seconds from now that this access_token will expire in (5184000 seconds is 60 days).
* You should have a mechanism in your code to refresh the tokens before they expire in order to continue using the same access tokens.
*/
$arrAccess_token = $ObjLinkedIn->getAccessToken($strApiKey, $strSecreteKey, $strRedirect_url, $strCode);
$strAccess_token = $arrAccess_token["access_token"];
##########################store access token into database#############################
### insert into table (accessToken)value($strAccess_token);
}
###################get company page############################
function fnGetLinkedCompanyPages()
{
#############get access token from db####################
$strAccess_token = 'set access token from db';
# Object of class
$ObjLinkedin = new LinkedInOAuth2($strAccess_token);
# Get List of company pages
try {
$arrAdminCompany = $ObjLinkedin->getAdminCompanies();
} catch (Exception $e) {
}
$arrAdminCompanyValue = $arrAdminCompany["values"];
$intTotalCount = count($arrAdminCompany["_total"]);
$arrLinkedInPages = array();
$intCount = 0;
if (is_array($arrAdminCompanyValue) && count($arrAdminCompanyValue) > 0) {
foreach ($arrAdminCompanyValue as $arrAdminCompanyInfo) {
$intFlag = 0;
$arrLinkedInPages[$intCount]["id"] = (int) $arrAdminCompanyInfo["id"];
$arrLinkedInPages[$intCount]["name"] = stripslashes($arrAdminCompanyInfo["name"]);
}
}
return $arrLinkedInPages;
}
#########################share to linkedIn company page##############################
function postToCompanyPage($company_id)
{
#############get access token from db####################
$strAccess_token = 'set access token from db';
$message="this for testing Api Integration";
$content =array(
"title" =>'Sr Software Developer(php)',
"description" => 'Urgent opeing in Java Developer having 5+year exp at Veebrij Software pvt ltd',
"submitted-url" => 'http://www.test/orange-software-p-ltd-noida-urgently-looking-for-2--senior-back-end-developer-c-sql-net/811/jobview',
"submitted-image-url" => 'http://www.test/com/uploads/profileimage/recruiter/company_1460711697.jpg',
"visibility" => array(
"code" => "anyone"
)
);
$ObjLinkedin = new LinkedInOAuth2($strAccess_token);
try {
$arrResponse = $ObjLinkedin->postToCompany($company_id, $message,$content);
print_r($arrResponse);
exit;
// not post given error
if ($arrResponse['updateKey'] == "") {
$strErrorMessage = "SET ERROR MESSAGE";
}
} catch (Exception $e) {
}
}
#########################post to user wall################################
function fnPostMessage()
{
$strStatusMessage = "Sr Software engineer(Java) test";
$strAccess_token ='get access token from db';
# Object of class
$ObjLinkedin = new LinkedInOAuth2($strAccess_token);
$content =array(
"title" =>'Sr Software engineer(Java) testvvs',
"description" => 'Urgent opeing in Java Developer having 5+year exp at Veebrij Software pvt ltd',
"submitted-url" => 'http://www.test.com/orange-software-p-ltd-noida-urgently-looking-for-2--senior-back-end-developer-c-sql-net/811/jobview',
"submitted-image-url" => 'http://www.test.com/uploads/profileimage/recruiter/company_1460711697.jpg',
"visibility" => array(
"code" => "anyone"
)
);
try {
$strErrorMessage = '';
$arrResponse = $ObjLinkedin->shareStatus($content);
// not post given error
if ($arrResponse['updateKey'] == "") {
$strErrorMessage = "SET ERROR MESSAGE";
}
} catch (Exception $e) {
}
return $strErrorMessage;
}
}
####################### create output file LinkedsharePost.php###################
<?php
create out put final linkedin share page like LinkedsharePost.php
#Include necessary class files
require_once('linkedin_app.php');
$li = new LinkedIn();
$li->fnLinkedInConnect();
$linkedinpages = $li->fnGetLinkedCompanyPages();
##get company id from array################
print_r($linkedinpages);
$updatePostPage=$li->postToCompanyPage(PASS COMPANYID);
print_r($linkedinpages);
Finally we have done all of the step, hope it will help you. please comment if anyone face any difficulty.
I had lot of research for silent post into LinkedIn user wall and company page , finally I have integrated as custome the solution and and get long live access token of user/page from Linked to share their user wall/page wall.
Below are the step to post LinkedIn
Step1 -> Login to LinkedIn developer account create app
Step 2 -> Download LinkedIn API
#######################LinkedIn.OAuth2.class.php#################
<?php
require_once('OAuth2.class.php');
class LinkedInOAuth2 extends OAuth2 {
public function __construct($access_token=''){
$this->access_token_url = "https://www.linkedin.com/uas/oauth2/accessToken";
$this->authorize_url = "https://www.linkedin.com/uas/oauth2/authorization";
parent::__construct($access_token);
$this->access_token_name='oauth2_access_token';
}
public function getAuthorizeUrl($client_id,$redirect_url,$scope=''){
$additional_args = array();
if($scope!=''){
if(is_array($scope)){
$additional_args['scope']=implode(" ",$scope);
$additional_args['scope'] = $additional_args['scope'];
}else{
$additional_args['scope'] = $scope;
}
}
$additional_args['state'] = md5(time());
return parent::getAuthorizeUrl($client_id,$redirect_url,$additional_args);
}
public function getAccessToken($client_id="", $secret="", $redirect_url="", $code = ""){
$result = parent::getAccessToken($client_id, $secret, $redirect_url, $code);
$result = json_decode($result,true);
if(isset($result['error'])){
$this->error = $result['error'].' '.$result['error_description'];
return false;
}else{
$this->access_token = $result['access_token'];
return $result;
}
}
public function getProfile(){
$params=array();
$fields = array(
'current-status',
'id',
'picture-url',
'first-name',
'last-name',
'public-profile-url',
'num-connections',
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~:({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getUserProfile($user_id){
$params=array();
$fields = array(
'current-status',
'id',
'picture-url',
'first-name',
'last-name',
'public-profile-url',
'num-connections',
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/".$user_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getConnections(){
$params=array();
$params['url'] = "https://api.linkedin.com/v1/people/~/connections";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroups(){
$fields = array(
'group:(id,name)',
'membership-state',
'show-group-logo-in-profile',
'allow-messages-from-members',
'email-digest-frequency',
'email-announcements-from-managers',
'email-for-every-new-post'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~/group-memberships:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=200;
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroup($group_id=""){
if(!$group_id) return false;
$fields = array(
'id',
'small-logo-url',
'large-logo-url',
'name',
'short-description',
'description',
'site-group-url',
'num-members'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/groups/".$group_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompanies(){
$fields = array(
'id',
'name'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~:(first-name,positions:(company:({$request})))";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=100;
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompany($company_id=""){
if(!$company_id)return false;
$fields = array(
'id',
'name',
'website-url',
'square-logo-url',
'logo-url',
'blog-rss-url',
'description',
'num-followers'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/companies/".$company_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getAdminCompanies(){
$fields = array(
'id',
'name'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/companies:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=100;
$params['args']['is-company-admin']='true';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getFollowedCompanies(){
$fields = array(
'id',
'name'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/people/~/following/companies:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=200;
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getStatuses($self = false, $start=0,$count = 20){
$params['url'] = "https://api.linkedin.com/v1/people/~/network/updates";
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
if($self){
$params['args']['scope']='self';
}
$params['args']['type']='SHAR';
$params['args']['order']='recency';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getUserStatuses($user_id, $self = true, $start=0,$count = 20){
$params['url'] = "https://api.linkedin.com/v1/people/id=".$user_id."/network/updates";
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
if($self){
$params['args']['scope']='self';
}
$params['args']['type']='SHAR';
$params['args']['order']='recency';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroupPosts($group_id, $start=0,$count = 20, $order="", $category="",$role=""){
$fields = array(
'id',
'creator:(id,first-name,last-name,picture-url,headline)',
'title',
'summary',
'likes',
'comments',
'site-group-post-url',
'creation-timestamp',
'attachment:(image-url,content-domain,content-url,title,summary)',
'relation-to-viewer'
);
$request = join(',',$fields);
if($role !=""){
$params['url'] = "https://api.linkedin.com/v1/people/~/group-memberships/".$group_id."/posts:({$request})";
}else{
$params['url'] = "https://api.linkedin.com/v1/groups/".$group_id."/posts:({$request})";
}
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
if($order != '' )$params['args']['order']=$order;
if($category != '' )$params['args']['category']=$category;
if($role != '' )$params['args']['role']=$role;
$params['args']['ts']=time();
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompanyUpdates($company_id, $start=0,$count = 20){
if(!$company_id)return false;
$params['url'] = "https://api.linkedin.com/v1/companies/".$company_id."/updates";
$params['method']='get';
$params['args']['format']='json';
if($start != 0 )$params['args']['start']=$start;
if($count != 0 )$params['args']['count']=$count;
$params['args']['order']='recency';
$params['args']['ts']=time();
$params['args']['event-type']='status-update';
$params['args']['twitter-post']='false';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
//returns as ARRAY, if chaning to object change in getGroupPostResponses
protected function getPostMeta($post_id){
$fields = array(
'id',
'site-group-post-url',
'creation-timestamp'
);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/posts/".$post_id.":({$request})";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getGroupPostResponses($post_id, $start = 0){
$fields = array(
'id',
'text',
'creator:(id,first-name,last-name,picture-url)',
'creation-timestamp'
);
$post_info = $this->getPostMeta($post_id);
$request = join(',',$fields);
$params['url'] = "https://api.linkedin.com/v1/posts/".$post_id."/comments:({$request})";
$params['method']='get';
$params['args']['format']='json';
$params['args']['count']=500;
if($start != 0 )$params['args']['start']=$start;
$params['args']['order']='recency';
$content_return = $this->makeRequest($params);
$content_return = json_decode($content_return,true);
$content_return['siteGroupPostUrl'] = isset($post_info['siteGroupPostUrl']) ? $post_info['siteGroupPostUrl'] : '';
return $content_return;
}
public function getNetworkPostResponses($update_key){
$params['url'] = "https://api.linkedin.com/v1/people/~/network/updates/key=".$update_key."/update-comments";
$params['method']='get';
$params['args']['format']='json';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function getCompanyUpdateResponses($company_id,$update_id){
$params['url'] = "https://api.linkedin.com/v1/companies/".$company_id."/updates/key=".$update_id."/update-comments";
$params['method']='get';
$params['args']['format']='json';
$params['args']['event-type']='status-update';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function shareStatus($args=array()){
$params['url'] = 'https://api.linkedin.com/v1/people/~/shares';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json=array();
if(isset($args['comment']))
{
$json['comment'] = $args['comment'];
}
if(isset($args['title']) || isset($args['submitted-url']) || isset($args['submitted-image-url']) || isset($args['description']) ){
$json['content']=array();
if(isset($args['title'])){
$json['content']['title'] = $args['title'];
}
if(isset($args['submitted-url'])){
$json['content']['submitted-url'] = $args['submitted-url'];
}
if(isset($args['submitted-image-url'])){
$json['content']['submitted-image-url'] = $args['submitted-image-url'];
}
if(isset($args['description'])){
$json['content']['description'] = $args['description'];
}
}
$json['visibility']['code']='anyone';
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
// return: array('updateKey'=>'...','updateUrl'=>'...')
}
public function postToGroup($group_id,$title,$message,$content=array()){
$params['url'] = 'https://api.linkedin.com/v1/groups/'.$group_id.'/posts';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('title'=>$title,'summary'=>$message);
if(is_array($content) AND count($content)>0) {
// If the content of the post is specified (e.g., a link to a website), add it here
$json['content'] = array();
if(isset($content['title'])){
$json['content']['title'] = $content['title'];
}
if(isset($content['submitted-url'])){
$json['content']['submitted-url'] = $content['submitted-url'];
}
if(isset($content['submitted-image-url'])){
$json['content']['submitted-image-url'] = $content['submitted-image-url'];
}
if(isset($content['description'])){
$json['content']['description'] = $content['description'];
}
}
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function postToCompany($company_id,$message,$content=array())
{
$params['url'] = 'https://api.linkedin.com/v1/companies/'.$company_id.'/shares';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('comment'=>$message , 'visibility'=> array('code'=>'anyone'));
if(is_array($content) AND count($content)>0) {
// If the content of the post is specified (e.g., a link to a website), add it here
$json['content'] = array();
if(isset($content['title'])){
$json['content']['title'] = $content['title'];
}
if(isset($content['submitted-url'])){
$json['content']['submitted-url'] = $content['submitted-url'];
}
if(isset($content['submitted-image-url'])){
$json['content']['submitted-image-url'] = $content['submitted-image-url'];
}
if(isset($content['description'])){
$json['content']['description'] = $content['description'];
}
}
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function deleteFromGroup($post_id){
$params['url'] = 'https://api.linkedin.com/v1/posts/'.$post_id;
$params['method']='delete';
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function commentToGroupPost($post_id,$response_text){
$params['url'] = 'https://api.linkedin.com/v1/posts/'.$post_id.'/comments';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('text'=>$response_text);
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
public function commentToNetworkPost($post_id,$response_text){
$params['url'] = 'https://api.linkedin.com/v1/people/~/network/updates/key='.$post_id.'/update-comments';
$params['method']='post';
$params['headers']['Content-Type']='application/json';
$params['headers']['x-li-format']='json';
$json = array('comment'=>$response_text);
$params['args']=json_encode($json);
$result = $this->makeRequest($params);
return json_decode($result,true);
}
/**
* Set the access token manually
*
* @param string $token
* @throws \InvalidArgumentException
* @return \LinkedIn\LinkedIn
*/
public function setAccessToken($token)
{
$token = trim($token);
if (empty($token)) {
throw new \InvalidArgumentException('Invalid access token');
}
$this->access_token = $token;
return $this;
}
}
?>
######################LinkedIn.OAuth2.class.php#################
#######################OAuth2.class.php#########################
<?php
class OAuth2{
protected $access_token;
protected $access_token_url;
protected $authorize_url;
protected $access_token_name;
public $error;
function __construct($access_token=''){
$this->access_token = $access_token;
$this->error = "";
$this->access_token_name='access_token';
}
public function getAuthorizeUrl($client_id,$redirect_url, $additional_args=array() ){
$auth_link = $this->authorize_url.
"?response_type=code".
"&client_id=".$client_id.
"&redirect_uri=".urlencode($redirect_url);
foreach($additional_args as $k=>$v){
$auth_link.='&'.$k.'='.urlencode($v);
}
return $auth_link;
}
public function getAccessToken($client_id="", $secret="", $redirect_url="", $code = ""){
if($code==""){
$code = isset($_REQUEST['code'])?$_REQUEST['code']:"";
}
$params=array();
$params['url'] = $this->access_token_url;
$params['method']='post';
$params['args']=array( 'code'=>$code,
'client_id'=>$client_id,
'redirect_uri'=>$redirect_url,
'client_secret'=>$secret,
'grant_type'=>'authorization_code');
$result = $this->makeRequest($params);
return $result;
}
protected function makeRequest($params=array()){
$this->error = '';
$method=isset($params['method'])?$params['method']:'get';
$headers = isset($params['headers'])?$params['headers']:array();
$args = isset($params['args'])?$params['args']:'';
$url = $params['url'];
$url.='?';
if($this->access_token){
$url .= $this->access_token_name.'='.$this->access_token;
}
if($method=='get'){
$url.='&'.$this->preparePostFields($args);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if($method=='post'){
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->preparePostFields($args));
}elseif($method=='delete'){
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
}elseif($method=='put'){
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
}
if(is_array($headers) && !empty($headers)){
$headers_arr=array();
foreach($headers as $k=>$v){
$headers_arr[]=$k.': '.$v;
}
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers_arr);
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
protected function preparePostFields($array) {
if(is_array($array)){
$params = array();
foreach ($array as $key => $value) {
$params[] = $key . '=' . urlencode($value);
}
return implode('&', $params);
}else{
return $array;
}
}
}
?>
######################OAuth2.class.php#########################
Step 3-> create a LinkedInconfig.php
#################Start Paste into config file############################
define("LINKEDIN_API_KEY", "XXXXXXX");
define("LINKEDIN_API_SECRETE_KEY", "XXXXXXXX");
define("LINKEDIN_CALLBACK_URL", "http://localhost/LinkedIn/test.php");
#################End Paste into config file###############################
Step 3-> create a file linkedin_app.php
##################Start####################################
<?php
require_once('config.php');
require_once('LinkedIn.OAuth2.class.php');
class LinkedIn
{
/**
* Function to get LinkedIn Authorize URL and access token
*/
function fnLinkedInConnect()
{
# Object of class
$ObjLinkedIn = new LinkedInOAuth2();
$strApiKey = LINKEDIN_API_KEY;
$strSecreteKey = LINKEDIN_API_SECRETE_KEY;
//put here your redirect url
$strRedirect_url = LINKEDIN_CALLBACK_URL;
$strCode = isset($_REQUEST['code']) ? $_REQUEST['code'] : '';
if ($strCode == "") {
try {
# Get LinkedIn Authorize URL
#If the user authorizes your application they will be redirected to the redirect_uri that you specified in your request .
$strGetAuthUrl = $ObjLinkedIn->getAuthorizeUrl($strApiKey, $strRedirect_url);
} catch (Exception $e) {
}
header("Location: ".$strGetAuthUrl);
exit;
}
# Get LinkedIn Access Token
/**
* Access token is unique to a user and an API Key. You need access tokens in order to make API calls to LinkedIn on behalf of the user who authorized your application.
* The value of parameter expires_in is the number of seconds from now that this access_token will expire in (5184000 seconds is 60 days).
* You should have a mechanism in your code to refresh the tokens before they expire in order to continue using the same access tokens.
*/
$arrAccess_token = $ObjLinkedIn->getAccessToken($strApiKey, $strSecreteKey, $strRedirect_url, $strCode);
$strAccess_token = $arrAccess_token["access_token"];
##########################store access token into database#############################
### insert into table (accessToken)value($strAccess_token);
}
###################get company page############################
function fnGetLinkedCompanyPages()
{
#############get access token from db####################
$strAccess_token = 'set access token from db';
# Object of class
$ObjLinkedin = new LinkedInOAuth2($strAccess_token);
# Get List of company pages
try {
$arrAdminCompany = $ObjLinkedin->getAdminCompanies();
} catch (Exception $e) {
}
$arrAdminCompanyValue = $arrAdminCompany["values"];
$intTotalCount = count($arrAdminCompany["_total"]);
$arrLinkedInPages = array();
$intCount = 0;
if (is_array($arrAdminCompanyValue) && count($arrAdminCompanyValue) > 0) {
foreach ($arrAdminCompanyValue as $arrAdminCompanyInfo) {
$intFlag = 0;
$arrLinkedInPages[$intCount]["id"] = (int) $arrAdminCompanyInfo["id"];
$arrLinkedInPages[$intCount]["name"] = stripslashes($arrAdminCompanyInfo["name"]);
}
}
return $arrLinkedInPages;
}
#########################share to linkedIn company page##############################
function postToCompanyPage($company_id)
{
#############get access token from db####################
$strAccess_token = 'set access token from db';
$message="this for testing Api Integration";
$content =array(
"title" =>'Sr Software Developer(php)',
"description" => 'Urgent opeing in Java Developer having 5+year exp at Veebrij Software pvt ltd',
"submitted-url" => 'http://www.test/orange-software-p-ltd-noida-urgently-looking-for-2--senior-back-end-developer-c-sql-net/811/jobview',
"submitted-image-url" => 'http://www.test/com/uploads/profileimage/recruiter/company_1460711697.jpg',
"visibility" => array(
"code" => "anyone"
)
);
$ObjLinkedin = new LinkedInOAuth2($strAccess_token);
try {
$arrResponse = $ObjLinkedin->postToCompany($company_id, $message,$content);
print_r($arrResponse);
exit;
// not post given error
if ($arrResponse['updateKey'] == "") {
$strErrorMessage = "SET ERROR MESSAGE";
}
} catch (Exception $e) {
}
}
#########################post to user wall################################
function fnPostMessage()
{
$strStatusMessage = "Sr Software engineer(Java) test";
$strAccess_token ='get access token from db';
# Object of class
$ObjLinkedin = new LinkedInOAuth2($strAccess_token);
$content =array(
"title" =>'Sr Software engineer(Java) testvvs',
"description" => 'Urgent opeing in Java Developer having 5+year exp at Veebrij Software pvt ltd',
"submitted-url" => 'http://www.test.com/orange-software-p-ltd-noida-urgently-looking-for-2--senior-back-end-developer-c-sql-net/811/jobview',
"submitted-image-url" => 'http://www.test.com/uploads/profileimage/recruiter/company_1460711697.jpg',
"visibility" => array(
"code" => "anyone"
)
);
try {
$strErrorMessage = '';
$arrResponse = $ObjLinkedin->shareStatus($content);
// not post given error
if ($arrResponse['updateKey'] == "") {
$strErrorMessage = "SET ERROR MESSAGE";
}
} catch (Exception $e) {
}
return $strErrorMessage;
}
}
####################### create output file LinkedsharePost.php###################
<?php
create out put final linkedin share page like LinkedsharePost.php
#Include necessary class files
require_once('linkedin_app.php');
$li = new LinkedIn();
$li->fnLinkedInConnect();
$linkedinpages = $li->fnGetLinkedCompanyPages();
##get company id from array################
print_r($linkedinpages);
$updatePostPage=$li->postToCompanyPage(PASS COMPANYID);
print_r($linkedinpages);
Finally we have done all of the step, hope it will help you. please comment if anyone face any difficulty.