Pinterest视频media_id状态为succeeded,创建Pin却提示未上传的问题
Pinterest视频上传状态显示成功,但创建Pin时报media_id未上传的问题
问题重现
- 调用媒体状态查询接口返回成功:
const checkUploadStatusRes = await fetch( `https://api.pinterest.com/v5/media/${registerMediaUploadResponse.media_id}`, { method: "GET", headers: { Authorization: `Bearer ${input.accessToken}`, }, }, );
返回结果:
{ "media_id": "12345", "media_type": "video", "status": "succeeded" }
- 创建Pin时使用以下
media_source参数:
media_source: { source_type: "video_id", cover_image_url: input.imageUrls[0], media_id: mediaId, }
收到错误:
{"code":1,"message":"The media_id you are trying to use has not been uploaded.","details":{"method":17,"param_name":"media_id"}}
可能的原因及解决办法
1. media_id变量传递错误
确认创建Pin时使用的mediaId和查询状态时的registerMediaUploadResponse.media_id是完全一致的字符串,避免变量赋值、拼写错误或异步逻辑导致的变量不匹配。建议直接使用状态查询返回的media_id,跳过中间变量传递:
// 获取状态后直接用返回的media_id const statusData = await checkUploadStatusRes.json(); if (statusData.status === "succeeded") { // 创建Pin时用statusData.media_id media_source: { source_type: "video_id", cover_image_url: input.imageUrls[0], media_id: statusData.media_id, } }
2. 视频后台处理延迟
虽然接口返回status: succeeded,Pinterest可能仍在后台完成视频的最终转码或校验,此时media_id尚未完全可用。可以在获取成功状态后增加一段等待时间再创建Pin:
const statusData = await checkUploadStatusRes.json(); if (statusData.status === "succeeded") { // 等待5-10秒,给后台处理留时间 await new Promise(resolve => setTimeout(resolve, 5000)); // 发起创建Pin请求 }
3. cover_image_url不可访问
Pinterest需要能公开访问封面图URL,确保input.imageUrls[0]是HTTPS协议、无权限限制的公开链接,否则可能触发media_id验证失败的错误(错误信息可能不准确)。
4. API权限不足
确认你的access_token已授予pins:write和media:write权限,权限缺失可能导致系统拒绝使用已上传的media_id创建Pin。可以在Pinterest开发者后台的应用权限设置中检查权限范围。
内容的提问来源于stack exchange,提问作者Nihir
相关产品推荐
相关产品推荐

