Android-VAST协议解析-xml实现方案(基于Smaato)
smaato的vast解析处理,有点长.
Smaato // 标题Smaato Mobile Video // 描述Press Play on Mobile Video Advertising
// 播放时间00:00:15
// 触发意图
// 视频点击事件触发链接
// 视频地址
// 完成后触发]]> https://myTrackingURL/secondCompanion
这一段...特别长,我解析都花了2小时.写了一个解析工具类,一直想去优化,这段代码,目前没有什么好的方案.只能先放出来了
public class VASTHelper {private static VASTHelper sVastHelper;private VAST mVAST;private VASTHelper() {}public static VASTHelper getInstance() {if (sVastHelper == null) {sVastHelper = new VASTHelper();}return sVastHelper;}public VAST getVAST() {return mVAST;}public void parseVAST(final InputStream open) {new Thread(new Runnable() {@Overridepublic void run() {try {XmlPullParser xmlPullParser = Xml.newPullParser();xmlPullParser.setInput(open, "utf-8");VAST vast = null;List creativeList = null;int count = 0;int type = xmlPullParser.getEventType();while (type != XmlPullParser.END_DOCUMENT) {switch (type) {case XmlPullParser.START_DOCUMENT:vast = new VAST();count = 0;creativeList = new ArrayList<>();break;case XmlPullParser.START_TAG://获取开始标签的名字String starttgname = xmlPullParser.getName();creativeList = parseVAST(xmlPullParser, vast, creativeList, count, starttgname);break;case XmlPullParser.END_TAG:if ("vast".equalsIgnoreCase(xmlPullParser.getName())) {mVAST = vast;} else if (equalsName("TrackingEvents", xmlPullParser.getName())) {count++;}break;}//细节:type = xmlPullParser.next();}} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}).start();}private List parseVAST(XmlPullParser xmlPullParser, VAST vast, List creativeList, int count, String starttgname) throws IOException, XmlPullParserException {if (equalsName(starttgname, "vast")) {vast.setVASTVersion(xmlPullParser.getAttributeValue(0));} else if (equalsName(starttgname, "ad")) {VAST.AdBean adBean = new VAST.AdBean();adBean.setId(xmlPullParser.getAttributeValue(0));vast.setAd(adBean);} else if (equalsName(starttgname, "AdSystem")) {VAST.AdBean ad = getAdBean(vast);VAST.AdBean.AdSystem adSystem = new VAST.AdBean.AdSystem();adSystem.setVersion(xmlPullParser.getAttributeValue(0));adSystem.setAdTitle(xmlPullParser.nextText());ad.setAdSystem(adSystem);} else if (equalsName(starttgname, "AdTitle")) {VAST.AdBean ad = getAdBean(vast);ad.setAdTilte(xmlPullParser.nextText());} else if (equalsName(starttgname, "InLine")) {VAST.AdBean ad = getAdBean(vast);ad.setInLine(new VAST.AdBean.InLine());} else if (equalsName(starttgname, "Impression")) {VAST.AdBean.InLine inLine = getInLine(vast);inLine.setImpression(xmlPullParser.nextText());} else if (equalsName(starttgname, "Creatives")) {VAST.AdBean.InLine inLine = getInLine(vast);inLine.setCreatives(new VAST.AdBean.InLine.Creatives());} else if (equalsName(starttgname, "Creative")) {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);VAST.AdBean.InLine.Creatives.Creative creative = new VAST.AdBean.InLine.Creatives.Creative();creative.setAdID(xmlPullParser.getAttributeValue(0));creative.setSequence(xmlPullParser.getAttributeValue(1));creativeList.add(creative);creatives.setCreativeList(creativeList);} else if (equalsName(starttgname, "Linear")) {VAST.AdBean.InLine.Creatives.Creative creative = getFristCreative(vast);VAST.AdBean.InLine.Creatives.Creative.Linear linear = new VAST.AdBean.InLine.Creatives.Creative.Linear();creative.setLinear(linear);} else if (equalsName(starttgname, "Duration")) {VAST.AdBean.InLine.Creatives.Creative.Linear linear = getLinear(vast);linear.setDuration(xmlPullParser.nextText());} else if (equalsName(starttgname, "TrackingEvents")) {if (count == 0) {VAST.AdBean.InLine.Creatives.Creative.Linear linear = getLinear(vast);VAST.AdBean.InLine.Creatives.Creative.Linear.TrackingEvents trackingEvents = new VAST.AdBean.InLine.Creatives.Creative.Linear.TrackingEvents();trackingEvents.setTrackingList(new ArrayList());linear.setTrackingEvents(trackingEvents);} else {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion.TrackingEvents trackingEvents = new VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion.TrackingEvents();creativeList = creatives.getCreativeList();VAST.AdBean.InLine.Creatives.Creative creative = creativeList.get(count);VAST.AdBean.InLine.Creatives.Creative.CompanionAds companionAds = creative.getCompanionAds();VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion companion = companionAds.getCompanion();trackingEvents.setTrackingList(new ArrayList());companion.setTrackingEvents(trackingEvents);}} else if (equalsName(starttgname, "Tracking")) {if (count == 0) {VAST.AdBean.InLine.Creatives.Creative.Linear linear = getLinear(vast);VAST.AdBean.InLine.Creatives.Creative.Linear.TrackingEvents trackingEvents = linear.getTrackingEvents();List trackingList = trackingEvents.getTrackingList();VAST.AdBean.InLine.Creatives.Creative.Linear.TrackingEvents.Tracking tracking = new VAST.AdBean.InLine.Creatives.Creative.Linear.TrackingEvents.Tracking();tracking.setEvent(xmlPullParser.getAttributeValue(0));tracking.setUrl(xmlPullParser.nextText());trackingList.add(tracking);} else {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);creativeList = creatives.getCreativeList();VAST.AdBean.InLine.Creatives.Creative creative = creativeList.get(count);VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion.TrackingEvents trackingEvents = creative.getCompanionAds().getCompanion().getTrackingEvents();List trackingList = trackingEvents.getTrackingList();VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion.TrackingEvents.Tracking tracking = new VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion.TrackingEvents.Tracking();tracking.setEvent(xmlPullParser.getAttributeValue(0));tracking.setUrl(xmlPullParser.nextText());trackingList.add(tracking);}} else if (equalsName(starttgname, "VideoClicks")) {VAST.AdBean.InLine.Creatives.Creative.Linear linear = getLinear(vast);VAST.AdBean.InLine.Creatives.Creative.Linear.VideoClicks videoClicks = new VAST.AdBean.InLine.Creatives.Creative.Linear.VideoClicks();videoClicks.setClickTrackings(new ArrayList());linear.setVideoClicks(videoClicks);} else if (equalsName(starttgname, "ClickThrough")) {VAST.AdBean.InLine.Creatives.Creative.Linear.VideoClicks videoClicks = getVideoClicks(vast);videoClicks.setClickThrough(xmlPullParser.nextText());} else if (equalsName(starttgname, "ClickTracking")) {VAST.AdBean.InLine.Creatives.Creative.Linear.VideoClicks videoClicks = getVideoClicks(vast);List clickTrackings = videoClicks.getClickTrackings();VAST.AdBean.InLine.Creatives.Creative.Linear.VideoClicks.ClickTracking clickTracking = new VAST.AdBean.InLine.Creatives.Creative.Linear.VideoClicks.ClickTracking();try {clickTracking.setId(xmlPullParser.getAttributeValue(0));} catch (Exception e) {e.printStackTrace();}clickTracking.setUrl(xmlPullParser.nextText());clickTrackings.add(clickTracking);} else if (equalsName(starttgname, "MediaFiles")) {VAST.AdBean.InLine.Creatives.Creative.Linear linear = getLinear(vast);VAST.AdBean.InLine.Creatives.Creative.Linear.MediaFiles mediaFiles = new VAST.AdBean.InLine.Creatives.Creative.Linear.MediaFiles();List mediaFilesList = new ArrayList<>();mediaFilesList.add(new VAST.AdBean.InLine.Creatives.Creative.Linear.MediaFiles.MediaFile());mediaFiles.setMediaFiles(mediaFilesList);linear.setMediaFiles(mediaFiles);} else if (equalsName(starttgname, "MediaFile")) {VAST.AdBean.InLine.Creatives.Creative.Linear linear = getLinear(vast);VAST.AdBean.InLine.Creatives.Creative.Linear.MediaFiles mediaFiles = linear.getMediaFiles();List mediaFileList = mediaFiles.getMediaFiles();VAST.AdBean.InLine.Creatives.Creative.Linear.MediaFiles.MediaFile mediaFile = mediaFileList.get(0);mediaFile.setBitrate(xmlPullParser.getAttributeValue(0));mediaFile.setDelivery(xmlPullParser.getAttributeValue(1));mediaFile.setHeight(xmlPullParser.getAttributeValue(2));mediaFile.setId(xmlPullParser.getAttributeValue(3));mediaFile.setType(xmlPullParser.getAttributeValue(4));mediaFile.setWidth(xmlPullParser.getAttributeValue(5));mediaFile.setVideoUrl(xmlPullParser.nextText());} else if (equalsName(starttgname, "CompanionAds")) {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);creativeList = creatives.getCreativeList();VAST.AdBean.InLine.Creatives.Creative creative = creativeList.get(1);VAST.AdBean.InLine.Creatives.Creative.CompanionAds companionAds = new VAST.AdBean.InLine.Creatives.Creative.CompanionAds();creative.setCompanionAds(companionAds);} else if (equalsName(starttgname, "Companion")) {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);creativeList = creatives.getCreativeList();VAST.AdBean.InLine.Creatives.Creative creative = creativeList.get(1);VAST.AdBean.InLine.Creatives.Creative.CompanionAds companionAds = creative.getCompanionAds();VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion companion = new VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion();companion.setHeight(xmlPullParser.getAttributeValue(0));companion.setWidth(xmlPullParser.getAttributeValue(1));companionAds.setCompanion(companion);} else if (equalsName(starttgname, "HTMLResource")) {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);creativeList = creatives.getCreativeList();VAST.AdBean.InLine.Creatives.Creative creative = creativeList.get(1);VAST.AdBean.InLine.Creatives.Creative.CompanionAds companionAds = creative.getCompanionAds();VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion companion = companionAds.getCompanion();companion.setHTMLResource(xmlPullParser.nextText());} else if (equalsName(starttgname, "CompanionClickTracking")) {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);creativeList = creatives.getCreativeList();VAST.AdBean.InLine.Creatives.Creative creative = creativeList.get(1);VAST.AdBean.InLine.Creatives.Creative.CompanionAds companionAds = creative.getCompanionAds();VAST.AdBean.InLine.Creatives.Creative.CompanionAds.Companion companion = companionAds.getCompanion();companion.setCompanionClickTracking(xmlPullParser.nextText());}return creativeList;}private VAST.AdBean.InLine.Creatives.Creative.Linear.VideoClicks getVideoClicks(VAST vast) {VAST.AdBean.InLine.Creatives.Creative.Linear linear = getLinear(vast);return linear.getVideoClicks();}private VAST.AdBean.InLine.Creatives.Creative.Linear getLinear(VAST vast) {VAST.AdBean.InLine.Creatives.Creative fristCreative = getFristCreative(vast);return fristCreative.getLinear();}private VAST.AdBean.InLine.Creatives.Creative getFristCreative(VAST vast) {VAST.AdBean.InLine.Creatives creatives = getCreatives(vast);return creatives.getCreativeList().get(0);}private VAST.AdBean.InLine.Creatives getCreatives(VAST vast) {VAST.AdBean.InLine inLine = getInLine(vast);return inLine.getCreatives();}private VAST.AdBean.InLine getInLine(VAST vast) {VAST.AdBean ad = getAdBean(vast);return ad.getInLine();}private VAST.AdBean getAdBean(VAST vast) {return vast.getAd();}private boolean equalsName(String starttgname, String name) {return starttgname.equalsIgnoreCase(name);}
}
附上VAST的数据存储类的domain地址
public class VAST {private String VASTVersion;private AdBean ad;@Overridepublic String toString() {return "VAST{" +"VASTVersion='" + VASTVersion + '\'' +", ad=" + ad +'}';}public String getVASTVersion() {return VASTVersion;}public void setVASTVersion(String VASTVersion) {this.VASTVersion = VASTVersion;}public AdBean getAd() {return ad;}public void setAd(AdBean ad) {this.ad = ad;}static class AdBean {private String id;private AdSystem adSystem;private String description;private InLine inLine;private String adTilte;public AdSystem getAdSystem() {return adSystem;}public void setAdSystem(AdSystem adSystem) {this.adSystem = adSystem;}public InLine getInLine() {return inLine;}public void setInLine(InLine inLine) {this.inLine = inLine;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public void setId(String id) {this.id = id;}@Overridepublic String toString() {return "AdBean{" +"id='" + id + '\'' +", adSystem=" + adSystem +", description='" + description + '\'' +", inLine=" + inLine +'}';}public String getId() {return id;}public String getAdTilte() {return adTilte;}public void setAdTilte(String adTilte) {this.adTilte = adTilte;}static class AdSystem {private String version;private String adTitle;public String getVersion() {return version;}public void setVersion(String version) {this.version = version;}public String getAdTitle() {return adTitle;}public void setAdTitle(String adTitle) {this.adTitle = adTitle;}@Overridepublic String toString() {return "AdSystem{" +"version='" + version + '\'' +", adTitle='" + adTitle + '\'' +'}';}}static class InLine {private String impression;private Creatives creatives;public String getImpression() {return impression;}public void setImpression(String impression) {this.impression = impression;}public Creatives getCreatives() {return creatives;}public void setCreatives(Creatives creatives) {this.creatives = creatives;}@Overridepublic String toString() {return "InLine{" +"impression='" + impression + '\'' +", creatives=" + creatives +'}';}static class Creatives {private List creativeList;public List getCreativeList() {return creativeList;}public void setCreativeList(List creativeList) {this.creativeList = creativeList;}@Overridepublic String toString() {return "Creatives{" +"creativeList=" + creativeList +'}';}static class Creative {private Linear linear;private String AdID;private String sequence;private CompanionAds mCompanionAds;public Linear getLinear() {return linear;}public void setLinear(Linear linear) {this.linear = linear;}public String getAdID() {return AdID;}public void setAdID(String adID) {AdID = adID;}public String getSequence() {return sequence;}public void setSequence(String sequence) {this.sequence = sequence;}public CompanionAds getCompanionAds() {return mCompanionAds;}public void setCompanionAds(CompanionAds companionAds) {mCompanionAds = companionAds;}@Overridepublic String toString() {return "Creative{" +"linear=" + linear +", AdID='" + AdID + '\'' +", sequence='" + sequence + '\'' +", mCompanionAds=" + mCompanionAds +'}';}static class Linear {private String Duration;private TrackingEvents mTrackingEvents;private VideoClicks mVideoClicks;private MediaFiles mMediaFiles;public String getDuration() {return Duration;}public void setDuration(String duration) {Duration = duration;}public TrackingEvents getTrackingEvents() {return mTrackingEvents;}public void setTrackingEvents(TrackingEvents trackingEvents) {mTrackingEvents = trackingEvents;}public VideoClicks getVideoClicks() {return mVideoClicks;}public void setVideoClicks(VideoClicks videoClicks) {mVideoClicks = videoClicks;}public MediaFiles getMediaFiles() {return mMediaFiles;}public void setMediaFiles(MediaFiles mediaFiles) {mMediaFiles = mediaFiles;}@Overridepublic String toString() {return "Linear{" +"Duration=" + Duration +", mTrackingEvents=" + mTrackingEvents +", mVideoClicks=" + mVideoClicks +", mMediaFiles=" + mMediaFiles +'}';}static class TrackingEvents {private List mTrackingList;public List getTrackingList() {return mTrackingList;}public void setTrackingList(List trackingList) {mTrackingList = trackingList;}@Overridepublic String toString() {return "TrackingEvents{" +"mTrackingList=" + mTrackingList +'}';}static class Tracking {private String event;private String url;public String getEvent() {return event;}public void setEvent(String event) {this.event = event;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}@Overridepublic String toString() {return "Tracking{" +"event='" + event + '\'' +", url='" + url + '\'' +'}';}}}static class VideoClicks {private String ClickThrough;private List mClickTrackings;public String getClickThrough() {return ClickThrough;}public void setClickThrough(String clickThrough) {ClickThrough = clickThrough;}public List getClickTrackings() {return mClickTrackings;}public void setClickTrackings(List clickTrackings) {mClickTrackings = clickTrackings;}@Overridepublic String toString() {return "VideoClicks{" +"ClickThrough='" + ClickThrough + '\'' +", mClickTrackings=" + mClickTrackings +'}';}static class ClickTracking {private String id;private String url;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}@Overridepublic String toString() {return "ClickTracking{" +"id='" + id + '\'' +", url='" + url + '\'' +'}';}}}static class MediaFiles {private List mMediaFiles;public List getMediaFiles() {return mMediaFiles;}public void setMediaFiles(List mediaFiles) {mMediaFiles = mediaFiles;}@Overridepublic String toString() {return "MediaFiles{" +"mMediaFiles=" + mMediaFiles +'}';}static class MediaFile {private String bitrate;private String delivery;private String height;private String width;private String id;private String type;private String videoUrl;public String getBitrate() {return bitrate;}public void setBitrate(String bitrate) {this.bitrate = bitrate;}public String getDelivery() {return delivery;}public void setDelivery(String delivery) {this.delivery = delivery;}public String getHeight() {return height;}public void setHeight(String height) {this.height = height;}public String getWidth() {return width;}public void setWidth(String width) {this.width = width;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getVideoUrl() {return videoUrl;}public void setVideoUrl(String videoUrl) {this.videoUrl = videoUrl;}@Overridepublic String toString() {return "MediaFile{" +"bitrate='" + bitrate + '\'' +", delivery='" + delivery + '\'' +", height='" + height + '\'' +", width='" + width + '\'' +", id='" + id + '\'' +", type='" + type + '\'' +", videoUrl='" + videoUrl + '\'' +'}';}}}}static class CompanionAds {private Companion companion;public Companion getCompanion() {return companion;}public void setCompanion(Companion companion) {this.companion = companion;}@Overridepublic String toString() {return "CompanionAds{" +"companion=" + companion +'}';}static class Companion {private String width;private String height;private String HTMLResource;private TrackingEvents mTrackingEvents;private String CompanionClickTracking;public String getWidth() {return width;}public void setWidth(String width) {this.width = width;}public String getHeight() {return height;}public void setHeight(String height) {this.height = height;}public String getHTMLResource() {return HTMLResource;}public void setHTMLResource(String HTMLResource) {this.HTMLResource = HTMLResource;}public TrackingEvents getTrackingEvents() {return mTrackingEvents;}public void setTrackingEvents(TrackingEvents trackingEvents) {mTrackingEvents = trackingEvents;}public String getCompanionClickTracking() {return CompanionClickTracking;}public void setCompanionClickTracking(String companionClickTracking) {CompanionClickTracking = companionClickTracking;}@Overridepublic String toString() {return "Companion{" +"width='" + width + '\'' +", height='" + height + '\'' +", HTMLResource='" + HTMLResource + '\'' +", mTrackingEvents=" + mTrackingEvents +", CompanionClickTracking='" + CompanionClickTracking + '\'' +'}';}static class TrackingEvents {private List mTrackingList;public List getTrackingList() {return mTrackingList;}public void setTrackingList(List trackingList) {mTrackingList = trackingList;}@Overridepublic String toString() {return "TrackingEvents{" +"mTrackingList=" + mTrackingList +'}';}static class Tracking {private String event;private String url;public void setEvent(String event) {this.event = event;}public void setUrl(String url) {this.url = url;}@Overridepublic String toString() {return "Tracking{" +"event='" + event + '\'' +", url='" + url + '\'' +'}';}}}}}}}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
