Php 使用LinkedIn V2 API上传视频
我正在尝试使用LinkedIn API V2上传视频,但无法将视频成功发布到我的LinkedIn个人帐户。 请帮忙 从LinkedIn API返回以下响应: 签名不匹配 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法 我需要将视频帖子成功上传到LinkedIn帐户,但我也无法从LinkedIn文档中理解这一点。我试了这么多,但没有成功。Php 使用LinkedIn V2 API上传视频,php,api,post,linkedin,linkedin-api,Php,Api,Post,Linkedin,Linkedin Api,我正在尝试使用LinkedIn API V2上传视频,但无法将视频成功发布到我的LinkedIn个人帐户。 请帮忙 从LinkedIn API返回以下响应: 签名不匹配 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法 我需要将视频帖子成功上传到LinkedIn帐户,但我也无法从LinkedIn文档中理解这一点。我试了这么多,但没有成功。 请已成功使用V2上传视频的用户提供帮助。嗨,linkedin尚未发布视频上传。您可以使用文章EP(“shareMediaCategory”:“文
请已成功使用V2上传视频的用户提供帮助。嗨,linkedin尚未发布视频上传。您可以使用文章EP(“shareMediaCategory”:“文章”)将视频发送到linkedin我使用来执行客户端发布请求,但这超出了问题的范围 因为我无法让php curl函数正常工作,所以我使用命令行界面来执行请求,它可以正常工作!请参阅下面的代码 但是。即使是艰难的上传工作。当我请求获取上传状态时,它仍然是“等待上传”。所以我认为@augustine jenin是对的,它还没有得到支持。(2019年5月)
我现在面临同样的问题,我得到了解决方案。正在研究,你找到了什么解决方案@AlainVanderbroeckSee我的答案是你问题的解决方案。但LinkedIn还不支持视频上传。因此,当LinkedIn支持视频时,我的代码将起作用。有关解决方法,请参阅Augustine的答案,直到LinkedIn支持视频上传Hi Augustine。为什么LinkedIn有相关文档,但它还不受支持?你确定不支持视频上传吗?你怎么知道的?我在某处读过,但不记得链接。我也在搜索视频上传。现在我使用文章发布。因此我将生成视频的动态页面。这样它将预览视频。我们应该生成相应视频的图像。你也可以检查缓冲区来检查这个。好的,谢谢你的回答。我当然相信你,因为我的POC不起作用。LinkedIn指的是API支持的堆栈溢出。但是没有人打电话告诉我它肯定不起作用,显然也没有人知道它什么时候起作用。我认为这不是应该的方式。我对此感到沮丧。你提到的解决方案当然有效。这是一个很好的选择。@Alain good to Hearn.Reffre使用此url生成视频的动态页面。您是否获得管理公司页面发布的权限?
$person_id=LINKEDIN_ACCOUNT_ID;
$access_token= LINKEDIN_ACCESS_TOKEN;
$share_text='Video Upload and Share Text';
$author = "urn:li:person:".$person_id;
$r_url='https://api.linkedin.com/v2/assets?action=registerUpload';
$r_params = array(
'registerUploadRequest'=>array(
'recipes'=>array('urn:li:digitalmediaRecipe:feedshare-video'),
'owner' => $author,
)
);
$handle = curl_init();
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($handle, CURLOPT_URL, $r_url);
curl_setopt($handle, CURLOPT_VERBOSE, FALSE);
$header = array();
$header[] ='Authorization : Bearer '.$access_token;
$header[] = 'Content-Type: application/json; charset=UTF-8';
curl_setopt($handle, CURLOPT_HTTPHEADER, $header);
curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($r_params));
$json1 = curl_exec($handle);
$json1=json_decode($json1,true);
if($json1['value']['uploadMechanism']['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest']['uploadUrl']){
$target_url=$json1['value']['uploadMechanism']['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest']['uploadUrl'];
$return_header=$json1['value']['uploadMechanism']['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest']['headers'];
$parts = parse_url($target_url);
parse_str($parts['query'], $query);
$amz_signature=$query['X-Amz-Signature'];
$target_header=array();
$target_header[]='Host: video-uploads-prod.s3-accelerate.amazonaws.com';
$target_header[]="Content-Type:".trim($return_header['Content-Type']);
$target_header[]="x-amz-server-side-encryption:".trim($return_header['x-amz-server-side-encryption']);
$target_header[]='x-amz-server-side-encryption-aws-kms-key-id:'.trim($return_header['x-amz-server-side-encryption-aws-kms-key-id']);
$video_path = DIR_PATH_TO_VIDEO_FILE.'example_video.mp4';
$post_data=array('file'=>$video_path);
$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, $target_header);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($video_path));
$json2=curl_exec ($ch);
curl_close ($ch);
$json2=json_decode($json2,true);
$media_id=str_replace('urn:li:digitalmediaAsset:','', $json1['value']['asset']);
$return_data=array();
$check_url = 'https://api.linkedin.com/v2/assets/'.$media_id;
$handle = curl_init();
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($handle, CURLOPT_HEADER, FALSE);
curl_setopt($handle, CURLOPT_URL, $check_url);
$header = array();
$header[] ='Authorization : Bearer '.$access_token;
$header[] = 'Content-Type: application/json; charset=UTF-8';
curl_setopt($handle, CURLOPT_HTTPHEADER,$header);
$return_data= curl_exec($handle);
$return_data= json_decode($return_data,true);
$author = "urn:li:person:".$person_id;
$post_url = 'https://api.linkedin.com/v2/ugcPosts';
$media_data=array();
$media_data[0]=array(
'status'=>'READY',
'description'=>array('text'=>'Official LinkedIn Blog'),
'media'=>$media_id,
'title'=>array('text'=>"Official LinkedIn Blog"),
);
$params = array(
'author' => $author,
'lifecycleState' => 'PUBLISHED',
'specificContent' => array(
'com.linkedin.ugc.ShareContent' => array(
'shareCommentary' => array(
'text' => "Video media set in post",
),
'shareMediaCategory' => 'VIDEO',
'media'=>$media_data,
'originalUrl'=>'https://www.google.com'
)
),
'visibility' => array(
'com.linkedin.ugc.MemberNetworkVisibility' => 'PUBLIC'
)
);
$handle = curl_init();
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($handle, CURLOPT_URL, $post_url);
curl_setopt($handle, CURLOPT_VERBOSE, FALSE);
curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($params));
$header = array();
$header[] ='Authorization : Bearer '.$access_token;
$header[] = 'Content-Type: application/json; charset=UTF-8';
$header[] = 'X-Restli-Protocol-Version:2.0.0';
curl_setopt($handle, CURLOPT_HTTPHEADER, $header);
$json3 = curl_exec($handle);
$json3=json_decode($json3);