首先让我说我不是在问“如何查看以前上传的视频的状态”。我的问题是从上传的响应中获取视频的状态。我正在使用dotnet客户端,在上传完成后,响应就是Google.Apis.Youtube.v3.Data.Video
对象。该对象有一个名为Status
的属性,其中包含以下字段:RejectionReason
,PrivacyStatus
和UploadStatus
。问题是只有PrivacyStatus和UploadStatus才有值。 RejectionReason为null。杰夫波斯尼克提到了(see whole thread here)
在上传响应中,无法确定视频是否重复,因为YouTube在处理视频之前不知道该视频是否重复,并且在上传后进行处理完成了
这有点奇怪,因为当我在上传后立即发出一个video.list时,API会返回上传视频的状态。因此,即使视频未发布,并且似乎YouTube仍在索引/处理视频,它已经知道“刚刚上传的视频”的状态。那么为什么它不能作为回应的一部分返回状态呢?
响应包括状态非常重要,因为如果没有,那么在代码中,每次上传时我们都要做两次API调用:(1)insertmediaupload then(2)video.list。这是一项非常昂贵的操作,尤其是并非所有上传都会重复。
修改 作为对Jeff-Posnick在下面的评论的回答,问题是“API可以等待几秒钟并检查处理是否完成,然后将状态作为响应的一部分包括在内?”。
由于我所看到的行为,我提出了这个问题:That's a bit strange because when I issue a video.list right after the upload the API returns a status for the uploaded video
。但我一直在玩API并得到不一致的结果。我一遍又一遍地上传了同一个视频,有时会出现“重复”状态,有时也没有。请注意我采取的步骤,上面的#1和#2。这两个API调用之间没有其他代码。
答案 0 :(得分:0)
我不确定这里的问题是什么。
您似乎了解上传方式与YouTube API一起使用的限制,这些限制仍适用于YouTube数据API的v3。在从videos.insert()
请求返回响应时,视频的状态未知,因为尚未处理。实际处理可能在视频上传后一两秒发生,或者可能在视频上传后几分钟(或更长时间)发生,特别是对于较大的视频文件。它不是实时完成的,期望videos.insert()API调用阻止等待处理完成是不合理的。
我不同意您的评估,即执行videos.list(id=...,part=status)
是“非常昂贵的操作”。与实际视频上传相比,消耗的带宽量和YouTube API配额最低。提供一种通过某种回调或推送更新机制独立于videos.insert()
调用来回传处理状态的方法会很好,但是我们目前没有这样的可用内容。您必须轮询videos.list(id=...,part=status)
。