C# 上传视频到youtube时,我如何知道什么类别id是什么类别名称?

C# 上传视频到youtube时,我如何知道什么类别id是什么类别名称?,c#,youtube,youtube-api,C#,Youtube,Youtube Api,我正在向yourube上传视频: 在form1构造函数中: UserCredential credential; using (FileStream stream = new FileStream(@"D:\C-Sharp\Youtube-Manager\Youtube-Manager\Youtube-Manager\bin\Debug\client_secrets.json", FileMode.Open, FileAccess.Read)) {

我正在向yourube上传视频: 在form1构造函数中:

UserCredential credential;
            using (FileStream stream = new FileStream(@"D:\C-Sharp\Youtube-Manager\Youtube-Manager\Youtube-Manager\bin\Debug\client_secrets.json", FileMode.Open, FileAccess.Read))
            {
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubeUpload },
                    "user",
                    CancellationToken.None,
                    new FileDataStore("YouTube.Auth.Store")).Result;
            }
            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
            });
            var video = new Video();
            video.Snippet = new VideoSnippet();
            video.Snippet.Title = "Default Video Title";
            video.Snippet.Description = "Default Video Description";
            video.Snippet.Tags = new string[] { "tag1", "tag2" };
            video.Snippet.CategoryId = "22"; // See https://developers.google.com/youtube/v3/docs/videoCategories/list
            video.Status = new VideoStatus();
            video.Status.PrivacyStatus = "public";
            var filePath = @"C:\Users\bout0_000\Videos\test.mp4";
            using (var fileStream = new FileStream(filePath, FileMode.Open))
            {

                const int KB = 0x400;
                var minimumChunkSize = 256 * KB;

                var videosInsertRequest = youtubeService.Videos.Insert(video,
                    "snippet,status", fileStream, "video/*");
                videosInsertRequest.ProgressChanged +=
                    videosInsertRequest_ProgressChanged;
                videosInsertRequest.ResponseReceived +=
                    videosInsertRequest_ResponseReceived;
                videosInsertRequest.ChunkSize = minimumChunkSize * 4;
                videosInsertRequest.Upload();
            }
在这个例子中,我使用的是分类号22

video.Snippet.CategoryId = "22";
只有在上传了我在youtube网站上看到的视频后,我的视频中才发现这个类别是:人物和博客

如果我浏览到这个链接,我可以使用底部的OAuth 2.0来处理授权请求

但我还是不明白在哪里可以看到按姓名和id列出的所有类别的完整列表?例如:Name:People&Blogs Id:22

找不到任何显示它的站点。

对以下站点进行API调用:

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet&regionCode={two-character-region}&key={YOUR_API_KEY}

API将返回所选区域的所有类别(名称和ID)。请注意,同一类别在所有地区都应具有相同的ID;但是,某些类别在某些区域中不可用(这就是您必须执行API调用的原因…区域太多,无法以友好的方式列出所有可能的排列)。

下面是我程序中的VB.NET源代码。此代码加载带有自定义类(CategoryClass)的组合框,该类包括所有有效的CategoryId和标题。我还包括了我的自定义类:CategoryClass。您可以使用其中一个免费转换器将其转换为C#.NET


我可以手动使用上面的链接,给它区域代码和我的api密钥,它就可以工作了。但是我如何在csharp代码中实现它呢?你能给我举个例子吗?例如:该区域是IL,我正在使用我的api密钥。但是我如何在我的c#代码中使用i,这样我就可以得到区域所有类别的字符串列表,并将这些类别添加到一个组合框中。当我使用区域和我的api键浏览此链接时,它会起作用。我只是不知道如何在我的代码中实现它,我的问题是如何在我的代码中植入它。
Private Sub GetVideoCategories()
    Dim objYouTubeService As YouTubeService
    AddToLog("GetVideoCategories Begin", True, False)
    Try
        objYouTubeService = New YouTubeService(New BaseClientService.Initializer() With { _
             .HttpClientInitializer = OAUth2Credential, _
             .ApplicationName = Assembly.GetExecutingAssembly().GetName().Name})
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "GetVideoCategories - Initialize YouTubeService")
        End
    End Try
    Dim objCategories As VideoCategoryListResponse = Nothing
    Try
        Dim objRequest As VideoCategoriesResource.ListRequest = New VideoCategoriesResource.ListRequest(objYouTubeService, "id,snippet")
        objRequest.Hl = "en_US"
        objRequest.RegionCode = "US"
        objCategories = objRequest.Execute
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "GetVideoCategories - VideoCategories List Request")
        End
    End Try
    cmbCategory.DisplayMember = "Title"
    cmbCategory.ValueMember = "Id"
    For Each obj As VideoCategory In objCategories.Items
        cmbCategory.Items.Add(New CategoryClass(obj.Id, obj.Snippet.Title))
        If obj.Snippet.Title.Contains("News") Then
            intDefaultCategoryIndex = cmbCategory.Items.Count - 1
        End If
    Next
    cmbCategory.SelectedIndex = intDefaultCategoryIndex
    AddToLog("GetVideoCategories End", True, False)
End Sub




Friend Class CategoryClass
Dim m_Id As String
Dim m_Title As String
Sub New(ByVal Id As String, ByVal Title As String)
    m_Id = Id
    m_Title = Title
End Sub
Property ID As String
    Get
        ID = m_Id
    End Get
    Set(value As String)
        m_Id = value
    End Set
End Property
Property Title As String
    Get
        Title = m_Title
    End Get
    Set(value As String)
        m_Title = value
    End Set
End Property
Overrides Function ToString() As String
    ToString = m_Id & "|" & m_Title
End Function
End Class