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 获取它们?
Java 示例代码示例 youtube 数据 api v3 和授权方法作为 api 密钥
使用 Youtube Data API V3 和 Google API Client PHP 将视频上传到 Youtube - 获取 401(未经授权)消息