【问题标题】:Get all videos from channel - Youtube API v3 c#从频道获取所有视频 - Youtube API v3 c#
【发布时间】:2016-03-12 14:58:58
【问题描述】:

是否可以从一个频道(不是我的频道)获取所有视频? 如果可能,我可以使用简单的 API 密钥还是应该使用 OAuth 2.0 凭据?

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-4 youtube-api


    【解决方案1】:

    这是一个关于如何使用控制台应用程序为频道输出视频名称的快速示例。

    您将需要一个 API 密钥。要获取 API 密钥,

    转到https://console.cloud.google.com/

    使用您的 gmail 帐户登录。

    点击启用 API 和服务。

    在 API 库页面中,搜索 youtube。

    选择 Youtube Data API v3。

    单击启用以启用 API。

    单击左侧菜单上的凭据。

    点击顶部的创建凭据。

    选择 API 密钥。

    复制您的 API 密钥值并粘贴到下面的代码中。

    在 Visual Studio 中,创建一个新的 .NET Framework 控制台应用程序。 转到 Nuget 数据包管理器。 安装 Google.Apis.Youtube.v3 包。

        using System;
        using Google.Apis.Services;
        using Google.Apis.YouTube.v3;
        using Google.Apis.YouTube.v3.Data;
        
        namespace GetYouTubeVideos
        {
           class Program
           {
              static void Main(string[] args)
              {
                 GetVideos();
              }
              public static void GetVideos()
              {
                 try
                 {
                    YouTubeService yt = new YouTubeService(new BaseClientService.Initializer() { ApiKey = "put api key here" });
                    ChannelsResource.ListRequest channelsListRequest = yt.Channels.List("contentDetails");
                    channelsListRequest.ForUsername = "put channel user name here";
    // channelsListRequest.Id = "put channel id here (if you want to use the channel id)";
                    ChannelListResponse channelsListResponse = channelsListRequest.Execute();
                    foreach (Channel channel in channelsListResponse.Items)
                    {
                       string uploadsListId = channel.ContentDetails.RelatedPlaylists.Uploads;
                       string nextPageToken = "";
                       while (nextPageToken != null)
                       {
                          PlaylistItemsResource.ListRequest playlistItemsListRequest = yt.PlaylistItems.List("snippet");
                          playlistItemsListRequest.PlaylistId = uploadsListId;
                          playlistItemsListRequest.MaxResults = 50;
                          playlistItemsListRequest.PageToken = nextPageToken;
                          PlaylistItemListResponse playlistItemsListResponse = playlistItemsListRequest.Execute();
                          foreach (PlaylistItem playlistItem in playlistItemsListResponse.Items)
                          {
                             Console.WriteLine("Video Title= {0}, Video ID ={1}", playlistItem.Snippet.Title, playlistItem.Snippet.ResourceId.VideoId);
                          }
                          nextPageToken = playlistItemsListResponse.NextPageToken;
                       }
                    }
                 }
                 catch (Exception e)
                 {
                    Console.WriteLine(e.Message);
                 }
              }
           }
        }
    

    【讨论】:

      【解决方案2】:

      您可以使用您的 API 密钥并查询所有频道的视频(即使不是您的 :))

              public Task<List<SearchResult>> GetVideosFromChannelAsync(string ytChannelId)
          {
      
              return Task.Run(() =>
              {
                  List<SearchResult> res = new List<SearchResult>();
      
                  string nextpagetoken = " ";
      
                  while (nextpagetoken != null)
                  {
                      var searchListRequest = _youtubeService.Search.List("snippet");
                      searchListRequest.MaxResults = 50;
                      searchListRequest.ChannelId = ytChannelId;
                      searchListRequest.PageToken = nextpagetoken;
                      searchListRequest.Type      = "video";
      
                      // Call the search.list method to retrieve results matching the specified query term.
                      var searchListResponse = searchListRequest.Execute();
      
                      // Process  the video responses 
                      res.AddRange(searchListResponse.Items);
      
                      nextpagetoken = searchListResponse.NextPageToken;
      
                  }
      
                  return res;
      
              });
          }
      

      这个方法应该能让你走上正轨

      【讨论】:

        【解决方案3】:

        我已经这样做了,它对我有用 我使用了 Nuget Packet manager 的 Youtube API v3

        using Google.Apis.Services;
        using Google.Apis.YouTube.v3;
        
        public ActionResult GetVideo(YouTubeData objYouTubeData)
        {
            try
            {
                var yt = new YouTubeService(new BaseClientService.Initializer() { ApiKey = "Your API Key" });
                var channelsListRequest = yt.Channels.List("contentDetails");
                channelsListRequest.ForUsername = "kkrofficial";
                var channelsListResponse = channelsListRequest.Execute();
                foreach (var channel in channelsListResponse.Items)
                {
                    // of videos uploaded to the authenticated user's channel.
                    var uploadsListId = channel.ContentDetails.RelatedPlaylists.Uploads;
                    var nextPageToken = "";
                    while (nextPageToken != null)
                    {
                        var playlistItemsListRequest = yt.PlaylistItems.List("snippet");
                        playlistItemsListRequest.PlaylistId = uploadsListId;
                        playlistItemsListRequest.MaxResults = 50;
                        playlistItemsListRequest.PageToken = nextPageToken;
                        // Retrieve the list of videos uploaded to the authenticated user's channel.
                        var playlistItemsListResponse = playlistItemsListRequest.Execute();
                        foreach (var playlistItem in playlistItemsListResponse.Items)
                        {
                            // Print information about each video.
                            //Console.WriteLine("Video Title= {0}, Video ID ={1}", playlistItem.Snippet.Title, playlistItem.Snippet.ResourceId.VideoId);
                            var qry = (from s in ObjEdbContext.ObjTubeDatas where s.Title == playlistItem.Snippet.Title select s).FirstOrDefault();
                            if (qry == null)
                            {
                                objYouTubeData.VideoId = "https://www.youtube.com/embed/" + playlistItem.Snippet.ResourceId.VideoId;
                                objYouTubeData.Title = playlistItem.Snippet.Title;
                                objYouTubeData.Descriptions = playlistItem.Snippet.Description;
                                objYouTubeData.ImageUrl = playlistItem.Snippet.Thumbnails.High.Url;
                                objYouTubeData.IsValid = true;
                                ObjEdbContext.ObjTubeDatas.Add(objYouTubeData);
                                ObjEdbContext.SaveChanges();
                                ModelState.Clear();
        
                            }
                        }
                        nextPageToken = playlistItemsListResponse.NextPageToken;
                    }
                }
            }
            catch (Exception e)
            {
                ViewBag.ErrorMessage = "Some exception occured" + e;
                return RedirectToAction("GetYouTube");
            }
        
            return RedirectToAction("GetYouTube");
        }
        

        在此行中提供您的频道名称

        channelsListRequest.ForUsername = "kkrofficial"; //kkrofficial is kkr channel name.
        

        点击此链接 https://developers.google.com/youtube/v3/code_samples/dotnet#retrieve_my_uploads

        【讨论】:

        • ClientServiceRequest.cs 怎么样?我应该有这个吗?
        • 我已创建 API,但在我的应用程序中收到错误消息:未配置访问。您的项目未启用 API(YouTube 数据 API)。请使用 Google Developers Console 更新您的配置。 [403]跨度>
        • ClientServiceRequest.cs 不需要...只需安装 Nuget Packet 管理器中的 Youtube API v3 即可
        猜你喜欢
        • 2017-11-21
        • 2016-08-26
        • 2014-02-11
        • 2015-09-16
        • 2016-03-01
        • 2015-03-11
        • 1970-01-01
        • 2021-06-03
        • 2016-08-30
        相关资源
        最近更新 更多