Youtube API令牌在长时间上传时过期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Youtube API令牌在长时间上传时过期相关的知识,希望对你有一定的参考价值。
我正在使用以下脚本将视频上传到我的YouTube频道。 https://github.com/youtube/api-samples/blob/master/php/resumable_upload.php
现在一切正常,除非我想上传大型视频大概需要上传1.5到2.5小时。
在上传过程中,令牌在60分钟后过期,似乎脚本在上传后停止工作。
所以在上传循环停止工作后计划的所有内容(缩略图,下一个视频等)
这是上传循环:
while (!$status && !feof($handle)) {
$chunk = fread($handle, $chunkSizeBytes);
$status = $media->nextChunk($chunk);
$sizecount = $sizecount+$chunkSizeBytes;
$fp = fopen('./include/status.txt', "w");
fwrite($fp, $sizecount);
fclose($fp);
}
我的工作目前在周围:<meta http-equiv="refresh" content="600">
所以是的,网站每10分钟重新加载一次,再次获得令牌并恢复上传。
我认为这是处理这个问题的一种不好的方法,但我并不真正理解“会话”和“令牌”以及这些东西。有没有更好的方法来制作长期令牌或刷新令牌?
我已经做了这个改变,所以我在令牌数组中得到了一个刷新令牌:
$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setAccessType("offline");
$client->setApprovalPrompt("force");
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['php_SELF'],
FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
这是新的:
$client->setAccessType("offline");
$client->setApprovalPrompt("force");
这似乎给了我一个刷新令牌,但我不知道如何处理它或将刷新命令放入这个“while”循环
如何在上传时刷新令牌?
我的第一个想法是把这个脚本的开头放在我再次获得令牌的while循环中:
while (!$status && !feof($handle)) {
$chunk = fread($handle, $chunkSizeBytes);
$status = $media->nextChunk($chunk);
$sizecount = $sizecount+$chunkSizeBytes;
$fp = fopen('./include/status.txt', "w");
fwrite($fp, $sizecount);
fclose($fp);
$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setAccessType("offline");
$client->setApprovalPrompt("force");
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
$youtube = new Google_Service_YouTube($client);
$tokenSessionKey = 'token-' . $client->prepareScopes();
if (isset($_GET['code'])) {
if (strval($_SESSION['state']) !== strval($_GET['state'])) {
die('The session state did not match.');
}
$client->authenticate($_GET['code']);
$_SESSION[$tokenSessionKey] = $client->getAccessToken();
header('Location: ' . $redirect);
}
if (isset($_SESSION[$tokenSessionKey])) {
$client->setAccessToken($_SESSION[$tokenSessionKey]);
}
}
但这不能正确吗?!它会开始每1MB块获取一次令牌。这意味着在上传视频时大约需要5000次!
天啊我发现我的自我 -
我不得不在php ini中设置“session.cache_expire”...
它被设置为session.cache_expire=3600
什么意思是60分钟......
我改为session.cache_expire=68400
<一天...现在它仍然在1小时后上传:D
希望有一天有人能发现这些信息有用
编辑:可以确认它有效:) uploadet 5大5-7GB视频过夜
以上是关于Youtube API令牌在长时间上传时过期的主要内容,如果未能解决你的问题,请参考以下文章
DocuSign:在 JWT 令牌中设置过期 - 始终获取一小时过期的访问令牌