2

YouTube API v3 は恐ろしく文書化されています。私はすでに多数のバグを複数回報告しましたが、誰も反応しません。サムネイルをアップロードするには、この API を使用する必要があります。ガイドには次のように記載されています。

投稿https://www.googleapis.com/youtube/v3/thumbnails/set

認証範囲:

パラメーター:

  • videoId: string videoId パラメーターは、カスタム ビデオ サムネイルが提供される YouTube ビデオ ID を指定します。

まず、URL が間違っています。でなければなりませんhttps://www.googleapis.com/upload/youtube/v3/thumbnails/set。次のコードでは、次を使用しますUnirest

final HttpResponse<String> response = Unirest.post("https://www.googleapis.com/upload/youtube/v3/thumbnails/set")
                    .header("Content-Type", "application/octet-stream")
                    .header("Authorization", accountService.getAuthentication(account).getHeader())
                    .field("videoId", videoid)
                    .field("thumbnail", thumbnail)
                    .asString();

受け取った応答:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required parameter: videoId",
    "locationType": "parameter",
    "location": "videoId"
   }
  ],
  "code": 400,
  "message": "Required parameter: videoId"
 }
}

どうすればいいの?videoId が設定されました。API のこの部分で既にプレイした人はいますか?

リクエストを次のように変更できます

Unirest.post("https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId=" + videoid)
                    .header("Content-Type", "application/octet-stream")
                    .header("Authorization", accountService.getAuthentication(account).getHeader())
                    .field("mediaUpload", thumbnail)
                    .asString();

これにより、次のエラーがスローされます。

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "backendError",
    "message": "Backend Error"
   }
  ],
  "code": 503,
  "message": "Backend Error"
 }
}

編集: Ibrahim Ulukaya によって投稿された URL と同じ要求 (リファレンス ガイドの元の URL):

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "wrongUrlForUpload",
    "message": "Uploads must be sent to the upload URL. Re-send this request to https://www.googleapis.com/upload/youtube/v3/thumbnails/set"
   }
  ],
  "code": 400,
  "message": "Uploads must be sent to the upload URL. Re-send this request to https://www.googleapis.com/upload/youtube/v3/thumbnails/set"
 }
}
4

3 に答える 3

4

問題を掘り下げました。ライブラリを使用したくない場合に従う必要がある手順は次のとおりです。

1) POST https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId=VIDEO_ID&uploadType=resumable 本文を空にする

2) 応答の Location: ヘッダーで URL を取得し、Content-Type: image/png と本文のサムネイルを使用してその URL に POST します。

于 2013-09-06T21:12:14.867 に答える
0

与えられた答えは正しいとは言えません! 本文に画像なしでこの URL に投稿した場合:

https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId=VIDEO_ID&uploadType=resumable

次のエラーが表示されます。

"400: mediaBodyRequired"

このエラーについては、このページの下部にある YouTube ドキュメントで説明されています。

https://developers.google.com/youtube/v3/docs/thumbnails/set

なので:

「リクエストに画像コンテンツが含まれていません。」

彼らのドキュメントでは多くのことが省略されていますが (categoryId を考えてください)、Ibrahim によって投稿された最初のソリューションを試してエラーを受け取ったので、ここでは死んでいます。彼は本文に画像データを提供しないと述べましたが、ドキュメントと私自身の研究は正反対を示しています.

解決策は、画像本文を含めてこの URL に投稿することです。すると、こんな返事が返ってきました。

{ "kind": "youtube#thumbnailSetResponse", "etag": "\"kYnGHzMaBhcGeLrcKRx6PAIUosY/lcDPfygjJkG-yyzdBp0dKhY2xMY\"", "items": [ { "default": { "url": "//i.ytimg.com /vi/fyBx3v1gmbM/default.jpg", "幅": 120, "高さ": 90 }, "中": { "url": "//i.ytimg.com/vi/fyBx3v1gmbM/mqdefault.jpg", "幅": 320、"高さ": 180 }、"高": { "url": "//i.ytimg.com/vi/fyBx3v1gmbM/hqdefault.jpg"、"幅": 480、"高さ": { 360 }, "標準": { "url": "//i.ytimg.com/vi/fyBx3v1gmbM/sddefault.jpg", "幅": 640, "高さ": 480 }, "maxres": { "url ": "//i.ytimg.com/vi/fyBx3v1gmbM/maxresdefault.jpg", "幅": 1280, "高さ": 720 } } ] }

残念ながら、実際にはサムネイルが変更されているわけではありませんが、API サーバーとサムネイル処理のキューイングに問題があると思います。ただし、成功した応答が返されます。サムネイルが変わらない理由がわかりません。

于 2015-04-15T23:05:28.117 に答える