由Google破坏的YouTube API。 “Google身份验证失败了。原因:NoLinkedYouTubeAccount'

时间:2013-09-19 19:56:02

标签: youtube-api google-oauth

**更新**

谷歌真的似乎只是通过绝对要求用户互动上传视频来搞砸地球上的每一个人。我当然知道,他们是免费的。正是我几年前向客户发出的警告,所以我不需要提醒。谢谢。

因此,我想尝试以不同的方向采取这一措施,尽管谷歌完全缺乏支持或关心开发人员以及什么方面的关注,我们仍然会找到一个漏洞和解决办法仍然继续做我们正在做的事情他们必须处理。

如果您实际上可以拨打电话号码并与人谈论YouTube合作伙伴访问权限,那将会有所不同,但您可以更快地访问Illuminati。

OAuth 2.0现在是唯一受支持的身份验证方法期。它确实需要用户互动。

但那个令牌怎么样?有人知道令牌持续多久了吗?

如果我只使用一次用户交互获取一个令牌并将其放入数据库中,那么我可以在之后自动完成数百或数千次交互。

换句话说,我正试图将用户互动转变为减速而不是混凝土墙。

如果有人有任何获得该令牌的例子,缓存它并在之后使用它,那对我来说就是天赐之物。

感谢您的评论和帮助。我并不感到惊讶,YouTube开发者论坛刚刚折叠,并说要来到这里:)


Google似乎完全取消了现有仪表板上的插件。

https://code.google.com/apis/youtube/dashboard/gwt/index.html

该链接现已404。从不同系统上的几个不同浏览器中尝试。

已在新的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帐户相关联,因此尝试使用此流程授权请求将生成NoLinkedYouTubeAccount错误。“

从所有报告中可以看出,谷歌已迫使YouTube上传在所有情况下都变得互动,从而排除了自动上传所生成内容的平台的所有可能性。

对此过程的任何帮助或见解表示赞赏。

P.S - 哦,自从我查看该系统已经有一段时间了,谷歌关闭了YouTube开发者论坛并说“你”现在负责他们的支持:)

5 个答案:

答案 0 :(得分:3)

OAuth2支持通过离线访问类型参数避免用户交互的能力(即使用access_type = offline)。查看Google documentation了解详情。

答案 1 :(得分:1)

解决方案非常简单。您的应用需要使用oauth来请求离线访问。它将被赋予一个访问cide,您可以将其转换为刷新令牌,这是您存储在数据库中的内容。这不会过期。实际上它有时确实如此,但这是另一个故事。每当您需要访问api时,请使用存储的刷新令牌来请求您在每次api调用中包含的访问令牌。

有关详细信息,请参阅https://developers.google.com/accounts/docs/OAuth2WebServer

答案 2 :(得分:0)

我不知道你做了什么,但https://code.google.com/apis/youtube/dashboard/gwt/index.html对我来说完全没问题。也许这是一个暂时的问题。如果您不想进行任何用户互动,则必须使用YouTube API v2,或者您必须将v3与不需要身份验证的方法一起使用,或者您必须提供自己的YouTube帐户凭据,这是不推荐的,可能不适合您的情况。

答案 3 :(得分:0)

我认为有几个问题需要回答。

1)旧的API控制台尚未被删除,但我注意到在谷歌推出新的“云控制台”时间歇性中断以及更新的API控制台。

2)ClientLogin于2012年4月正式弃用,而不仅仅是48小时前。 Jeff Posnick在他的博客(apiblog.youtube.com)上详细介绍了几个月内的所有变化(以及相关的变化,如AuthSub,Youtube Direct等)。

3)你是对的,使用v3的API,你不能全面自动上传,因为oAuth2流需要用户交互。但是,鉴于您的用例描述有限,使用刷新令牌可能是您最好的选择。如果内容是用户生成的,那么他们必须登录到您的应用程序,对吗? (以便您的应用知道要利用哪些凭据进行上传)。在他们登录您的应用程序时,您正在启动oAuth2流程,您只需要访问第一个oAuth端点并将参数access_type=offline(以及任何其他参数)传递给它。这将确保在授予初始权限时,您返回刷新令牌而不是访问令牌。使用该刷新令牌,您可以根据需要将其交换为多个访问令牌(访问令牌可以存活大约一个小时。我不知道刷新令牌有多长,但我自己的登录cookie之前从未过期当我的用户重新登录我的应用程序时,我只是得到一个新的。)

以下是有关如何使用刷新令牌的更多信息;请注意,各种谷歌api客户端库使它非常流畅。

https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

此外,几个月前来自Google Developers Live广播的视频教程可能有助于说明问题:http://www.youtube.com/watch?v=hfWe1gPCnzc - 它使用oAuth游乐场而不是客户端库,但概念是相同的。

答案 4 :(得分:0)

答案是使用google-api-php-client,创建交互式身份验证页面,并使用新的API控制台正确设置YouTube API v3。

您可以创建一个非常简单的页面,该页面将对提供的通道进行身份验证,然后将正确的令牌存储在您的数据库中。已经在一个频道上工作并上传了数百个视频。您需要记住在新的API控制台下完全激活自己并添加所需的服务。只需保持身份验证并添加它所需的服务即可。之后,常规v3上传过程就可以了。失败时向群组发送电子邮件,他们可以在10秒内获得新令牌。

不是最优雅的解决方案,但Google的文档远非优雅,而Stack Overflow现在是他们的前线支持。

只需挂在那里,总能找到解决方案。不要放弃!

我也没有自己到这里来,这个页面上的其他答案帮助我一路走到这一步。谢谢你们。

P.S - 不要忘记范围

$ client-> setScopes(“https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload”);