VideoID在ResponseReceived事件中返回,但未在上传完成之前返回。如果用户取消并删除了上载,如何将其从YouTube服务器上删除?

我当前正在做的是一个丑陋但可以正常工作的hack。

我将标题设置为唯一的GUID。上传完成后,我设置了正确的标题。

如果上传被删除,我将获得第一个 channel 并在播放列表中搜索guid标题。这将返回VideoID,我可以删除视频。

一定有更好的方法。我可以使用响应中的upload_id吗?

最佳答案

除非有人提出了一个更好的主意,否则这就是我目前正在做的事情,并且似乎工作得很好。需要警告的是,如果视频碰巧具有相同的guid标签,则该视频可能会消失,但我认为这种可能性很小。

使用了一些常量字符串

internal const string PartSnippet = "snippet";
internal const string TypeVideo = "video";

在开始上传之前,请添加一个guid标签。
video.Snippet.Tags.Add(upload.UploadId.ToString());

在ResponseReceived事件中,上传完成后,我删除了标签
YouTube.RemoveTag(obj, Upload.UploadId.ToString());

internal static void RemoveTag(Video video, string tag)
{
    video.Snippet.Tags.Remove(tag);
    var updateRequest = YouTubeService.Videos.Update(video, Constants.PartSnippet);
    updateRequest.ExecuteAsync();
}

如果需要将视频从服务器中删除,我可以通过guid标签搜索并删除它。
YouTube.DeleteAsyncVideoByGuidTag(Upload.UploadId);

internal async static Task DeleteAsyncVideoByGuidTag(Guid tag)
{
    var listRequest = YouTubeService.Search.List(Constants.PartSnippet);
    listRequest.ForMine = true;
    listRequest.Type = Constants.TypeVideo;
    listRequest.Q = tag.ToString();
    var response = await listRequest.ExecuteAsync();
    foreach (var deleteRequest in response.Items.Select(
        result => YouTubeService.Videos.Delete(result.Id.VideoId)))
        await deleteRequest.ExecuteAsync();
}

请注意:这是一种解决方法。这不是我想要的方式,但这是我想到的唯一方式。

关于c# - YouTube C#API V3,如何删除不带ID的部分上传的视频?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22369100/

10-11 22:23
查看更多