-5

** 更新 **

谷歌似乎真的通过绝对要求用户交互来上传视频而把地球上的每一个人都搞砸了。我当然知道,它们是免费的。正是我几年前警告客户的内容,所以我不需要被提醒。谢谢你。

所以我想尝试把它带到一个不同的方向,只是找到一个漏洞和一个解决方法,尽管谷歌完全缺乏支持或以任何方式关心开发人员和他们必须做的事情,但仍然继续做我们正在做的事情处理。

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

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

但是那个令牌呢?有谁知道令牌持续多久?

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

换句话说,我试图将用户交互变成减速带而不是混凝土墙。

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

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


谷歌似乎已经完全拔掉了现有仪表板的插头。

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

该链接现在是 404'd。在不同系统上尝试了几种不同的浏览器。

已经在新的 Google APIs Console 下注册,但仍然遇到问题。

// 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 上传在所有情况下都变成交互式的,从而完全排除了自动上传生成内容的平台的所有可能性。

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

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

4

5 回答 5

3

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

于 2013-09-20T16:26:38.547 回答
1

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

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

于 2013-09-20T01:37:14.400 回答
0

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

于 2013-09-19T21:05:50.470 回答
0

我想这里有几个问题需要回答。

1) 较旧的 API 控制台尚未删除,但我注意到在 Google 推出新的“云控制台”时它和较新的 API 控制台出现间歇性中断。

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

3) 你是对的,使用 v3 的 API,你不能进行全面的自动上传,因为 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 游乐场而不是客户端库,但概念是一样的。

于 2013-09-19T22:39:34.647 回答
0

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

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

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

坚持下去,总能找到解决办法。不要放弃!

我自己也不是自己到这里的,此页面上的其他答案帮助我一直走到这一步。多谢你们。

PS - 不要忘记范围

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

于 2013-09-22T03:04:04.183 回答