我正在尝试用Python开发我的第一个谷歌应用程序引擎应用程序,作为其中的一部分,我希望用户能够将视频上传到Youtube,并与该应用程序的其他用户共享。根据建议的协议,上传将被上传到他们自己的Youtube账户,应用程序需要捕捉的唯一信息是视频id。
我真的希望该设施能从应用程序内上传,而不是将用户重定向到Youtube主网站进行上传,这样用户在任何时候都不需要离开应用程序,以保持无缝。我原以为这会相对简单,因为这似乎是许多网站和应用程序想要提供的功能,但事实并非如此。
我真的很难理解我需要在这里经历什么OAuth2流,因为我以前从未与它们搏斗过。Youtube API文档中唯一的上传示例代码是从您自己的机器上传(通过命令行),因此与此无关。我已经向后阅读了文档,听起来基于浏览器的上传功能并没有针对Youtube Data Api v3进行更新,所以在使用基于浏览器的v2上传协议之前,我似乎首先需要从用户那里获得访问令牌。考虑到用户将通过浏览器上传本地存储的文件(即在他们的机器上),我假设我需要的是客户端JavaScriptOAuth2流,而不是Python服务器端流。还是两者都需要?
问题是,我甚至不能让人们使用JavaScript客户端库离开我从应用程序提供的html页面,以便让他们进入授权页面。为了检查我是否理解通过JavaScript客户端库获取访问令牌的步骤,我尝试了从这里将谷歌示例代码剪切并粘贴到html页面的第一步:
Google Api Javascript客户端库示例
并将Api密钥和客户端Id更改为我自己的,更新了Console上Api访问窗格上的JavaScript来源并授权了Google+,但点击按钮什么也没做。
所以我大概误解了一些非常基本的东西!
有什么想法吗?JS流是否被Python应用程序中的流控制所淹没?问题是我实际上应该使用服务器端流吗?在这种情况下,我如何让用户从自己的浏览器上传,然后在上传后捕获视频id?
我不敢相信我是第一个尝试这个的人,如果有人已经做到了或有任何想法,我将非常感谢任何建议。非常感谢。
如果你能完全用JavaScript在客户端处理事情,并且你也能限制自己使用支持CORS的浏览器,那么这里有一个选项:http://apiblog.youtube.com/2012/05/unlocking-javascripts-potential-with.html如果你能接受这些限制,我可能会这么做,而你正在做的唯一一个YouTube API集成就是上传。
另一种选择是使用服务器端web应用程序流,这可能更适合Python应用程序引擎应用程序。这里的问题是,您需要使用Google API for Python客户端库的组合来为您处理OAuth 2,并使用较旧的GData API Python客户端库来处理基于浏览器的上载流。这两者肯定是可以混合使用的,我们有一篇博客文章谈到了一个开源的Python应用程序引擎应用程序:http://apiblog.youtube.com/2012/08/party-playlist-picker-experimental.html
正如您所指出的,v3中目前没有基于浏览器的上传流。