YouTube API "Queries per day" 超过大约 3 小时
YouTube API "Queries per day" exceed in about 3 hours
我创建了一个使用 YouTube 数据 API 将视频上传到 YouTube 的程序。
我的程序流程是:
- 使用 URL 在 google 页面中登录 google 帐户
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&prompt=consent&include_granted_scopes=true&client_id={YouTubeAppId}&redirect_uri={RedirectURL}&response_type=code&scope={Uri.EscapeDataString(https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/userinfo.profile)}
- 交换代码以访问令牌:
POST
https://oauth2.googleapis.com/token
- 获取用户的频道 ID:
GET
https://youtube.googleapis.com/youtube/v3/channels?part=snippet,statistics&mine=true&access_token={AccessToken}
。
然后我 select 视频并将其拆分为 1Mb 块。
- 获取上传 URL:
POST
https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status,contentDetails&access_token={token}
型号
- 在上一步中使用
Location
header 中的 URL 发送视频块。
我还有 10 分钟的计时器,可以刷新访问令牌。
foreach (SocialLogin item in logins.Where(x => (x.UpdatedOn.AddSeconds(x.ExpirationSeconds) - DateTime.Now).TotalSeconds < 600))
{
SocialLogin youModel = await _youtubeService.RefreshTokenAsync(item);
youModel.UpdatedOn = DateTimeOffset.Now;
youModel.ExpirationSeconds = 3600;
await _loginRepository.UpdateAsync(youModel);
}
此函数使用 URL https://oauth2.googleapis.com/token
上的 POST
从数据库中获取所有 YouTube 登录并为那些在 10 分钟内过期的登录刷新令牌。
我上传了几个 15mb 的视频并且效果很好,但在它之后每天的查询配额计算了大约 2500 个查询。我为所有进行 API 调用的方法添加了断点并将它们全部计算在内。总共有大约 50 个请求。几个小时后,我又发送了 2 个 30mb 的视频,这个配额有大约 8000 个查询。这个配额是怎么计算的?它计算什么?
现在是 0,但昨天是 8120。
首先,您必须承认 YouTube 数据 API 不计算您通过其 Videos.insert
端点上传的视频内容的兆字节数。
那么您必须承认 API 没有考虑端点调用的数量。
鉴于每个端点都有 attached a quota cost,YouTube 数据 API 占您进行的所有端点调用的配额成本单位总和在特定的一天。
例如,每日配额分配为 10000 个单位,由于一个视频上传的费用为 1600 个单位,您最多允许上传 6 个视频,无论其实际大小如何(如果不考虑费用您拨打的其他 API 个电话)。
我创建了一个使用 YouTube 数据 API 将视频上传到 YouTube 的程序。
我的程序流程是:
- 使用 URL 在 google 页面中登录 google 帐户
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&prompt=consent&include_granted_scopes=true&client_id={YouTubeAppId}&redirect_uri={RedirectURL}&response_type=code&scope={Uri.EscapeDataString(https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/userinfo.profile)}
- 交换代码以访问令牌:
POST
https://oauth2.googleapis.com/token
- 获取用户的频道 ID:
GET
https://youtube.googleapis.com/youtube/v3/channels?part=snippet,statistics&mine=true&access_token={AccessToken}
。 然后我 select 视频并将其拆分为 1Mb 块。 - 获取上传 URL:
POST
https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status,contentDetails&access_token={token}
型号 - 在上一步中使用
Location
header 中的 URL 发送视频块。
我还有 10 分钟的计时器,可以刷新访问令牌。
foreach (SocialLogin item in logins.Where(x => (x.UpdatedOn.AddSeconds(x.ExpirationSeconds) - DateTime.Now).TotalSeconds < 600))
{
SocialLogin youModel = await _youtubeService.RefreshTokenAsync(item);
youModel.UpdatedOn = DateTimeOffset.Now;
youModel.ExpirationSeconds = 3600;
await _loginRepository.UpdateAsync(youModel);
}
此函数使用 URL https://oauth2.googleapis.com/token
上的 POST
从数据库中获取所有 YouTube 登录并为那些在 10 分钟内过期的登录刷新令牌。
我上传了几个 15mb 的视频并且效果很好,但在它之后每天的查询配额计算了大约 2500 个查询。我为所有进行 API 调用的方法添加了断点并将它们全部计算在内。总共有大约 50 个请求。几个小时后,我又发送了 2 个 30mb 的视频,这个配额有大约 8000 个查询。这个配额是怎么计算的?它计算什么?
现在是 0,但昨天是 8120。
首先,您必须承认 YouTube 数据 API 不计算您通过其 Videos.insert
端点上传的视频内容的兆字节数。
那么您必须承认 API 没有考虑端点调用的数量。
鉴于每个端点都有 attached a quota cost,YouTube 数据 API 占您进行的所有端点调用的配额成本单位总和在特定的一天。
例如,每日配额分配为 10000 个单位,由于一个视频上传的费用为 1600 个单位,您最多允许上传 6 个视频,无论其实际大小如何(如果不考虑费用您拨打的其他 API 个电话)。