0

我正在尝试用 Python 开发我的第一个 Google App Engine 应用程序,作为其中的一部分,我希望用户能够将视频上传到 Youtube 并与该应用程序的其他用户分享。根据推荐的协议,上传到他们自己的 Youtube 帐户,应用程序需要捕获的唯一信息是视频 ID。

我真的希望该设施从应用程序内上传,而不是将用户重定向到主要的 Youtube 网站进行上传,这样用户在任何时候都不需要离开应用程序,以保持无缝连接。我原以为这会相对简单,因为这似乎是许多网站和应用程序都希望提供的功能,但似乎并非如此。

我真的很难理解我需要在这里通过什么 OAuth2 流程,以前从未与他们搏斗过。Youtube API 文档中唯一的上传示例代码是从您自己的机器上传(通过命令行),因此这里不相关。我已经向后阅读了文档,听起来基于浏览器的上传工具并没有针对 Youtube Data Api v3 进行更新,所以我需要做的第一件事就是在使用之前从用户那里获取访​​问令牌v2 基于浏览器的上传协议。鉴于用户将通过浏览器上传本地存储的文件(即在他们的机器上),我假设客户端 JavaScript OAuth2 流是我需要的,而不是 Python 服务器端流。还是我两者都需要?

问题是我什至无法让人们离开我使用 JavaScript 客户端库从应用程序提供的 html 页面,以便让他们进入授权页面。为了检查我是否了解通过 JavaScript 客户端库获取访问令牌的步骤,我首先尝试将 Google 示例代码从此处剪切并粘贴到 html 页面中:

Google Api Javascript 客户端库示例

并将 Api 密钥和客户端 ID 更改为我自己的,更新了控制台上 API 访问窗格上的 JavaScript 来源并授权了 Google+,但单击该按钮什么也没做。

所以大概我在这里误解了一些非常基本的东西!

有任何想法吗?JS 流是否被 Python 应用程序内的流控制覆盖?问题是我实际上应该使用服务器端流程,在这种情况下,我如何让用户从他们自己的浏览器上传,然后在上传后捕获视频 ID?

我不敢相信我是第一个尝试这个的人,如果有人已经管理过这个或有任何想法,我会非常感谢任何指点。谢谢你。

4

1 回答 1

1

这是一种选择,如果您可以在 JavaScript 中完全在客户端处理事情,并且您也可以限制自己使用支持 CORS 的浏览器:http: //apiblog.youtube.com/2012/05/unlocking-javascripts -potential-with.html如果您对这些限制没有问题,并且您正在做的唯一 YouTube API 集成是用于上传,那么这就是我可能会采用的方法。

另一种选择,可能更适合 Python App Engine 应用程序,是使用服务器端 Web 应用程序流。这里的问题是,您需要结合使用Google APIs for Python 客户端库为您处理 OAuth 2,并使用较旧的GData API Python 客户端库来处理基于浏览器的上传流程。绝对有可能将两者混合使用,我们有一篇博客文章讨论了一个开源 Python App Engine 应用程序,它可以做到这一点:http://apiblog.youtube.com/2012/08/party-playlist-picker-experimental。 html

正如您所指出的,目前 v3 中没有基于浏览器的上传流程。

于 2013-02-19T16:40:33.243 回答