使用 C# 和 Google.Apis.YouTube.v3 列出 YouTube 视频

2023-11-26

我正在尝试使用最新版本的 Google.Apis.YouTube.v3(截至 2014 年 1 月 15 日)执行一些 YouTube 视频交互。

我已经完成了以下内容的 NuGet:

  • Google.Apis.YouTube.v3
  • Google.Api.身份验证
  • Google.Apis.Drive.v2(不是必需的,但还是得到了)

然后我尝试运行在以下位置找到的代码:https://developers.google.com/youtube/v3/docs/playlistItems/list

但是,该代码具有以下引用,我似乎无法在任何最新的 NuGet 下载中找到它们......

  • using Google.Apis.Auth.OAuth2.DotNetOpenAuth;
  • using Google.Apis.Samples.Helper;

然后在代码顶部有以下注释,但这些链接没有给我带来任何有用的信息。

/* External dependencies, OAuth 2.0 support, and core client libraries are at: */ /* https://code.google.com/p/google-api-dotnet-client/wiki/APIs#YouTube_Data_API */ /* Also see the Samples.zip file for the Google.Apis.Samples.Helper classes at: */ /* https://code.google.com/p/google-api-dotnet-client/wiki/Downloads */

我开始相信使用 C# 玩 YouTube 的最佳方法是使用旧版本的 YouTube.v3 代码库,该代码库与人们似乎正在使用的示例相一致。

任何帮助(尤其是来自 Peleyal 的帮助)将不胜感激。也许我错过了一些明显的东西,需要被敲打......

顺便说一句,我已经下载了我的客户端密钥 json 文件并成功运行了其中包含的一些示例google-api-dotnet-client-1.7.0-beta.samples.zip文件。然而,奇怪的是,该示例 zip 文件中缺少任何 YouTube 示例。该 zip 文件中还缺少 Google.Apis.Samples.Helper 类。

有没有人有一些有用的示例代码,可以使用截至 2014 年 1 月 14 日最新的 NuGet 代码与 YouTube 进行交互?


因此,经过大量研究、挖掘和少一点头发后,我弄清楚了一些事情。

首先,登录“Google Cloud Console”。如果您使用 GAE (Google App Engine),并且点击您的 GAE 项目并启用“YouTube Data API v3”,那么您肯定一无所获!相反,退出您的 GAE 项目,然后创建一个名为“API 项目”的新项目。

然后内that项目,启用您想要的 API,您将开始获得更好的结果。更好的结果。首先尝试 YouTube 搜索。这允许您只需插入 API 密钥,而不必搞乱 OAuth2,并且它需要更少的 dll,因此它是一个很好的起点。尝试如下操作:

YouTubeService youtube = new YouTubeService(new BaseClientService.Initializer() {
    ApplicationName = "{yourAppName}",
    ApiKey = "{yourApiKey}",
});
SearchResource.ListRequest listRequest = youtube.Search.List("snippet");
listRequest.Q = "Loeb Pikes Peak";
listRequest.MaxResults = 5;
listRequest.Type = "video";
SearchListResponse resp = listRequest.Execute();
foreach (SearchResult result in resp.Items) {
    CommandLine.WriteLine(result.Snippet.Title);
}

请随意将 CommandLine 替换为常规控制台打印 stmts。

接下来,继续使用 OAuth 2.0 并尝试让您的凭据顺利通过。您需要从“凭据”部分下的“Google Cloud Console”下载 OAuth JSON 文件。获得此文件后,将所有名为“client_secrets.json”的文件替换为下载的 json 文件的内容。为了获得工作授权,我发现我缺少 Microsoft.Threading.Tasks.Extensions.Desktop.dll,该 dll 允许浏览器打开一个窗口以授予本机应用程序访问权限,从而与您的应用程序混在一起。 YouTube 帐户。因此,如果您在授权部分遇到一些错误,请检查内部异常,这也可能是您的问题。

免责声明:下面显示的代码的下半部分来自:github.com/youtube/api-samples/blob/master/dotnet

