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令牌在长时间上传时过期的主要内容,如果未能解决你的问题,请参考以下文章

无需最终用户身份验证的 Youtube API v3

Laravel 护照延长访问令牌过期时间

DocuSign:在 JWT 令牌中设置过期 - 始终获取一小时过期的访问令牌

如果一周内未使用令牌,则令牌应过期

如何在到期后使用 OAuth 2.0 以及 iOS 应用程序中的 Youtube API 获取新的访问令牌

Youtube API nextPageToken 变得无效