https://code.google.com/p/youtube-api-samples/source/browse/samples/java/youtube-cmdline-uploadvideo-sample/src/main/java/com/を使用して動画をアップロードしようとしていますgoogle/api/services/samples/youtube/cmdline/youtube_cmdline_uploadvideo_sample/UploadVideo.java の例
YouTube コンソールへの登録に成功し、 https: //code.google.com/apis/console/?api=youtube#project:340964720118: access で client_secrets.json を取得しました。
アプリがシークレットにアクセスできるように、シークレットをインストールしました。すべてがうまくコンパイルされていますが、プログラムを実行すると、奇妙なエラーが発生します:
GoogleJsonResponseException code: 400 : Invalid value for: listed is not a valid value
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid value for: listed is not a valid value",
"reason" : "invalid"
} ],
"message" : "Invalid value for: listed is not a valid value"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:423)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
何が悪いのかわかりません。リクエスト自体が深くカプセル化されているため、リクエストの何が問題なのか理解できません...
アップデート。
おかげで
System.out.println(videoInsert.getHttpContent().toString());
の前に挿入された呼び出し
Video returnedVideo = videoInsert.execute();
サンプル コードでは、形成されて Google に送信される JSOn が
{snippet={description=Video uploaded via YouTube Data API V3 using the Java library on Sun Sep 29 20:29:30 MSK 2013, tags=[test], title=Test Upload via Java on Sun Sep 29 20:29:30 MSK 2013}, status={privacyStatus=listed}}
しかし、実際には、このjsonの何が問題なのか、サーバー側でエラーが発生する理由はまだ疑問があります。
更新 2:
上記のメッセージは表示されなくなりましたが、アップロードはまだ不可能です。上記の例の行でファイルをアップロードしようとすると、401 エラーが発生します。
System.out.println(videoInsert.getJsonContent().toString());
System.out.println(videoInsert.getHttpContent().getType());
Video returnedVideo = videoInsert.execute();
System.out.println(returnedVideo.getId());
私は自分の個人データへのリクエストを承認していないと思っていましたが、実際に承認しました (リクエストはデフォルトのブラウザーに読み込まれ、そこで承認し、使用したいアカウントを指定しました)。ただし、その権限を確認する方法はありません。Google アカウントのデータには、Google+ アプリのアプリとアクティビティ ログのみが保持されます。リストに自分のアプリが見つかりません。では、ログインしていない場所はどこで確認できますか?
IOException: 401 Unauthorized
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:423)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
at ScreenRecordingExample.UploadToYoutube(ScreenRecordingExample.java:356)