How can I post on LinkedIn with image in my profile? I have managed to upload a text post, but I need the solution for image post.
Here is the code snippet which I am using for text post,
$post_url = "https://api.linkedin.com/v2/ugcPosts";
$post_headers = [
"Authorization: Bearer $access_token",
"Content-Type: application/json",
];
$post_data = [
"author" => "urn:li:person:$person_urn",
"lifecycleState" => "PUBLISHED",
"specificContent" => [
"com.linkedin.ugc.ShareContent" => [
"shareCommentary" => [
"text" => "My post content...",
],
"shareMediaCategory" => "TEXT"
],
],
"visibility" => [
"com.linkedin.ugc.MemberNetworkVisibility" => "PUBLIC",
],
];
$post_response = publishPost($post_url, json_encode($post_data),
$post_headers);
To post with an image you have to upload the image first and get the asset from LinkedIn. Call the below API for that,
$upload_url = "https://api.linkedin.com/v2/assets?action=registerUpload";
$upload_headers = [
"Authorization: Bearer $access_token",
"Content-Type: application/json",
];
$upload_data = [
"registerUploadRequest" => [
"owner" => "urn:li:person:$person_urn",
"recipes" => ["urn:li:digitalmediaRecipe:feedshare-image"],
"serviceRelationships" => [
[
"identifier" => "urn:li:userGeneratedContent",
"relationshipType" => "OWNER",
],
],
"supportedUploadMechanism" => ["SYNCHRONOUS_UPLOAD"],
],
];
$upload_response = sendCurlRequest($upload_url,
json_encode($upload_data), $upload_headers);
$upload_response = json_decode($upload_response, true);
if (empty($upload_response["value"]["uploadMechanism"].
["com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest"].
["uploadUrl"])) {
die("Failed to register upload.");
}
$image_upload_url = $upload_response["value"]["uploadMechanism"].
["com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest"].
["uploadUrl"];
$asset = $upload_response["value"]["asset"]; // LinkedIn's asset URL
Upload the Image Binary:
$image_headers = [
"Authorization: Bearer $access_token",
"Content-Type: application/octet-stream",
];
$image_binary = file_get_contents('your_image.jpg'); // Read your image file
callCurlRequest($image_upload_url, $image_binary, $image_headers, true);
Now you can publish the Post with that Image, use the asset URL obtained earlier to attach the image to the post.
$post_url = "https://api.linkedin.com/v2/ugcPosts";
$post_headers = [
"Authorization: Bearer $access_token",
"Content-Type: application/json",
];
$post_data = [
"author" => "urn:li:person:$person_urn",
"lifecycleState" => "PUBLISHED",
"specificContent" => [
"com.linkedin.ugc.ShareContent" => [
"shareCommentary" => [
"text" => "Your post content with image...",
],
"shareMediaCategory" => "IMAGE",
"media" => [
[
"status" => "READY",
"description" => [
"text" => "Image description...",
],
"media" => $asset,
"title" => [
"text" => "Shared via My App",
],
],
],
],
],
"visibility" => [
"com.linkedin.ugc.MemberNetworkVisibility" => "PUBLIC",
],
];
$post_response = sendCurlRequest($post_url, json_encode($post_data),
$post_headers);