文档here的步骤2中引用了此调用
我正在关注文档,以通过第2版API在LinkedIn中创建图像和文本共享。按照文档中的步骤,我成功完成了每个步骤。但是,我的帖子在LinkedIn中不存在,并且无法基于API请求返回的ID通过直接链接查看
在调试中,我向https://api.linkedin.com/v2/assets/C5622AQFbyxMfU2b9zg发出了get请求。这是为了检索在第一步中创建的媒体资产(文档here)。它返回状态为“ CLIENT_ERROR”的以下json。不过,如果您查看文档,则此状态不是该字段列出的状态之一
{
"serviceRelationships": [
{
"identifier": "urn:li:userGeneratedContent",
"relationshipType": "OWNER"
}
],
"recipes": [
{
"recipe": "urn:li:digitalmediaRecipe:feedshare-image",
"status": "CLIENT_ERROR"
}
],
"mediaTypeFamily": "STILLIMAGE",
"created": 1550875198973,
"lastModified": 1550875199857,
"id": "C5622AQFbyxMfU2b9zg",
"status": "ALLOWED"
}
我能够使用命令行curl成功上传文件。看来问题出在我的PHP实现上。具体来说,二进制文件的上传无法正常进行。这是我的php代码的简化表示。
$ch = curl_init();
$headers = [
'Authorization: Bearer ' . $this->accessToken->access_token,
'Cache-Control: no-cache',
'X-RestLi-Protocol-Version: 2.0.0',
'x-li-format: json',
'Content-Type: ' . $this->mimetype
];
$data = [
'file' => curl_file_create($filename, $this->mimetype);
];
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_URL, 'https://api.linkedin.com/mediaUpload/C5622AQHSLBWkZeg-gQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJIFvVUxXl7yAAAAWkwjT0kEPKHY5BnAgXETcVQ3AbsxmvaGl6hnuECwA&app=22961836&sync=0&v=beta&ut=2RaKRdHD_OwUE1');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
print_r($result);
答案 0 :(得分:0)
我最近也遇到过同样的问题,linkedin的文档不是很有帮助。 Create an Image Share。
首先要了解的是,“ curl --upload-file”使用PUT请求方法。这是我使用伪数据的方式。
$file = "/storage/media/testimg.jpg";
$uploadurl = "https://api.linkedin.com/mediaUpload/C5622AQHSLBWkZeg-gQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJIFvVUxXl7yAAAAWkwjT0kEPKHY5BnAgXETcVQ3AbsxmvaGl6hnuECwA&app=22961836&sync=0&v=beta&ut=2RaKRdHD_OwUE1";
$accesstoken = "acacdsv13rv31bv13b1cf13cf13rv13rv13vr13tb5dxvghn";
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $uploadurl);
curl_setopt($curl_handle, CURLOPT_PUT, 1);
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "PUT");
$fh_res = fopen($file, 'r');
curl_setopt($curl_handle, CURLOPT_INFILE, $fh_res);
curl_setopt($curl_handle, CURLOPT_INFILESIZE, filesize($file));
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$headers[] = "Authorization: Bearer $accesstoken"; //linkedin says to add 'redacted' instead of access token (that's bullshit)
$headers[] = 'Connection: Keep-Alive';
$headers[] = "X-RestLi-Protocol-Version:2.0.0";
curl_setopt($curl_handle,CURLOPT_HTTPHEADER,$headers);
$rcurl = curl_exec($curl_handle);
curl_close($curl_handle);
如果转储响应$rcurl
,则只会得到一个空字符串。因此,下一步就是检查上传状态,他们完全忘记了这些内容作为图像共享文档的一部分,但是可以在Check Status of Uphold
使用来自初始图像注册调用的资产变量,您检查上传的状态,直到状态检查返回AVAILABLE
。
$asset = "urn:li:digitalmediaAsset:C4asdfvqqrv3";
$a = explode("digitalmediaAsset:", $asset);
$statuscheck = make a GET curl call to the url: "/assets/" . $a[1]
$uploadstat = $statuscheck['recipes'][0]['status'];
do{
$statuscheck = make a GET curl call to the url: "/assets/" . $a[1];
$uploadstat = $statuscheck['recipes'][0]['status'];
}while($uploadstat != 'AVAILABLE');
一旦返回AVAILABLE
,您现在就可以继续创建图像共享的下一步。希望这可以帮助。