npm install vast-xml
var VAST = require('vast-xml');
var vast = new VAST();
var ad = vast.attachAd({
id : 1
, structure : 'inline'
, sequence : 99
, AdTitle : 'Common name of the ad'
, AdSystem : { name: 'Test Ad Server', version : '1.0' }
});
ad.attachImpression({
id: "23"
, url: "http://impression.com"
});
ad.attachImpression({
id: "sample-server"
, url: "http://sample-impression.com"
});
var creative = ad.attachCreative('Linear', {
AdParameters : '<xml></xml>'
, Duration : '00:00:30'
});
creative.attachMediaFile('http://domain.com/file.ext', {
type: "video/mp4'
, bitrate: "320"
, minBitrate: "320"
, maxBitrate: "320"
, width: "640"
, height: "360"
, scalable: "true"
, maintainAspectRatio: "true"
, codec: ""
, apiFramework: "VPAID"
});
creative.attachTrackingEvent('creativeView', 'http://creativeview.com');
creative.attachVideoClick('ClickThrough', 'http://click-through.com');
var icon = creative.attachIcon({
program : 'foo'
, height : 250
, width : 300
, xPosition : 'left'
, yPosition : 'top'
, apiFramework : 'VPAID'
, offset : '01:05:09'
, duration : '00:00:00'
});
icon.attachResource('StaticResource', 'http://domain.com/file.gif', 'image/gif');
icon.attachClick('IconClickThrough', 'http://icon-click-through.com');
icon.attachTrackingEvent('IconViewTracking', 'http://icon-view-tracking.com');
var creative = ad.attachCreative('NonLinear', {
id : 99
, width : 90
, height: 10
, expandedWidth : 90
, expandedHeight : 45
, scalable : false
, maintainAspectRatio : false
, minSuggestedDuration : '00:00:00'
, apiFramework : 'VPAID'
});
var creative = ad.attachCreative('CompanionAd', {
width : 300
, height : 250
, type : 'image/jpeg'
, url : 'http://companionad.com/image.jpg'
});
creative.attachTrackingEvent('creativeView', 'http://companionad.com/creativeView');
vast.xml({ pretty : true, indent : ' ', newline : '\n' });
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="3.0">
<Ad id="1" sequence="99">
<InLine>
<AdSystem version="1.0">Test Ad Server</AdSystem>
<AdTitle>Common name of the ad</AdTitle>
<Description/>
<Survey/>
<Impression id="23">http://impression.com</Impression>
<Impression id="sample-server">http://sample-impression.com</Impression>
<Creatives>
<Creative>
<Linear>
<Duration>00:00:00</Duration>
<TrackingEvents>
<Tracking event="creativeView">http://creativeview.com</Tracking>
</TrackingEvents>
<VideoClicks>
<ClickThrough id="">http://click-through.com</ClickThrough>
</VideoClicks>
<MediaFiles>
<MediaFile id="" delivery="progressive" type="video/mp4" bitrate="320" minBitrate="320" maxBitrate="320" width="640" height="360" scalable="true" maintainAspectRatio="true" codec="" apiFramework="">http://domain.com/file.ext</MediaFile>
</MediaFiles>
</Linear>
</Creative>
<Creative>
<CompanionAds>
<Companion width="300" height="250">
<StaticResource creativeType="image/jpeg">http://companionad.com/image.jpg</StaticResource>
<TrackingEvents>
<Tracking event="creativeView">http://companionad.com/creativeView</Tracking>
</TrackingEvents>
</Companion>
</CompanionAds>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>
var VAST = require('vast-xml');
var vast = new VAST({VASTErrorURI: 'http://adserver.com/noad.gif'});
vast.xml({ pretty : true, indent : ' ', newline : '\n' });
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="3.0">
<Error>
<![CDATA[http://adserver.com/noad.gif]>
</Error>
</VAST>
npm test
validates the test builds. The validation is done against the VAST .xsd file, made available by the IAB.
Currently included in the test suite are:
- linear ad
- with companion
- with icon
- non-linear ad
- with companion
- wrapper ad
The VAST spec is, well vast, and contains a lot of different corner cases.
Pull requests, feedback and collaboration in fully rounding-out this module is more than welcome.
xmllint
is a good tool for validating XML. As a helper, this repo contains the VAST .xsd and to validate a VAST file, follow:
$ xmllint --noout --schema ./test/files/vast3_draft.xsd /path/to/the/vast.xml