如何通过LinkedIn API获取PDF上传URL并发布带附件的帖子
如何通过LinkedIn API上传PDF作为帖子附件
问题背景
我正在开发一款自动在LinkedIn发布帖子的应用,目前已支持:
- 带图/不带图的帖子发布
- 发布引用外部可访问URL的文档
现在需要实现将PDF上传至LinkedIn自身存储并作为附件发布的功能,但调用Assets API获取上传URL时遇到错误。
失败的API调用尝试
请求地址:
https://api.linkedin.com/v2/assets?action=registerUpload&oauth2_access_token=MY_TOKEN
错误响应:
{ "serviceErrorCode": 100, "message": "Field Value validation failed in REQUEST_BODY: Data Processing Exception while processing fields [/registerUploadRequest/recipes/relationshipType]", "status": 403 }
解决方法
1. 正确构造Assets API请求
之前的请求缺少必要的请求体参数,LinkedIn的registerUpload动作需要明确指定资源类型、关联关系等关键信息。针对PDF附件,正确的POST请求体如下:
{ "registerUploadRequest": { "owner": "urn:li:person:YOUR_PERSON_URN", // 替换为你的个人URN(格式如urn:li:person:abc123) "recipes": [ "urn:li:digitalmediaRecipe:feed-document" // 指定为文档类型的上传规则 ], "serviceRelationships": [ { "relationshipType": "OWNER", "identifier": "urn:li:userGeneratedContent" } ], "supportedUploadMechanism": [ "SYNCHRONOUS_UPLOAD" ] } }
关键注意点:
owner必须是你的个人或企业页面的URN,可通过https://api.linkedin.com/v2/me接口获取个人URNrecipes使用feed-document对应帖子附件的文档类型,这是和图片上传(用feed-image)的核心区别serviceRelationships中的relationshipType必须设为OWNER,identifier固定为urn:li:userGeneratedContent,这是之前报错缺失的必填参数
2. 获取上传URL并上传PDF
发送上述POST请求后,会收到包含上传URL的响应:
{ "value": { "uploadMechanism": { "com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest": { "headers": {}, "uploadUrl": "UPLOAD_URL_PROVIDED_BY_LINKEDIN" } }, "asset": "urn:li:digitalmediaAsset:ABC123XYZ" // 后续发布帖子需要用到这个Asset URN } }
使用得到的uploadUrl,发送PUT请求上传你的PDF文件:
- 请求体为PDF二进制数据
- 请求头
Content-Type设为application/pdf
3. 发布带PDF附件的帖子
上传完成后,使用返回的asset URN作为附件,调用帖子发布API(https://api.linkedin.com/v2/ugcPosts),请求体示例:
{ "author": "urn:li:person:YOUR_PERSON_URN", "lifecycleState": "PUBLISHED", "specificContent": { "com.linkedin.ugc.ShareContent": { "shareCommentary": { "text": "这是带PDF附件的测试帖子" }, "shareMediaCategory": "DOCUMENT", "media": [ { "status": "READY", "description": { "text": "PDF附件描述" }, "media": "urn:li:digitalmediaAsset:ABC123XYZ", "title": { "text": "PDF附件标题" } } ] } }, "visibility": { "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC" } }
内容的提问来源于stack exchange,提问作者Manuvai
相关产品推荐
相关产品推荐

