如何从YouTube下载视频广告? [英] How to download video ads from Youtube?
问题描述
我想从YouTube上下载一些(我是说很多)视频广告(不是视频,而是之前播放的广告),用于研究目的。
对实现这一目标的工具或方法有什么建议吗?我不介意一些编程在我的黑客,但我现在不知道如何。此外,YouTube也不是必须的;其他视频网站的视频广告也适用于我。
推荐答案
当我发现你的问题时,我想玩它会很有趣, 正如我最近开发的站点(http://savedeo.com)允许您 从包括YouTube在内的许多网站下载一段视频。
我只查看了YouTube的广告系统,这很可能不适用于其他系统。YouTube的好处是,你可以直接从一个视频页面获取所有必要的信息,所以更容易快速爬行(我在一个非常小的服务器上一天下载了近2200万个视频页面)。因此,您要查找的部分是;ytplayer.config = {(.*?)};
,它包含内联json对象(易于处理)。您不需要其他任何东西。
如果您不想从HTML中解析它,您可以通过在任何YouTube视频链接的末尾添加参数&spf=prefetch
直接获得json对象,例如https://www.youtube.com/watch?v=bbEoRnaOIbs&spf=prefetch
并不是每个YouTube视频都有广告(根据我的统计,只有18%的视频有广告)。只需在json对象内部查找ad_tag
键,即可验证是否为视频启用了ADS。
YouTube使用三种不同的广告系统:
- AdSense
- AdSense/ADX
- 第三方系统
提供来自两个不同来源的广告: -上传到YouTube上的视频用作广告(大部分只显示部分视频) -来自外部来源(第三方广告服务器)的视频
它们的起点都是相同的。在json对象中找到dynamic_allocation_ad_tag
键。它包含一个指向DoubleClick服务器的URL。除非您将此部分sz=WIDTHxHEIGHT;
更改为真实的AR值,例如sz=480x70,480x360,480x361;
,否则此URL将不起作用。
您希望在同一json文件中找到另外三个密钥tpas_partner_id
、tpas_video_id
和video_id
(来自URL的Video_id),因为这些密钥将用于第三方广告系统。
现在您可以点击DoubleClick URL,它将返回一个XML文件,其中包含将为该视频提供的广告的信息。整个文件很有趣,并且充满了重要信息(所以您可能应该将其与视频存储在一起)。查找这三个键AdSystem
、AdTitle
和Description
。
- AdSystem:告诉您使用什么系统来投放广告。有三种选择(正如我之前提到的)
- AdSense
- AdSense/ADX
- GDFP
- 广告标题:告诉您广告的类型(如视频或横幅)
- 描述:基本与广告标题相同,但有时包含对广告的描述
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
如果广告是来自第三方系统的服务器,GDFP,您必须调用不同的服务器。对于第三方广告,YouTube使用的是自由轮服务。要获取广告数据,您必须准备一个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_Partner_id:从json对象获取
- tpas_Video_id:从json对象获取
- 随机:从纪元开始的时间
- Video_id:从json对象(或YouTube url)获取
- 配置文件:我发现两个不同的配置文件。有时一个有效,另一个无效,反之亦然。每次都尝试
10613:10613_youtube_as3_player
和10613:youtube2
。
现在,将此XML文件作为POST请求发送给https://2975c.v.fwmrm.net/ad/p/1?
(不要忘记与内容类型application/xml
一起发送)。
响应包含另一个XML文件,其中包含广告的所有必要数据,包括各种共振峰和维度中的直接链接。您可以在asset
项下找到它们。同样,您可能应该将整个文件与视频一起存储,因为它包含广告的附加数据。
就是这样,狩猎快乐。
这篇关于如何从YouTube下载视频广告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!