Video 如何从Youtube下载视频广告?
我想从YouTube下载一些(我是说很多)视频广告(不是视频,而是之前播放的广告)用于研究目的 对实现这一目标的工具或方法有何建议?我不介意在我的hack上做一些编程,但我目前不知道如何做。此外,YouTube不是一项要求;其他视频网站的视频广告对我也很有用 当我发现你的问题时,我想玩它会很有趣, 正如我最近开发的站点()允许您 从包括YouTube在内的许多网站下载视频 我只查看了Youtube的广告系统,这对其他系统不起作用(很可能)。YouTube的好处是,你可以直接从视频页面获取所有必要的信息,因此很容易快速抓取(我在一个非常小的服务器上一天下载了将近2200万个视频页面)。所以你要找的部分是Video 如何从Youtube下载视频广告?,video,youtube,ads,Video,Youtube,Ads,我想从YouTube下载一些(我是说很多)视频广告(不是视频,而是之前播放的广告)用于研究目的 对实现这一目标的工具或方法有何建议?我不介意在我的hack上做一些编程,但我目前不知道如何做。此外,YouTube不是一项要求;其他视频网站的视频广告对我也很有用 当我发现你的问题时,我想玩它会很有趣, 正如我最近开发的站点()允许您 从包括YouTube在内的许多网站下载视频 我只查看了Youtube的广告系统,这对其他系统不起作用(很可能)。YouTube的好处是,你可以直接从视频页面获取所有必要
;ytplayer.config={(.*)}代码>包含内联json对象(易于处理)。你不需要其他任何东西
如果您不想从HTML解析它,您可以通过在任何Youtube视频链接的末尾添加参数&spf=prefetch
直接获取json对象,例如
并非所有YouTube视频都显示广告(根据我的统计,只有18%的视频显示广告)。只需在json对象内查找ad_标记
键,即可验证是否为视频启用了ads
YouTube使用三种不同的广告系统:
- 广告
- AdSense/ADX
- 第三方系统
提供来自两个不同来源的广告:
-上传到YouTube上用作广告的视频(大部分仅显示部分视频)
-来自外部来源的视频(第三方ads服务器)
他们的出发点都是一样的。找到json对象内部的dynamic\u allocation\u ad\u tag
键。它包含指向双击服务器的url。除非您更改此部分sz=WIDTHxHEIGHT代码>具有真实AR值,例如sz=480x70480x360480x361代码>
您希望在同一json文件中找到另外三个键tpas\u partner\u id
、tpas\u video\u id
和video\u id
(是url中的视频id),因为它们将用于第三方广告系统
现在您可以点击双击url,该url将返回一个XML文件,其中包含有关此视频将提供的广告的信息。整个文件都很有趣,并且充满了重要的信息(因此您可能应该将其与视频一起存储)。查找这三个键AdSystem
、AdTitle
和Description
- AdSystem:告诉您使用什么系统来提供广告。有三个选项(如我前面提到的)
- 广告
- AdSense/ADX
- GDFP
- AdTitle:告诉您它是什么类型的广告(例如视频或横幅)
- 说明:告诉您与AdTitle基本相同,但有时它包含对广告的说明
如果广告由adsense系统(adsense或adx)提供,则此xml包含广告的所有信息,包括广告的持续时间和直接链接。该链接正是您要查找的内容,您可以在一个键MediaFile
下找到它
链接大部分看起来像这样http://www.youtube.com/get_video?video_id=LCeDi-d5CRg&ts=1391921207&t=CyJEI0XYwJVJEYE5CVhqY-DF3KQ&gad=1
并将您重定向到mp4格式的真实文件。如果广告系统是ADX,您将获得一个直接链接,主要指向flv文件,例如http://playtime.tubemogul.com/ad_promoted_videos/4799351_dhxsYlMYHmLMmxL0oBem_1390593897.flv
如果ad是来自第三方系统GDFP的服务器,则必须调用不同的服务器。对于第三方广告,Youtube使用FreeWheel服务。要获取广告数据,必须准备一个XML请求,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<adRequest profile="{profile}" networkId="10613" version="1">
<capabilities>
<expectMultipleCreativeRenditions />
<supportsAdUnitInMultipleSlots />
<supportsSlotCallback />
<supportNullCreative />
<supportAdBundle />
<supportsFallbackAds />
<autoEventTracking />
<requiresRendererManifest />
<requiresVideoCallbackUrl />
</capabilities>
<visitor caller="AS3-5.6.0-r9954-1305270957">
<httpHeaders>
<httpHeader value="https://www.youtube.com/watch?v={video_id}" name="referer" />
<httpHeader value="12,0,0,38" name="x-flash-version" />
</httpHeaders>
</visitor>
<keyValues>
<keyValue key="_fw_distributorvideoassetid" value="{video_id}" />
<keyValue key="_fw_yt_type" value="short" />
<keyValue key="_fwu:10613:lang" value="eng" />
</keyValues>
<siteSection pageViewRandom="{random}" customId="youtube_watch" siteSectionNetworkId="{tpas_partner_id}">
<videoPlayer>
<videoAsset autoPlay="true" duration="318" videoPlayRandom="{random}" customId="{tpas_video_id}" videoAssetNetworkId="{tpas_partner_id}">
<adSlots height="390" defaultSlotProfile="{profile}" width="699" compatibleDimensions="2560,1440">
<temporalAdSlot height="390" adUnit="preroll" timePosition="0" customId="0_1" width="699" />
<temporalAdSlot height="390" adUnit="overlay" timePosition="0" customId="0_2" width="699" />
</adSlots>
</videoAsset>
<adSlots>
<nonTemporalAdSlot height="60" customId="0_5" width="300" acceptCompanion="true" />
<nonTemporalAdSlot height="250" customId="0_6" width="300" acceptCompanion="true" />
</adSlots>
</videoPlayer>
<adSlots />
</siteSection>
</adRequest>
您可能在{}中发现了多个变量。您必须用自定义数据替换它们,主要是从json对象获得的数据
- tpas\u partner\u id:从json对象获取
- tpas\u video\u id:从json对象获取
- random:以微秒为单位的自历元以来的时间
- 视频\u id:从json对象(或youtube url)获取
- 配置文件:我找到了两个不同的配置文件。有时一个有效,另一个无效,反之亦然。每次都可以尝试
10613:10613\u youtube\u as3\u播放器
和10613:youtube2
现在,将此XML文件作为POST请求发送到https://2975c.v.fwmrm.net/ad/p/1?
(不要忘了发送内容类型为应用程序/xml
)
响应包含另一个XML文件,其中包含广告的所有必要数据,包括各种共振峰和维度的直接链接。您可以在键资产下找到它们。同样,您可能应该将整个文件与视频一起存储,因为它包含广告的附加数据
就是这样,快乐狩猎。一个简单得多的解决方案是右键单击视频窗口,然后选择Stats for nerds
此时将出现一个统计信息列表,查找视频ID
并复制它-仅复制/
字符前面的字符串部分,如所示
https://www.youtube.com/watch?v=XXXXXXXXX
<div class="html5-video-info-panel" data-layer="4">
<button class="html5-video-info-panel-close ytp-button" title="close">[x]</button>
<div class="html5-video-info-panel-content">
<div>
<div>Video ID / sCPN</div>
<span>I4VzIvGdTxI / GD6Y 2G9R N3W5</span>
</div>
<div>
<div>Viewport / Frames</div>
<span>640x360 / 0 dropped of 1706</span>
</div>
<!-- a lot of divs -->
</div>
</div>
$(".html5-video-info-panel-content").children[0].children[1]
.textContent.replace(" ","").split("/")[0]
"https://www.youtube.com/watch?v="