sokil / php-vast
VAST 文档的生成器和解析器
2.2.1
2023-02-03 12:04 UTC
Requires
- php: >=7.1.3
- ext-dom: *
- ext-json: *
Requires (Dev)
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: >=7.5.20
- squizlabs/php_codesniffer: ^3.4.2
README
PHP-VAST
⭐ PHP 上的 VAST 广告生成器和解析器库。
规格
- VAST 2.0 规格: http://www.iab.net/media/file/VAST-2_0-FINAL.pdf
- VAST 3.0 规格: http://www.iab.com/wp-content/uploads/2015/06/VASTv3_0.pdf
- VAST 4.0 规格
- VAST 4.1 规格
- VAST 示例
安装
通过 composer 安装库
composer require sokil/php-vast
快速开始
// create document $factory = new \Sokil\Vast\Factory(); $document = $factory->create('4.1'); // insert Ad section $ad1 = $document ->createInLineAdSection() ->setId('ad1') ->setAdSystem('Ad Server Name') ->setAdTitle('Ad Title') ->addImpression('http://ad.server.com/impression', 'imp1'); // create creative for ad section $linearCreative = $ad1 ->createLinearCreative() ->setDuration(128) ->setId('013d876d-14fc-49a2-aefd-744fce68365b') ->setAdId('pre') ->setVideoClicksClickThrough('http://entertainmentserver.com/landing') ->addVideoClicksClickTracking('http://ad.server.com/videoclicks/clicktracking') ->addVideoClicksCustomClick('http://ad.server.com/videoclicks/customclick') ->addTrackingEvent('start', 'http://ad.server.com/trackingevent/start') ->addTrackingEvent('pause', 'http://ad.server.com/trackingevent/stop'); // add closed caption file (Closed Caption support starts on VAST 4.1) $linearCreative ->createClosedCaptionFile() ->setLanguage('en-US') ->setType('text/srt') ->setUrl('http://server.com/cc.srt'); // add 100x100 media file $linearCreative ->createMediaFile() ->setProgressiveDelivery() ->setType('video/mp4') ->setHeight(100) ->setWidth(100) ->setBitrate(2500) ->setUrl('http://server.com/media1.mp4'); // add 200x200 media file $linearCreative ->createMediaFile() ->setProgressiveDelivery() ->setType('video/mp4') ->setHeight(200) ->setWidth(200) ->setBitrate(2500) ->setUrl('http://server.com/media2.mp4'); // get dom document $domDocument = $document->toDomDocument(); // get XML string echo $document;
这将生成
<?xml version="1.0" encoding="UTF-8"?> <VAST version="2.0"> <Ad id="ad1"> <InLine> <AdSystem>Ad Server Name</AdSystem> <AdTitle><![CDATA[Ad Title]]></AdTitle> <Impression id="imp1"><![CDATA[http://ad.server.com/impression]]></Impression> <Creatives> <Creative> <Linear> <Duration>00:02:08</Duration> <VideoClicks> <ClickThrough><![CDATA[http://entertainmentserver.com/landing]]></ClickThrough> <ClickTracking><![CDATA[http://ad.server.com/videoclicks/clicktracking]]></ClickTracking> <CustomClick><![CDATA[http://ad.server.com/videoclicks/customclick]]></CustomClick> </VideoClicks> <TrackingEvents> <Tracking event="start"><![CDATA[http://ad.server.com/trackingevent/start]]></Tracking> <Tracking event="pause"><![CDATA[http://ad.server.com/trackingevent/stop]]></Tracking> </TrackingEvents> <MediaFiles> <ClosedCaptionFiles> <ClosedCaptionFile language="en-US" type="text/srt"> <![CDATA[http://server.com/cc.srt]]> </ClosedCaptionFile> </ClosedCaptionFiles> <MediaFile delivery="progressive" type="video/mp4" height="100" width="100" bitrate="2500"> <![CDATA[http://server.com/media1.mp4]]> </MediaFile> <MediaFile delivery="progressive" type="video/mp4" height="200" width="200" bitrate="2500"> <![CDATA[http://server.com/media2.mp4]]> </MediaFile> </MediaFiles> </Linear> </Creative> </Creatives> </InLine> </Ad> </VAST>
自定义规格支持
VAST 文档元素在其规格中完全描述,但一些广告服务器可能支持自定义元素和属性。这个库严格遵循规格,通常因为 VAST 的两种方言可能相互冲突。您可以编写自己的方言,通过覆盖元素构建器来创建任何您想要的元素和属性。
VAST 方言在 \Sokil\Vast\ElementBuilder
类中描述。通过覆盖它,您可以创建您自己的类实例,并添加任何设置器。
首先,让我们创建一个用于 MediaFile
的类,并添加一些自定义属性
<?php namespace Acme\Vast\ElementBuilder\Element; use Sokil\Vast\Creative\InLine\Linear\MediaFile; class AcmeMediaFile extends MediaFile { public function setMinDuration($seconds) { $seconds = (int)$seconds; if ($seconds <= 0) { thow new \InvalidArgumentException('Invalid min duration specified, must be positive int') } $this->domElement->setAttribute('minDuration', $seconds); return $this; } }
现在,我们需要覆盖默认的元素构建器并创建我们自己的 MediaFile
工厂方法
<?php namespace Acme\Vast\ElementBuilder; use Sokil\Vast\ElementBuilder; use Acme\Vast\ElementBuilder\Element\AcmeMediaFile; class AcmeElementBuilder extends ElementBuilder { /** * <Ad><InLine><Creatives><Creative><Linear><MediaFile> * * @param \DOMElement $mediaFileDomElement * * @return AcmeMediaFile */ public function createInLineAdLinearCreativeMediaFile(\DOMElement $mediaFileDomElement) { return new AcmeMediaFile($mediaFileDomElement); } }
现在,我们需要配置 VAST 工厂以使用覆盖的元素构建器
<?php use Acme\Vast\ElementBuilder\AcmeElementBuilder; use Sokil\Vast\Factory; $elementBuilder = new AcmeElementBuilder(); $factory = new Factory($elementBuilder); $document = $factory->create('4.1'); $ad = $document->createInLineAdSection(); $creative = $ad->createLinearCreative(); $mediaFile = $creative->createMediaFile(); $mediaFile->setMinDiration(10);
如果您有广告服务器并希望添加对自定义标签的支持,创建自己的库并添加自定义元素和元素构建器,或向此库提交拉取请求。