package com.vistarmedia.api.examples; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimeZone; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import com.vistarmedia.api.ApiClient; import com.vistarmedia.api.message.Api.AdRequest; import com.vistarmedia.api.message.Api.AdResponse; import com.vistarmedia.api.message.Api.Advertisement; import com.vistarmedia.api.message.Api.DeviceAttribute; import com.vistarmedia.api.message.Api.DisplayArea; import com.vistarmedia.api.message.Api.ProofOfPlayResponse; import com.vistarmedia.api.result.AdResponseResult; import com.vistarmedia.api.result.ErrorResult; import com.vistarmedia.api.result.ProofOfPlayResult; import com.vistarmedia.api.transport.AsyncHttpClientTransport; public class SimpleAdRequestExample { private String networkId; private String apiKey; private ApiClient vistarApiClient; private List<DeviceAttribute> deviceAttributes; private DisplayArea displayArea; public SimpleAdRequestExample(String networkId, String apiKey, String host, int port) { this.networkId = networkId; this.apiKey = apiKey; vistarApiClient = AsyncHttpClientTransport.connect(host, port); deviceAttributes = new ArrayList<DeviceAttribute>(); deviceAttributes.add(DeviceAttribute.newBuilder().setName("zipcode") .setValue("19125").build()); deviceAttributes.add(DeviceAttribute.newBuilder().setName("venue") .setValue("Chick-fil-A").build()); displayArea = DisplayArea.newBuilder().setId("default-area") .setAllowAudio(true).setWidth(1280).setHeight(760) .addSupportedMedia("image/gif").addSupportedMedia("image/jpeg") .addSupportedMedia("image/png") .addSupportedMedia("application/x-shockwave-flash") .addSupportedMedia("video/x-flv").addSupportedMedia("video/mp4") .build(); } public SimpleAdRequestExample(String networkId, String apiKey, String host) { this(networkId, apiKey, host, 80); } protected void requestRange(Calendar start, Calendar end) throws Exception { Calendar current = (Calendar) start.clone(); List<Future<AdResponseResult>> resultFutures = new ArrayList<Future<AdResponseResult>>(); List<Future<ProofOfPlayResult>> popFutures = new ArrayList<Future<ProofOfPlayResult>>(); while (current.before(end)) { AdRequest request = AdRequest.newBuilder().setNetworkId(networkId) .setApiKey(apiKey).setDeviceId("device-1235") .addDisplayArea(displayArea) .setDirectConnection(true) .setDisplayTime(current.getTimeInMillis() / 1000).build(); resultFutures.add(vistarApiClient.sendAdRequest(request)); current.add(Calendar.MINUTE, 20); } for (Future<AdResponseResult> resultFuture : resultFutures) { AdResponseResult result = resultFuture.get(500, TimeUnit.MILLISECONDS); if (result == null) { System.err.print("Response Timeout"); } else { if (result.isSuccess()) { popFutures.addAll(handleAdResponse(result.getResult())); } else { handleError(result.getError()); } } } for (Future<ProofOfPlayResult> popFuture : popFutures) { ProofOfPlayResult result = popFuture.get(1, TimeUnit.SECONDS); if (result != null && result.isSuccess()) { ProofOfPlayResponse resp = result.getResult(); System.out.println(String.format("%.2f Impressions", resp.getImpressions())); } } } private List<Future<ProofOfPlayResult>> handleAdResponse(AdResponse response) { List<Future<ProofOfPlayResult>> resultFutures = new ArrayList<Future<ProofOfPlayResult>>(); for (Advertisement ad : response.getAdvertisementList()) { System.out.println("Pretending to show: " + ad.getAssetUrl()); resultFutures.add(vistarApiClient.sendProofOfPlay(ad)); } return resultFutures; } private void handleError(ErrorResult result) { System.err.println(result.toString()); } public static void main(String[] args) throws Exception { String networkId = "3mP7EUg9QKKAwo6SeQOJeA"; String apiKey = "03bbe19b-d488-433d-a23d-77f801e7d2c0"; SimpleAdRequestExample example = new SimpleAdRequestExample(networkId, apiKey, "dev.api.vistarmedia.com", 80); Calendar start = Calendar.getInstance(TimeZone.getTimeZone("UTC")); Calendar end = Calendar.getInstance(TimeZone.getTimeZone("UTC")); end.add(Calendar.DATE, 1); example.requestRange(start, end); System.out.println("Done!"); return; } }