我已经在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)
我无法找出问题所在;由于请求本身是深度封装的,我无法理解请求有什么问题......
UPD。
感谢
System.out.println(videoInsert.getHttpContent().toString());
在之前插入了调用
Video returnedVideo = videoInsert.execute();
在示例代码中,我得到了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是什么,以及为什么它会导致服务器端的错误。
UPD 2:
不,我不再收到上面的消息,但上传仍然是不可能的。我尝试在上面示例的那些行中上传文件时收到401错误:
System.out.println(videoInsert.getJsonContent().toString());
System.out.println(videoInsert.getHttpContent().getType());
Video returnedVideo = videoInsert.execute();
System.out.println(returnedVideo.getId());
我认为我没有授权我的个人数据请求,但我实际上是DID它(请求被加载到默认浏览器,我已经接受它并指定了我想要使用的帐户)。但是,没有办法检查该授权;我的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)
答案 0 :(得分:0)
好的,我发现问题是由于privacyStatus值不正确而出现的:
我有
status.setPrivacyStatus("listed");
在我的代码中,虽然似乎只有公开,不公开和私有都是可能的值
答案 1 :(得分:0)
不幸的是,UPD-2问题以我不确切知道的方式得到了解决:
我注意到,在我的代码示例中有一行
return new AuthorizationCodeInstalledApp(flow, localReceiver).authorize("user");
我用我的谷歌用户名替换了'用户'(但实际上我不确定这是否真的需要它)。在替换之后,再次启动授权尝试(默认浏览器加载了接受/拒绝页面,我应该选择两个帐户中的一个)。由于我有两个帐户,原来的YouTube和普通的谷歌一个,在上一次尝试中我选择了谷歌的一个并得到401错误,这次我选择了YouTube的一个。
所以,之后问题得到了解决。我仍然不知道是否由于正确的用户名而不是“用户”或由于正确的帐户选择。如果有人知道真相,请发表评论!