【问题标题】:Extract video id of preceding youtube advertisement提取前面 youtube 广告的视频 id
【发布时间】:2015-01-12 19:03:48
【问题描述】:

我正在编写一个脚本来处理人们必须在实际视频之前观看的 youtube 广告视频。 (开头的这些广告视频只是来自品牌频道的简单 youtube 视频) 我搜索了整个源代码和脚本,但在任何地方都找不到这些广告的视频 ID。肯定是在什么地方,不过好像隐藏的很好。

有人知道去哪里看吗?

【问题讨论】:

  • 你能提供一些更详细的信息吗?您正在使用哪些具体的 API,以及您在哪些代码文件中查找 id?
  • 我说的是播放视频时youtube网页的通用源代码。我正在编写一个greasemonkey 脚本,该脚本需要播放广告视频的视频ID。 (这些广告只是来自品牌频道的简单 youtube 视频)。我的问题是是否可以在页面的源代码中的某处找到广告视频 ID。它必须在脚本中的某个地方也加载了主视频,但我找不到它。

标签: youtube youtube-api ads


【解决方案1】:

我对你的情况做了一些研究。

正如您已经知道的那样,广告视频的视频 ID 绝对不是初始源代码的一部分。 Youtube 向http://googleads.g.doubleclick.net/ API 发出 ajax-Request 以获取相关广告视频的信息。

如果您查看源代码,您会看到很多与 google ads 部分相关的 javascript。通过查看代码,您可以找到 API 的 URL 路由。看截图,只是摘录:

但不幸的是,您不能简单地复制 url 并对其进行远程调用。通过这样做,您会收到 400 Bad Request 响应。

据我所知,缺少参数,这些参数是由 youtube 的 javascript 动态添加的。

如果你比较一下请求,实际上是youtube发出的,你可以看到发送的参数更多:

相比于请求,直接从源代码中复制:

工作请求的结果如下所示:

我尝试了几种方法来使无效的 API 请求工作,但没有找到方法。调试 javascript 并不容易,因为它被混淆和缩小了。但另外,变量的范围在函数内。所以无论如何,您将无法访问它们。

如果您在 XHR 请求之前创建一个 javascript 断点,您可以看到实际的 API 请求:

但它在本地范围内,无法访问它。

稍后,甚至还会向 youtube 数据 API 发出第二个请求,以获取有关广告视频的信息

在我看来,获取视频只有两种方式,都需要运行javascript。

  1. 在 Javascript 运行后查看源代码。然后您可以直接从您的标记中获取 id:

  1. 挂钩 Ajax 请求并直接从您的网络流量中获取数据。

【讨论】:

  • 感谢您的详细解答!我很好奇您是如何在所有 Javascript 运行后设法查看源代码的。当我使用 Firebug 查看源代码时,我找不到任何带有 data-youtube-id 的 html5 视频对象。另外,如果我在所有其他脚本运行后运行 javascript,我应该能够读取该视频 ID,对吧?
  • 我只是用 Chrome 的开发者工具检查了代码。这是一个提到的 SO 问题:stackoverflow.com/questions/5157729/…
  • 他们似乎又改变了他们的标记逻辑。
  • 广告视频 ID 不再在标记中。你能想出任何链接来了解你所说的 api 请求挂钩吗?
  • 其实这只是一个思想实验。因此,如果您查看页面呈现时触发的 AJAX 流量,您可以在请求响应中找到广告视频的 id。但我真的不知道,如何挂钩网络流量,你需要先执行 javascript。
猜你喜欢
  • 2015-02-20
  • 2013-11-24
  • 2011-09-27
  • 2012-12-08
  • 2014-01-31
  • 1970-01-01
  • 2014-12-19
  • 2018-03-12
  • 2014-01-19
相关资源
最近更新 更多