** 更新 **
看起来谷歌似乎真的通过绝对要求用户交互来上传视频来搞砸了地球上的每个人。我当然知道,他们是免费的。正是我多年前警告客户的事情,所以我不需要被提醒。谢谢。
因此,我想尝试将其带到不同的方向,并找到一个漏洞和解决方法,以继续做我们正在做的事情,尽管Google完全缺乏支持或以任何方式关心开发人员以及他们必须处理的问题。
如果您实际上可以拨打电话号码并与人讨论YouTube合作伙伴访问权限,那将有所不同,但您可以更快地访问光明会。
OAuth 2.0 现在是唯一受支持的身份验证方法周期。它确实需要用户交互。
但是那个令牌呢?有谁知道令牌能用多久?
如果我可以使用用户交互仅获取一次令牌并将其放入数据库中,则之后我可以自动执行数百或数千次交互。
换句话说,我试图将用户交互变成减速带而不是混凝土墙。
如果有人有任何获取该令牌,缓存它并在之后使用它的示例,那对我来说将是天赐之物。
感谢您的评论和帮助。YouTube开发者论坛刚刚折叠并说来这里而不是:),我并不感到惊讶。
谷歌似乎已经完全拔掉了现有仪表板的插头。
https://code.google.com/apis/youtube/dashboard/gwt/index.html
该链接现在是404'd。在不同系统上的几个不同浏览器中尝试。
已经在新的Google API控制台下注册,但仍然遇到问题。
// Set the authentication URL for this connection object
$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
// Try to connect to YouTube with the channel credentials passed
try {
$httpClient =
Zend_Gdata_ClientLogin::getHttpClient(
$username = $channelfields['EMAIL_ADDRESS'],
$password = $channelfields['PASSCODE'],
$service = 'youtube',
$client = null,
$source = 'Redacted Data',
$loginToken = $channelfields['CACHED_TOKEN'],
$loginCaptcha = '',
$authenticationURL);
} catch (Zend_Gdata_App_HttpException $httpException) {
$update_error['response_body'] = $httpException->getRawResponseBody();
$update_error['error'] = 1;
} catch (Zend_Gdata_App_Exception $e) {
$update_error['message'] = $e->getMessage();
$update_error['error'] = 1;
}
此代码以前运行良好,但不适用于较旧的 API 密钥或在 Google API 控制台中生成的较新密钥。
我正在尝试简单的上传,这让我非常担心:
"服务帐户流支持不访问用户信息的服务器到服务器交互。但是,YouTube 数据 API 不支持此流程。由于无法将服务帐户链接到YouTube帐户,因此尝试使用此流程授权请求将生成NoLinkedYouTube帐户错误。
从所有报道来看,谷歌似乎已经强迫YouTube上传在所有情况下变得互动,从而排除了自动上传生成内容的平台的所有可能性。
感谢对该过程的任何帮助或见解。
PS - 哦,自从我看过那个系统以来已经有一段时间了,谷歌关闭了YouTube开发者论坛,并说"你"现在负责他们的支持:)
>OAuth2 确实支持通过离线访问类型参数(即使用 access_type=离线)避免用户交互的功能。查看 Google 文档了解详细信息。
解决方案非常简单。你的应用需要使用 oauth 来请求脱机访问。它将获得一个访问 cide,您可以将其转换为刷新令牌,这是您存储在数据库中的内容。这不会过期。实际上有时确实如此,但那是另一回事了。每当需要访问 API 时,请使用存储的刷新令牌请求包含在每个 api 调用中的访问令牌。
有关详细信息,请参阅 https://developers.google.com/accounts/docs/OAuth2WebServer。
你做了什么,但 https://code.google.com/apis/youtube/dashboard/gwt/index.html 对我来说效果很好。也许这是一个暂时的问题。如果您不希望用户交互,则必须使用YouTube API v2,或者您必须将v3与不需要身份验证的方法一起使用,或者您必须提供自己的YouTube帐户凭据,这是不推荐的,可能不适合您的情况。
我认为有几个问题要在这里回应。
1) 较旧的 API 控制台尚未删除,但我注意到它在 Google 推出新的"云控制台"时出现间歇性中断。
2) ClientLogin 在 2012 年 4 月正式弃用,而不仅仅是 48 小时前。Jeff Posnick在他的博客(apiblog.youtube.com)上详细介绍了几个月来的所有变化(以及相关的变化,如AuthSub,Youtube Direct等)。
3) 您是对的,使用 API 的 v3,您无法全面执行自动上传,因为 oAuth2 流需要用户交互。但是,鉴于对用例的描述有限,使用刷新令牌可能是最好的选择。如果内容是用户生成的,他们必须在某个地方登录您的应用程序,对吗?(以便你的应用知道要利用哪些凭据进行上传)。在他们登录到你的应用时,你正在启动 oAuth2 流,你只需点击第一个 oAuth 终结点并将参数传递给它access_type=offline
(以及任何其他参数)。这将确保在他们授予初始权限时,将返回刷新令牌而不是访问令牌。使用该刷新令牌,可以根据需要将其交换为多个访问令牌(访问令牌的生存期约为一小时。我不知道刷新令牌的有效期,但是在我自己的登录 cookie 过期之前,我从未有过刷新令牌过期,然后当我的用户重新登录到我的应用程序时,我只会获得一个新的刷新令牌)。
以下是有关如何使用刷新令牌的更多信息;另请注意,各种Google API客户端库使其非常流畅。
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
此外,几个月前来自Google Developers Live广播的视频教程可能有助于说明这一点:http://www.youtube.com/watch?v=hfWe1gPCnzc - 它使用的是oAuth游乐场而不是客户端库,但概念是相同的。
答案是使用 google-api-php-client,创建一个交互式身份验证页面,并使用新的 API 控制台正确设置 YouTube API v3。
您可以创建一个非常简单的页面,该页面将为提供的通道进行身份验证,然后将正确的令牌存储在数据库中。已经在一个频道上工作并上传数百个视频。您需要记住在新的 API 控制台下完全激活自己并添加所需的服务。只需继续进行身份验证并添加它所说的服务即可。之后,常规的v3上传过程就可以了。失败时,向组发送电子邮件,他们可以在 10 秒内获得新令牌。
不是最优雅的解决方案,但谷歌的文档远非优雅,Stack Overflow现在是他们的前线支持。
只要坚持下去,总能找到解决方案。不要放弃!
我也不是自己来到这里的,这个页面上的其他答案帮助我一路走到了这一步。谢谢大家。
附言 - 不要忘记范围
$client->setScopes("https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload");