Youtube API V3 和 Etag

Posted

技术标签:

【中文标题】Youtube API V3 和 Etag【英文标题】:Youtube API V3 and Etag 【发布时间】:2014-03-12 05:22:35 【问题描述】:

我使用 youtube api v3,我想了解 Etag 是如何工作的。我想将它用于缓存目的,但我不知道在 php 中该做什么。 你能告诉我etag恢复后要遵循的步骤吗?请。感谢您的帮助。

【问题讨论】:

有关在 PHP 客户端中使用 etags 的详细信息,请参阅***.com/questions/27800007/… 【参考方案1】:

根据 youtube 文档 (https://developers.google.com/youtube/v3/getting-started#etags),eTag 基本上用于确定资源是否已更改。将它们用于:

    优化 - 在您的应用中缓存 youtube 资源可以减少带宽和延迟。缓存时,存储 eTag 以便在获取资源时包含它。如果资源没有改变,你会得到一个 304 响应码(NOT MODIFIED),这意味着你可以使用你的缓存版本。否则,您将获得资源的更新版本。

    配额使用情况 - 您可以通过缓存 youtube 数据来减少使用配额的数量。第一次获得资源时,您将利用您的配额。在显示资源之前,首先检查您的缓存资源是否已更改,这将只花费您 1 个配额单位。如果资源没有改变,youtube 会返回 304 响应。如果它发生了变化,您可以再次获得资源,根据您获得的内容花费不同的配额单位。有关您的配额的更多信息:(https://developers.google.com/youtube/v3/getting-started#quota)。

    覆盖保护 - 如果您要覆盖资源,包括 eTag 将确保您不会覆盖较新版本的资源。

eTag 是 HTTP 1.1 规范 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.19) 的一部分,用于请求/响应的标头中。这是一篇很好的文章,在低层次上讨论了它们:http://www.ibuildings.com/blog/2013/07/etags-uninitiated

就在 PHP 中使用 eTags 而言,我只能提出一些建议,因为我从未这样做过。 YouTube 会为供稿和供稿中的单个项目返回 eTag,我不知道如何将它们用于供稿中的单个项目。但是要获取原始提要本身,基本上您将使用 curl 并将 eTag 添加到请求的标头 (PHP cURL custom headers)。您可能还想查看 http_cache_etag (http://www.php.net/manual/en/function.http-cache-etag.php)

【讨论】:

非常感谢您的回答和 J Mac。我会研究它 @Redtopia,此答案的配额使用部分不正确。 jsfiddle.net/fw3776vs 此链接是节点代码(不幸的是它不在 JSFiddle 中运行),但它消耗 1000 个配额点的调用,但对所有不是第一个调用的调用使用 etag。如果您在运行控制台后查看控制台,仍然使用了 1000 个配额点。自己运行。 +1 对于@ramr 所说的,使用 etag 仅有助于客户端,但每次调用仅消耗 1 个配额。 @ramr - 并非所有 API 调用都是等效的……有些调用比其他调用使用更多的配额。如果您正在缓存您的数据,则只需 1 个单位的配额即可检查 eTag 版本。如果资源已更新,那么您可以进行 API 调用,该调用将使用更多配额来更新您的缓存资源,【参考方案2】:

我一直在寻找类似的信息,但在 youtube 网站上找不到明确的示例。另一方面,似乎 facebook 正在使用类似的方法(Etags 来检查资源是否已更改),我在 facebook 开发人员区域找到的这两个链接可能会有所帮助:

https://developers.facebook.com/docs/reference/ads-api/etags-reference/ 和 https://developers.facebook.com/blog/post/627/

第一个以更简单、更详细的方式解释了如何使用 etag,并提供了一些请求/响应示例。

第二个链接提供了一个 PHP 示例,说明如何检索资源并提取 etag 并在后续请求中使用它。

当然,这些链接包含与 facebook 网站相关的信息,但在很大程度上,它们也可以应用于 youtube。

【讨论】:

【参考方案3】:

我不确定是否还有人感兴趣,但我已经发布了关于如何在使用 youtube api here 时使用 etag 的答案。这个想法不仅适用于 youtube api。文章很长,希望对您有所帮助。

【讨论】:

以上是关于Youtube API V3 和 Etag的主要内容,如果未能解决你的问题,请参考以下文章

YouTube 频道中的“已发布视频”和“上传”有啥区别?以及如何通过 YouTube Data v3 API 获取它们?

Youtube API v3 搜索视频、检索标题和 url

Java 示例代码示例 youtube 数据 api v3 和授权方法作为 api 密钥

YouTube 数据 API v3 评论列表

使用 Youtube Data API V3 和 Google API Client PHP 将视频上传到 Youtube - 获取 401(未经授权)消息

如何使用 YouTube API V3 获取频道