curl Youtube API插入视频返回INVALID_ARGUMENT

xmq68pz9  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(162)

我正在尝试使用youtube api,让用户上传我正在制作的网站上的视频。
这是我发送的请求(目前几乎与文档中的示例完全相同):

curl --request POST 'https://www.googleapis.com/youtube/v3/videos?part=snippet%2Cstatus&key=[MY-API-KEY]' \
  -H 'authorization: Bearer [THE-USERS-ACCESS-TOKEN]' \
  -H 'accept: application/json' \
  -H 'content-type: application/json' \
  -H 'origin: http://localhost:1234' \
  --data-raw '{"snippet":{"categoryId":"22","description":"Description of uploaded video.","title":"Test video upload."},"status":{"privacyStatus":"private"}}' \
  --compressed

响应是一个缺少一些细节的错误:

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "errors": [
      {
        "message": "Request contains an invalid argument.",
        "domain": "global",
        "reason": "badRequest"
      }
    ],
    "status": "INVALID_ARGUMENT"
  }
}

我相信我的api密钥和凭据是可以的,因为我已经用其他方法(需要用户凭据)测试过它们,它们工作正常。
documentation并不清楚在哪里放置实际的视频文件的字节。我希望该方法返回一个可恢复的上传URL,但文档对此只字未提。它声明Accepted Media MIME类型为**video/application/octet-stream*,但还声明您应该在请求正文中提供一个视频资源。并且所有示例都显示了json主体和内容类型...
这种方法应该如何工作?

fhg3lkii

fhg3lkii1#

我相信你的目标如下。

  • 您想要使用YouTube API以可恢复的上传方式上传视频文件。
  • 您需要使用curl命令来实现此目的。

在这种情况下,下面的curl命令示例如何?
为了使用YouTube API通过可恢复上传将视频文件上传到YouTube,需要完成以下2个过程。

1.检索位置URL。

作为第一步骤,检索用于上载视频数据的位置URL。

curl -X POST -i "https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus" \
  -H "Authorization: Bearer ### Your access token ###" \
  -H "Content-Type: application/json; charset=UTF-8" \
  -d "{\"snippet\":{\"categoryId\":\"22\",\"description\":\"Description of uploaded video.\",\"title\":\"Test video upload.\"},\"status\":{\"privacyStatus\":\"private\"}}"
  • 文件元数据来自您的showing curl命令。
  • 请从响应标头中检索location: https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus&upload_id=###。视频数据使用此URL上载。

2.上传视频数据。

作为第二步骤,使用检索到的位置URL上载视频数据。
请将https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus&upload_id=###替换为您的URL。并且,请修改文件名。

curl -X PUT -i 'https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus&upload_id=###' \
-F "file=@sample.mp4;type=video/mp4"
  • 本例中,视频数据采用单块上传,如需使用多块上传,请阅读官方文件。Ref

注:

  • 作为一个简单的测试,我建议使用一个小视频文件。
  • 当我测试上面的curl命令时,我确认了视频文件可以上载到YouTube,如果出现错误,请再次确认您的访问令牌、元数据、您的视频文件等等。
  • 如果你想用multipart/form-data上传视频文件,你也可以使用下面的curl命令。
curl -X POST -i 'https://www.googleapis.com/upload/youtube/v3/videos?uploadType=multipart&part=snippet%2Cstatus' \
  -H 'authorization: Bearer ### Your access token ###' \
  -F "metadata={\"snippet\":{\"categoryId\":\"22\",\"description\":\"Description of uploaded video.\",\"title\":\"Test video upload.\"},\"status\":{\"privacyStatus\":\"private\"}};type=application/json;charset=UTF-8" \
  -F "file=@sample.mp4;type=video/mp4"

参考编号:

相关问题