YouTube c# API V3,如何删除没有ID的部分上传视频

本文关键字:ID 视频 删除 V3 API 何删除 YouTube | 更新日期: 2023-09-27 17:50:02

在responserreceived事件中返回VideoID,但在上传完成之前不会返回。如果用户取消并删除了上传,您如何从YouTube服务器上删除它?

我现在做的是一个丑陋但有效的hack。

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

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

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

YouTube c# API V3,如何删除没有ID的部分上传视频

除非有人想出一个更好的主意,这就是我目前正在做的,它似乎工作得相当好。一个警告是,如果视频碰巧有相同的guid标签,可能会消失,但我认为这不太可能。

使用的一些常量字符串

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

在开始上传之前,我添加了一个guid标签。

video.Snippet.Tags.Add(upload.UploadId.ToString());

在responserreceived事件中,当上传完成时,我删除标签

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();
}

请注意:这是一个变通方法。这不是我想要的方法,但这是我能想到的唯一方法。