UserCredential credential;
using (FileStream stream = new FileStream("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 = "unlisted"; // or "private" or "public"
var filePath = @"REPLACE_ME.mp4"; // Replace with path to actual movie file.
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
    var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", fileStream, "video/*");
    videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged;
    videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived;
    videosInsertRequest.UploadAsync();
}

这就是我的 2 美分价值。此外,您还需要在 DotNetOpenAuth 上执行 NuGet,并在代码中将对 Google.Apis.Auth.OAuth2.DotNetOpenAuth 的任何“using”调用替换为“using DotNetOpenAuth”。

希望这对其他人有帮助。最重要的是弄清楚 GAE 与新项目的关系。一旦我弄清楚了这一点,正常数量的研究就开始产生结果,而不是纯粹的挫败感!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 和 Google.Apis.YouTube.v3 列出 YouTube 视频 的相关文章

随机推荐

  • 如何根据用户滚动加载网页内容

    如何在用户滚动网页时加载内容 如何实施 一般来说 您需要有某种像这样的结构 first page of content first page of content first page of content first page of co
  • 为什么 NumPy int 不是 Python int 的实例,但 NumPy float 是 Python float 的实例?

    考虑以下 gt gt gt import numbers gt gt gt import numpy gt gt gt a numpy int 0 gt gt gt isinstance a int False gt gt gt isins
  • 如何使用 Android 导航组件将值传递回先前的片段目的地?

    让 sat 我有一些这样的目的地 从片段A gt 到片段B gt 到片段C 我可以使用安全参数将数据从片段 A 传递到片段 B 也可以使用安全参数从片段 B 传递到片段 C 如果我想将片段 C 中生成的字符串带回片段 B 或片段 A 该怎么
  • Java 8 重复键的流总和条目

    我使用 Java 8 流按某个键对条目列表进行分组 然后按日期对组进行排序 此外 我想做的是 折叠 组中具有相同日期的任何两个条目并将它们相加 我有一个这样的课程 出于示例目的而被精简 class Thing private String
  • xcode 多合一布局:在项目和调试页面之间切换的键盘快捷键?

    当您将 xcode 配置为使用 All in one 布局时 会出现一个切换开关 允许您在项目和调试 模式 之间切换 IDE 调用这些页面 是否有键盘快捷键可以执行切换 Project Cmd 0 zero Build Cmd Shift
  • 我可以同时安装 Ruby on Rails 2.x 和 Ruby on Rails 3

    我有一个 Ubuntu Rails 环境来使用 ROR 现在我正在运行 Rails 2 3 8 我想研究一下 Rails 3 是否可以并行运行两个开发环境 如果没有 如何清理 Rails 2 x 系统以安装 Rails 3 或者我需要安装一
  • 在 SQL Server 中保存日期

    我有一个遗留应用程序 其中输入是日期字符串 即 2009年6月12日 输入的格式始终是字符串 并且是一致的 始终是 dd mm yyyy 目前 遗留应用程序只是将其插入日期时间字段中 显然 如果服务器的本地化文化设置发生变化 我们有一个错误
  • 使用Git显示所有一级后代分支

    如何获取当前 HEAD 的一级后代分支的列表 我可以通过以下方式获取整棵树的列表 git log graph abbrev commit pretty decorate branches 这使 2eff4a7 refs heads issu
  • 为WPF中的所有元素事件添加监听器

    我想在一次调用中挂钩所有可用的元素事件 像这样的事情 elem AddHandler AnyRoutedEvent RoutedEventHandler handler 我怎样才能做到这一点 尝试此操作以获取按钮类型上的所有事件 您可以替换
  • Android:Process.myTid() VS Thread.currentThread().getId()

    我有简单的Activity那个叫AsyncTask 所以我打印一些关于Proces and Thread From onCreate android os Process myUid 10137 From onCreate android
  • PHP 连接到 firebase 是如何工作的?

    如果您有时间阅读firebase php文档 您可以看到如何使用帮助程序库 连接 到firebase 但不幸的是 我认为连接只能由 phpunit 建立 换句话说 输出只能在终端中看到 因为当你在浏览器中运行 php 页面时 它会返回致命错
  • AttributeError:模块“socket”没有属性“AF_PACKET”

    我正在使用 Python 构建一个数据包嗅探程序 但是我遇到了障碍 由于某种原因 我认为套接字没有正确导入 因为我的程序运行时收到以下消息 AttributeError module socket has no attribute AF P
  • 为什么 css "all: unset" 在 MacOS 的 Safari 浏览器中工作得很奇怪?

    所以基本上我做了这种情况 父级有cssall unset 然后我注意到当我使用 Safari 版本12 1 1 14607 2 6 1 1 它的所有子颜色只能受到以下影响 块 甚至不是内联或 important 但只有color行为方式就是
  • “迁移 Django 应用程序”是什么意思?

    我一直在思考很多的意义migrating a Django app在过去的几天里 听说了如何迁移 Django 应用程序南姜戈 也许只是缺乏足够的英语技能 因为英语不是我的母语 或者这是你在程序员生活中遇到的事情之一 这些事情非常简单 需要
  • 如何获取ListView项目的视图?

    我有两个 ListView A 和 B 其中包含相同类型的项目 我创建的类 当我单击 A 中的某个项目时 它会将该对象添加到 B 上 如果我再次单击 则会将其删除 只是当选择一个项目时 我使用 view setBackgroundColor
  • 如何使用 JQuery 更改 onClick 复选框的值?

    在这里 我尝试在单击以下复选框时更改其值 在下面的代码中 我尝试将复选框的值更改为 1 并在未选中时将值更改为 0 但它只需要 false 条件 当取消选中该复选框时 值会更改为 0 但选中时 它不会更改为 1 有什么建议如何解决此问题吗
  • 如何在 SceneKit 中的“自己”轴上移动旋转的 SCNNode?

    下图显示了一个旋转框 应在 X 轴和 Z 轴上水平移动 Y 应该不受影响 以简化场景 这个盒子也可能是相机的 SCNNode 所以我想此时投影没有意义 假设我们想要沿着红色箭头的方向移动盒子 如何使用 SceneKit 来实现这一点 红色箭
  • 具有 Robocopy 和参数传递的 Powershell

    我正在尝试编写一个使用的脚本robocopy 如果我只是手动执行此操作 我的命令将是 robocopy c hold test1 c hold test2 test txt NJH NJS 但是 当我从 powershell 执行此操作时
  • 如何存储CLLocationCooperative2D?

    我正在尝试构建一个应用程序 该应用程序可以构建和保存类似于绘制我的跑步路线的路线 我正在使用面包屑示例代码 特别是CrumbPath and CrumbPathView作为我路线的基础 来自 Apple 两个问题 如果我尝试访问MKMapP
  • 使用 C# 和 Google.Apis.YouTube.v3 列出 YouTube 视频

    我正在尝试使用最新版本的 Google Apis YouTube v3 截至 2014 年 1 月 15 日 执行一些 YouTube 视频交互 我已经完成了以下内容的 NuGet Google Apis YouTube v3 Google