public function renderVast() { $adID = Input::get('aid', 0); $flightWebsiteID = Input::get('fpid', 0); $publisherAdZoneID = Input::get('zid', 0); $checksum = Input::get('cs'); $isOverReport = Input::get('ovr', ''); $hostReferer = '*'; if (!empty($_SERVER['HTTP_REFERER'])) { $url = $_SERVER['HTTP_REFERER']; $hostReferer = parse_url($url, PHP_URL_SCHEME) . '://' . getWebDomain($url); } $header['Content-Type'] = 'application/xml'; $header['Access-Control-Allow-Origin'] = $hostReferer; $header['Access-Control-Allow-Credentials'] = 'true'; $header['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0'; $header['Cache-Control'] = 'post-check=0, pre-check=0'; $header['Pragma'] = 'no-cache'; $ad = (new Delivery())->getAd($adID); if ($ad) { $eventArr = ['impression', 'start', 'firstQuartile', 'midpoint', 'thirdQuartile', 'complete', 'mute', 'unmute', 'pause', 'fullscreen']; try { $path = "http://static.yomedia.vn/xml/{$ad->campaign_id}/"; $xml_filename = str_replace(' ', '_', strtolower($ad->name)) . '.xml'; $xml_file = file_get_contents("{$path}{$xml_filename}"); if (!empty($xml_file)) { foreach ($eventArr as $event) { $check_key = "[yomedia_{$event}_url]"; if (strpos($xml_file, $check_key) !== FALSE) { $url = '<![CDATA[' . urlTracking($event, $ad->id, $flightWebsiteID, $publisherAdZoneID, $checksum, '', $isOverReport) . ']]>'; $xml_file = str_replace($check_key, $url, $xml_file); } } if (strpos($xml_file, '[yomedia_third_party_url]') !== FALSE) { $thirdTrackingEvents = json_decode($ad->third_party_tracking); if (!empty($thirdTrackingEvents)) { $tag = ''; foreach ($thirdTrackingEvents as $trackingEvent) { if (!empty($trackingEvent->event) && !empty($trackingEvent->url)) { $tag .= "<Tracking event=\"" . $trackingEvent->event . "\"><![CDATA[" . $this->replaceParam($trackingEvent->url) . "]]></Tracking>"; } } $xml_file = str_replace('<Tracking>[yomedia_third_party_url]</Tracking>', $tag, $xml_file); } } if (strpos($xml_file, '[yomedia_click_url]') !== FALSE) { $url = '<![CDATA[' . urlTracking('click', $ad->id, $flightWebsiteID, $publisherAdZoneID, $checksum, $ad->destination_url, $isOverReport) . ']]>'; $xml_file = str_replace('[yomedia_click_url]', $url, $xml_file); } if (strpos($xml_file, '[yomedia_third_impression_url]') !== FALSE) { if ($ad->third_impression_track != '') { $thirdImpressionTrackArr = explode("\n", $ad->third_impression_track); if (!empty($thirdImpressionTrackArr)) { $tag = ''; foreach ($thirdImpressionTrackArr as $item) { $tag .= '<Impression><![CDATA[' . $this->replaceParam($item) . ']]></Impression>'; } $xml_file = str_replace('<Impression>[yomedia_third_impression_url]</Impression>', $tag, $xml_file); } } } if (strpos($xml_file, '[yomedia_third_click_url]') !== FALSE) { $tag = ''; if ($ad->third_click_track != '') { $thirdClickTrackArr = explode("\n", $ad->third_click_track); if (!empty($thirdClickTrackArr)) { foreach ($thirdClickTrackArr as $item) { $tag .= "<ClickTracking><![CDATA[" . $this->replaceParam($item) . "]]></ClickTracking>"; } $xml_file = str_replace('<ClickTracking>[yomedia_third_click_url]</ClickTracking>', $tag, $xml_file); } } } if (strpos($xml_file, '[yomedia_ad_id]') !== FALSE) { $xml_file = str_replace('[yomedia_ad_id]', $ad->id, $xml_file); } if (strpos($xml_file, '[yomedia_ga_campaign_url]') !== FALSE) { $trackingModel = new Tracking(); $deliverModel = new Delivery(); $adFormat = $deliverModel->getAdFormat($ad->ad_format_id); $ad_format_name = isset($adFormat->name) ? str_replace(' ', '_', $adFormat->name) : ''; $name = isset($ad->name) ? str_replace(' ', '_', $ad->name) : ''; $publisher_domain = $trackingModel->getRequestReferer(); $campaignInfo = $deliverModel->getCamPaignInfoByPublisher($publisherAdZoneID, $flightWebsiteID, $ad->ad_format_id); if ($campaignInfo) { $flight_name = isset($campaignInfo['flight_name']) ? $campaignInfo['flight_name'] : ''; $category_name = isset($campaignInfo['category_name']) ? $campaignInfo['category_name'] : ''; } $url = '<![CDATA[http://static.yomedia.vn/campaigns.html?utm_medium=' . $ad_format_name . '&utm_content=' . $name . '&utm_campaign=' . $flight_name . '&utm_term=Video&utm_source=' . $publisher_domain . '&rd=' . str_random(40) . ']]>'; $xml_file = str_replace('[yomedia_ga_campaign_url]', $url, $xml_file); } } $xml = simplexml_load_string($xml_file); if (!$xml) { return response('<VAST version="2.0"></VAST>', 200, $header); } return response($xml->asXML(), 200, $header); } catch (\Exception $e) { pr($e); return response('<VAST version="2.0"></VAST>', 200, $header); } } return response('<VAST version="2.0"></VAST>', 200, $header); }
public function initVast($ad, $flightPublisherID, $publisherAdZoneID, $checksum, $isOverReport = false, $referrer = '') { if ($ad && $flightPublisherID && $publisherAdZoneID) { $trackingModel = new Tracking(); $deliverModel = new Delivery(); $this->id = $ad->id; $this->flight_publisher_id = $flightPublisherID; $this->publisher_ad_zone_id = $publisherAdZoneID; $this->linear = $ad->video_linear; $this->width = $ad->width; $this->height = $ad->height; $this->duration = $ad->video_duration; $this->type_vast = $ad->video_type_vast; //$this->vast_version = $ad->vast_version; $this->skipads = $ad->skipads; $this->file = $ad->source_url; $this->title = $ad->name; if (empty($ad->vast_include)) { $this->wrapper_tag = $this->replaceParam($ad->video_wrapper_tag); } else { $vastTagUrl = urlencode($this->replaceParam($ad->video_wrapper_tag)); $this->wrapper_tag = AD_SERVER_FILE . 'get-vast-tag?vast_tag=' . $vastTagUrl . '&skip=' . $ad->skipads . '&aid=' . $ad->id; } $this->bitrate = $ad->video_bitrate; $this->url = $ad->destination_url; $this->ad_format = $ad->ad_format_id; $this->referrer = $referrer; $this->third_party_tracking = $ad->third_party_tracking; $this->third_impression_track = $ad->third_impression_track; $this->third_click_track = $ad->third_click_track; $this->checksum = $checksum; $this->ovr = $isOverReport; $adFormat = $deliverModel->getAdFormat($ad->ad_format_id); $this->ad_format_name = isset($adFormat->name) ? str_replace(' ', '_', $adFormat->name) : ''; $this->name = isset($ad->name) ? str_replace(' ', '', strtolower($ad->name)) : ''; $this->publisher_domain = $trackingModel->getRequestReferer(); $campaignInfo = $deliverModel->getCamPaignInfoByPublisher($publisherAdZoneID, $flightPublisherID, $ad->ad_format_id); if ($campaignInfo) { $this->flight_name = isset($campaignInfo['flight_name']) ? $campaignInfo['flight_name'] : ''; $this->category_name = isset($campaignInfo['category_name']) ? $campaignInfo['category_name'] : ''; } return true; } return false; }