Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
twitter4j.impl.TwitterAdsTargetingApiImpl Maven / Gradle / Ivy
package twitter4j.impl;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.apache.commons.lang3.StringUtils;
import twitter4j.BaseAdsListResponse;
import twitter4j.BaseAdsListResponseIterable;
import twitter4j.BaseAdsResponse;
import twitter4j.TwitterAdsClient;
import twitter4j.api.TwitterAdsTargetingApi;
import twitter4j.internal.http.HttpParameter;
import twitter4j.internal.http.HttpResponse;
import twitter4j.internal.models4j.TwitterException;
import twitter4j.models.LocationType;
import twitter4j.models.ads.*;
import twitter4j.models.ads.tags.TwitterApplicationList;
import twitter4j.models.ads.targeting.TargetingParamRequest;
import twitter4j.models.ads.targeting.TargetingParamResponse;
import twitter4j.util.TwitterAdUtil;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
import static twitter4j.TwitterAdsConstants.*;
/**
* User: abhay
* Date: 4/4/16
* Time: 7:16 PM
*/
public class TwitterAdsTargetingApiImpl implements TwitterAdsTargetingApi {
private static final Integer MAX_REQUEST_PARAMETER_SIZE = 50;
private static final Gson GSON = new Gson();
private final TwitterAdsClient twitterAdsClient;
public TwitterAdsTargetingApiImpl(TwitterAdsClient twitterAdsClient) {
this.twitterAdsClient = twitterAdsClient;
}
@Override
public BaseAdsListResponseIterable getTargetingCriterias(String accountId, String lineItemId, boolean withDeleted)
throws TwitterException {
TwitterAdUtil.ensureNotNull(accountId, "accountId");
List params = new ArrayList<>();
if (TwitterAdUtil.isNotNullOrEmpty(lineItemId)) {
params.add(new HttpParameter(PARAM_LINE_ITEM_ID, lineItemId));
}
params.add(new HttpParameter(PARAM_WITH_DELETED, withDeleted));
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_TARGETING_CRITERIA;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public BaseAdsResponse getTargetingCriteriaById(String accountId, String targetingId, boolean withDeleted)
throws TwitterException {
TwitterAdUtil.ensureNotNull(accountId, "Account Id");
TwitterAdUtil.ensureNotNull(targetingId, "Targeting Id");
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_TARGETING_CRITERIA +
targetingId;
HttpParameter[] params = new HttpParameter[]{new HttpParameter(PARAM_WITH_DELETED, withDeleted)};
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpRequest(baseUrl, params, type, HttpVerb.GET);
}
@Override
public BaseAdsResponse deleteTargetingCriteria(String accountId, String targetingCriteriaId) throws TwitterException {
TwitterAdUtil.ensureNotNull(accountId, "Account Id");
TwitterAdUtil.ensureNotNull(targetingCriteriaId, "Targeting Id");
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_TARGETING_CRITERIA +
targetingCriteriaId;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpRequest(baseUrl, null, type, HttpVerb.DELETE);
}
@Override
public BaseAdsListResponseIterable getAllTargetingLocations(Optional locationType, String q,
String countryCode, Optional count)
throws TwitterException {
List params = validateTargetingLocationParameters(locationType, q, countryCode, count);
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TARGETING_CRITERIA_LOCATION;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public BaseAdsListResponseIterable getAllTargetingEvents(String q) throws TwitterException {
return hitQueryForPath(q, PATH_TARGETING_CRITERIA_EVENT);
}
@Override
public BaseAdsListResponseIterable getAllTargetingInterests(String q) throws TwitterException {
return hitQueryForPath(q, PATH_TARGETING_CRITERIA_INTERESTS);
}
@Override
public BaseAdsListResponseIterable getAllTargetingPlatforms(String q) throws TwitterException {
return hitQueryForPath(q, PATH_TARGETING_CRITERIA_PLATFORMS);
}
@Override
public BaseAdsListResponseIterable getAllTargetingNetworkOperators(String q) throws TwitterException {
return hitQueryForPath(q, PATH_TARGETING_CRITERIA_NETWORK_OPERATORS);
}
@Override
public BaseAdsListResponseIterable getAllTargetingLocales(String q) throws TwitterException {
return hitQueryForPath(q, PATH_TARGETING_LANGUAGES);
}
@Override
public List createTargetingCriterias(String accountId, String lineItemId, List targetingCriteriaValues)
throws TwitterException {
TwitterAdUtil.ensureNotNull(accountId, "Account Id");
TwitterAdUtil.ensureNotNull(lineItemId, "Line Item");
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_TARGETING_CRITERIA;
List params = validateAndCreateTargetingParameters(targetingCriteriaValues);
params.add(new HttpParameter(PARAM_LINE_ITEM_ID, lineItemId));
HttpResponse httpResponse = twitterAdsClient.putRequest(baseUrl, params.toArray(new HttpParameter[params.size()]));
try {
Type type = new TypeToken>() {
}.getType();
BaseAdsListResponse baseAdsListResponse =
TwitterAdUtil.constructBaseAdsListResponse(httpResponse, httpResponse.asString(), type);
return baseAdsListResponse == null ? Collections.emptyList() : baseAdsListResponse.getData();
} catch (IOException e) {
throw new TwitterException("Failed to parse targeting criterias.");
}
}
@Override
public BaseAdsResponse createTargetingCriteria(String accountId, String lineItemId, TargetingType targetingType,
String targetingValue, boolean tailoredAudienceExpansion,
Optional tailoredAudienceType) throws TwitterException {
List params = new ArrayList<>();
TwitterAdUtil.ensureNotNull(accountId, "AccountId");
TwitterAdUtil.ensureNotNull(lineItemId, "Line Item Id");
TwitterAdUtil.ensureNotNull(targetingType, "Targeting Type");
TwitterAdUtil.ensureNotNull(targetingValue, "Targeting Value");
params.add(new HttpParameter(PARAM_LINE_ITEM_ID, lineItemId));
params.add(new HttpParameter(PARAM_TARGETING_TYPE, targetingType.name()));
params.add(new HttpParameter(PARAM_TARGETING_VALUE, targetingValue));
params.add(new HttpParameter(PARAM_TAILORED_AUDIENCE_EXPANSION, tailoredAudienceExpansion));
if (tailoredAudienceType != null && tailoredAudienceType.isPresent()) {
params.add(new HttpParameter(PARAM_TAILORED_AUDIENCE_TYPE, tailoredAudienceType.get().name()));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_TARGETING_CRITERIA;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpRequest(baseUrl, params.toArray(new HttpParameter[params.size()]), type, HttpVerb.POST);
}
@Override
public BaseAdsListResponseIterable getAllTargetingPlatformVersions() throws TwitterException {
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TARGETING_CRITERIA_PLATFORM_VERSIONS;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, null, type);
}
@Override
public BaseAdsListResponseIterable getAllTargetingDevices(String q) throws TwitterException {
return hitQueryForPath(q, PATH_TARGETING_CRITERIA_DEVICES);
}
private void validateTargetingBatch(List targetingParamRequests) throws TwitterException {
if (!TwitterAdUtil.isNotEmpty(targetingParamRequests)) {
throw new TwitterException("Targeting Params size is 0");
}
if (targetingParamRequests.size() > 20) {
throw new TwitterException("Targeting Params size cannot be more than 20 as per the API");
//https://dev.twitter.com/ads/reference/post/batch/accounts/%3Aaccount_id/targeting_criteria
}
}
@Override
public BaseAdsResponse getReachEstimate(String accountId, ProductType productType,
List targetingCriterias, String objective,
Long bidAmountLocalMicro, String currency,
Long campaignDailyBudgetAmountLocalMicro, String bidType)
throws TwitterException {
TwitterAdUtil.ensureNotNull(accountId, "AccountId");
TwitterAdUtil.ensureNotNull(productType, "Product Type");
TwitterAdUtil.ensureNotNull(objective, "Objective");
TwitterAdUtil.ensureNotNull(currency, "Currency");
TwitterAdUtil.ensureNotNull(campaignDailyBudgetAmountLocalMicro, "Campaign Daily Budget Amount Local Micro");
if (StringUtils.isBlank(bidType)) {
if (bidAmountLocalMicro != null) {
throw new IllegalArgumentException("bidAmountLocalMicro has to be null when the BidType is null as default bidType is AUTO");
}
bidType = BidType.AUTO.name();
}
List params = validateAndCreateTargetingParameters(targetingCriterias);
params.add(new HttpParameter(PARAM_PRODUCT_TYPE, productType.name()));
params.add(new HttpParameter(PARAM_OBJECTIVE, objective));
params.add(new HttpParameter(CURRENCY, currency));
params.add(new HttpParameter(CAMPAIGN_DAILY_BUDGET_AMOUNT_LOCAL_MICRO, campaignDailyBudgetAmountLocalMicro));
params.add(new HttpParameter(BID_TYPE, bidType));
if (!BidType.AUTO.name().equals(bidType)) {
TwitterAdUtil.ensureNotNull(bidAmountLocalMicro, "Bid Amount Local Micro");
params.add(new HttpParameter(BID_AMOUNT_LOCAL_MICRO, bidAmountLocalMicro));
}
String url = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_REACH_ESTIMATE;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpRequest(url, params.toArray(new HttpParameter[params.size()]), type, HttpVerb.GET);
}
@Override
public BaseAdsListResponseIterable fetchIabCategories(String q) throws TwitterException {
List params = new ArrayList<>();
if (TwitterAdUtil.isNotNullOrEmpty(q)) {
params.add(new HttpParameter("q", q));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_IAB_CATEGORIES;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public TargetingParamResponse createTargetingBatchRequest(String accountId, List targetingParamRequests) throws TwitterException {
validateTargetingBatch(targetingParamRequests);
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_BATCH_ACCOUNTS_V2 + PATH_ACCOUNTS + accountId + PATH_TARGETING_CRITERIA;
HttpResponse httpResponse = twitterAdsClient.postBatchRequest(baseUrl, GSON.toJson(targetingParamRequests));
Type typeToken = new TypeToken() {
}.getType();
return GSON.fromJson(httpResponse.asString(), typeToken);
}
@Override
public BaseAdsListResponseIterable getAllTargetingTVChannels(String tvMarketLocale, Optional count, Optional cursor)
throws TwitterException {
List params = new ArrayList<>();
if (TwitterAdUtil.isNotNullOrEmpty(tvMarketLocale)) {
params.add(new HttpParameter(PARAM_TV_MARKET_LOCALE, tvMarketLocale));
}
if (count != null && count.isPresent()) {
params.add(new HttpParameter(PARAM_COUNT, count.get()));
}
if (cursor != null && cursor.isPresent()) {
params.add(new HttpParameter(PARAM_CURSOR, cursor.get()));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TV_CHANNELS;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public BaseAdsListResponseIterable getTargetingLocations(String query, LocationType locationType) throws TwitterException {
List params = new ArrayList<>(2);
if (StringUtils.isNotBlank(query)) {
params.add(new HttpParameter("q", query.trim()));
}
params.add(new HttpParameter("location_type", locationType.name()));
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TARGETING_CRITERIA_LOCATION;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public BaseAdsListResponseIterable getAllIabCategories(String q) throws TwitterException {
return hitQueryForPath(q, PATH_IAB_CATEGORIES);
}
@Override
public BaseAdsListResponseIterable getAllTVShows(String tvMarket, String q, Optional count, Optional cursor)
throws TwitterException {
TwitterAdUtil.ensureNotNull(tvMarket, "tvMarket");
List params = validateTvShowsParameters(tvMarket, q, count, cursor);
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TV_SHOWS;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public BaseAdsListResponseIterable getAllEvents() throws TwitterException {
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TARGETING_CRITERIA_EVENT;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, null, type);
}
@Override
public BaseAdsListResponseIterable getAllTVMarkets() throws TwitterException {
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TV_MARKETS;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, null, type);
}
@Override
public BaseAdsListResponseIterable getAllTargetingTVGenres() throws TwitterException {
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TV_GENRES;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, null, type);
}
@Override
public List getTargetingSuggestion(String accountId, SuggestionType suggestionType, List targetingValues,
Optional count, List ignoredValues) throws TwitterException {
TwitterAdUtil.ensureNotNull(accountId, "AccountId");
TwitterAdUtil.ensureNotNull(suggestionType, "Suggestion Type");
TwitterAdUtil.ensureNotEmpty(targetingValues, "Targeting Values");
List params = new ArrayList<>();
params.add(new HttpParameter(PARAM_SUGGESTION_TYPE, suggestionType.name()));
params.add(new HttpParameter(PARAM_TARGETING_VALUES, TwitterAdUtil.getCsv(targetingValues)));
if (TwitterAdUtil.isNotEmpty(ignoredValues)) {
params.add(new HttpParameter(PARAM_IGNORED_VALUES, TwitterAdUtil.getCsv(ignoredValues)));
}
if (count != null && count.isPresent()) {
params.add(new HttpParameter(PARAM_COUNT, count.get() > MAX_REQUEST_PARAMETER_SIZE ? MAX_REQUEST_PARAMETER_SIZE : count.get()));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_TARGETING_SUGGESTIONS;
HttpResponse httpResponse = twitterAdsClient.getRequest(baseUrl, params.toArray(new HttpParameter[params.size()]));
try {
Type type = new TypeToken>() {
}.getType();
BaseAdsListResponse baseAdsListResponse =
TwitterAdUtil.constructBaseAdsListResponse(httpResponse, httpResponse.asString(), type);
return baseAdsListResponse == null ? Collections.emptyList() : baseAdsListResponse.getData();
} catch (IOException e) {
throw new TwitterException("Failed to parse promoted tweets.");
}
}
@Override
public List searchAppStoreCategories(String q, Optional appStoreSearchType) throws TwitterException {
List params = new ArrayList<>();
if (TwitterAdUtil.isNotNullOrEmpty(q)) {
params.add(new HttpParameter("q", q));
}
if (appStoreSearchType != null && appStoreSearchType.isPresent()) {
params.add(new HttpParameter("store", appStoreSearchType.get().name()));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_TARGETING_CRITERIA_APP_STORE_CATEGORIES;
HttpResponse httpResponse = twitterAdsClient.getRequest(baseUrl, params.toArray(new HttpParameter[params.size()]));
try {
Type type = new TypeToken>() {
}.getType();
BaseAdsListResponse baseAdsListResponse =
TwitterAdUtil.constructBaseAdsListResponse(httpResponse, httpResponse.asString(), type);
return baseAdsListResponse == null ? Collections.emptyList() : baseAdsListResponse.getData();
} catch (IOException e) {
throw new TwitterException("Failed to parse response for app store categories");
}
}
@Override
public BaseAdsListResponseIterable getBehaviors(Optional count, Optional cursor, List behaviorIds)
throws TwitterException {
List params = new ArrayList<>();
if (count != null && count.isPresent()) {
params.add(new HttpParameter("count", count.get()));
}
if (cursor != null && cursor.isPresent()) {
params.add(new HttpParameter("cursor", cursor.get()));
}
if (TwitterAdUtil.isNotEmpty(behaviorIds)) {
params.add(new HttpParameter("behavior_ids", TwitterAdUtil.getCsv(behaviorIds)));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_BEHAVIORS;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public BaseAdsListResponseIterable getBehaviorTaxonomy(List behaviorTaxonomyIds,
List parentBehaviorTaxonomyIds, Optional count,
Optional cursor) throws TwitterException {
List params = new ArrayList<>();
if (TwitterAdUtil.isNotEmpty(behaviorTaxonomyIds)) {
params.add(new HttpParameter("behavior_taxonomy_ids", TwitterAdUtil.getCsv(behaviorTaxonomyIds)));
}
if (TwitterAdUtil.isNotEmpty(parentBehaviorTaxonomyIds)) {
params.add(new HttpParameter("parent_behavior_taxonomy_ids", TwitterAdUtil.getCsv(parentBehaviorTaxonomyIds)));
}
if (count != null && count.isPresent()) {
params.add(new HttpParameter("count", count.get()));
}
if (cursor != null && cursor.isPresent()) {
params.add(new HttpParameter("cursor", cursor.get()));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PATH_BEHAVIORS_TAXONOMY;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
@Override
public BaseAdsListResponseIterable getAllAppLists(String accountId) throws TwitterException {
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_APP_LIST;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, null, type);
}
@Override
public BaseAdsResponse getAllAppsListsById(String accountId, String listId) throws TwitterException {
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_APP_LIST + listId;
Type typeToken = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpRequest(baseUrl, null, typeToken, HttpVerb.GET);
}
@Override
public BaseAdsResponse createNewApplicationList(String accountId, TwitterApplicationList twitterApplicationList)
throws TwitterException {
List params = validateAndCreateApplicationListParameters(twitterApplicationList);
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + PREFIX_ACCOUNTS_URI_2 + accountId + PATH_APP_LIST;
Type typeToken = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpRequest(baseUrl, params.toArray(new HttpParameter[params.size()]), typeToken, HttpVerb.POST);
}
// ---------------------------------------- Private Methods --------------------------------------------------
private BaseAdsListResponseIterable hitQueryForPath(String q, String queryPath) throws TwitterException {
List params = new ArrayList<>();
if (TwitterAdUtil.isNotNullOrEmpty(q)) {
params.add(new HttpParameter("q", q));
}
String baseUrl = twitterAdsClient.getBaseAdsAPIUrl() + queryPath;
Type type = new TypeToken>() {
}.getType();
return twitterAdsClient.executeHttpListRequest(baseUrl, params, type);
}
private List validateAndCreateTargetingParameters(List targetingValues) {
List params = new ArrayList<>();
Map> targeting = new HashMap<>();
for (TargetingCriteria targetingCriteria : targetingValues) {
if (targeting.containsKey(targetingCriteria.getTargetingType())) {
targeting.get(targetingCriteria.getTargetingType()).add(targetingCriteria.getTargetingValue());
} else {
targeting.put(targetingCriteria.getTargetingType(), Lists.newArrayList(targetingCriteria.getTargetingValue()));
}
}
for (Map.Entry> entry : targeting.entrySet()) {
//noinspection EnumSwitchStatementWhichMissesCases
switch (entry.getKey()) {
case LOCATION:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 250);
params.add(new HttpParameter(PARAM_LOCATIONS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case FOLLOWERS_OF_USER:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 100);
params.add(new HttpParameter(PARAM_FOLLOWERS_OF_USERS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case SIMILAR_TO_FOLLOWERS_OF_USER:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 100);
params.add(new HttpParameter(PARAM_SIMILAR_TO_FOLLOWERS_OF_USERS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case INTEREST:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1000);
params.add(new HttpParameter(PARAM_INTERESTS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case PLATFORM:
params.add(new HttpParameter(PARAM_PLATFORMS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case PLATFORM_VERSION:
params.add(new HttpParameter(PARAM_PLATFORM_VERSIONS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case DEVICE:
params.add(new HttpParameter(PARAM_DEVICES, TwitterAdUtil.getCsv(entry.getValue())));
break;
case WIFI_ONLY:
params.add(new HttpParameter(PARAM_WIFI_ONLY, TwitterAdUtil.getCsv(entry.getValue())));
break;
case GENDER:
params.add(new HttpParameter(PARAM_GENDER, TwitterAdUtil.getCsv(entry.getValue())));
break;
case TV_SHOW:
params.add(new HttpParameter(PARAM_TV_SHOWS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case TV_CHANNEL:
params.add(new HttpParameter(PARAM_TV_CHANNEL, TwitterAdUtil.getCsv(entry.getValue())));
break;
case TV_GENRE:
params.add(new HttpParameter(PARAM_TV_GENRE, TwitterAdUtil.getCsv(entry.getValue())));
break;
case TV_MARKET:
break;
case NETWORK_OPERATOR:
params.add(new HttpParameter(PARAM_NETWORK_OPERATOR, TwitterAdUtil.getCsv(entry.getValue())));
break;
case BROAD_KEYWORD:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1000);
params.add(new HttpParameter(PARAM_BROAD_KEYWORDS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case UNORDERED_KEYWORD:
params.add(new HttpParameter(PARAM_UNORDERED_KEYWORDS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case PHRASE_KEYWORD:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1000);
params.add(new HttpParameter(PARAM_PHRASE_KEYWORDS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case EXACT_KEYWORD:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1000);
params.add(new HttpParameter(PARAM_EXACT_KEYWORDS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case NEGATIVE_PHRASE_KEYWORD:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1000);
params.add(new HttpParameter(PARAM_NEGATIVE_PHRASE_KEYWORDS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case NEGATIVE_UNORDERED_KEYWORD:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1000);
params.add(new HttpParameter(PARAM_NEGATIVE_UNORDERED_KEYWORDS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case NEGATIVE_EXACT_KEYWORD:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1000);
params.add(new HttpParameter(PARAM_NEGATIVE_EXACT_KEYWORDS, TwitterAdUtil.getCsv(entry.getValue())));
break;
case TAILORED_AUDIENCE:
params.add(new HttpParameter(PARAM_TAILORED_AUDIENCES, TwitterAdUtil.getCsv(entry.getValue())));
break;
case TAILORED_AUDIENCES_EXCLUDED:
params.add(new HttpParameter(PARAM_TAILORED_AUDIENCES_EXCLUDED, TwitterAdUtil.getCsv(entry.getValue())));
break;
case TAILORED_AUDIENCES_EXPANDED:
params.add(new HttpParameter(PARAM_TAILORED_AUDIENCES_EXPANDED, TwitterAdUtil.getCsv(entry.getValue())));
break;
case LANGUAGE:
params.add(new HttpParameter(PARAM_LANGUAGES, TwitterAdUtil.getCsv(entry.getValue())));
break;
case RTB_APP_CATEGORY:
break;
case NETWORK_ACTIVATION_DURATION_LT:
params.add(new HttpParameter(PARAM_NETWORK_ACTIVATION_DURATION_LT, TwitterAdUtil.getCsv(entry.getValue())));
break;
case NETWORK_ACTIVATION_DURATION_GTE:
params.add(new HttpParameter(PARAM_NETWORK_ACTIVATION_DURATION_GTE, TwitterAdUtil.getCsv(entry.getValue())));
break;
case AGE:
params.add(new HttpParameter(PARAM_AGE_RANGE, TwitterAdUtil.getCsv(entry.getValue())));
break;
case BEHAVIOR:
params.add(new HttpParameter(PARAM_BEHAVIOR, TwitterAdUtil.getCsv(entry.getValue())));
break;
case NEGATIVE_BEHAVIOR:
params.add(new HttpParameter(PARAM_NEGATIVE_BEHAVIOR, TwitterAdUtil.getCsv(entry.getValue())));
break;
case BEHAVIOR_EXPANDED:
params.add(new HttpParameter(PARAM_BEHAVIOR_EXPANDED, TwitterAdUtil.getCsv(entry.getValue())));
break;
case ENGAGEMENT_TYPE:
params.add(new HttpParameter(PARAM_ENGAGEMENT_TYPE, TwitterAdUtil.getCsv(entry.getValue())));
break;
case USER_ENGAGEMENT:
params.add(new HttpParameter(PARAM_USER_ENGAGEMENT, TwitterAdUtil.getCsv(entry.getValue())));
break;
case CAMPAIGN_ENGAGEMENT:
params.add(new HttpParameter(PARAM_CAMPAIGN_ENGAGEMENT, TwitterAdUtil.getCsv(entry.getValue())));
break;
case EXCLUDE_APP_LIST:
params.add(new HttpParameter(PARAM_EXCLUDE_APP_LIST_IDENTIFIER, TwitterAdUtil.getCsv(entry.getValue())));
break;
case EVENT:
TwitterAdUtil.ensureMaxSize(entry.getValue(), 1);
params.add(new HttpParameter(PARAM_EVENT, TwitterAdUtil.getCsv(entry.getValue())));
break;
case APP_STORE_CATEGORY:
params.add(new HttpParameter(PARAM_APP_STORE_CATEGORY, TwitterAdUtil.getCsv(entry.getValue())));
break;
}
}
return params;
}
private List validateTargetingLocationParameters(final Optional locationType, final String q, final String countryCode,
final Optional count) {
List params = new ArrayList<>();
if (locationType != null && locationType.isPresent()) {
params.add(new HttpParameter(PARAM_LOCATION_TYPE, locationType.get().name()));
}
if (TwitterAdUtil.isNotNullOrEmpty(q)) {
params.add(new HttpParameter(PARAM_Q, q));
}
if (TwitterAdUtil.isNotNullOrEmpty(countryCode)) {
params.add(new HttpParameter(PARAM_COUNTRY_CODE, countryCode));
}
if (count != null && count.isPresent()) {
params.add(new HttpParameter(PARAM_COUNT, count.get()));
}
return params;
}
private List validateTvShowsParameters(String tvMarket, String q, Optional count, Optional cursor) {
TwitterAdUtil.ensureNotNull(tvMarket, "tvMarket");
List params = new ArrayList<>();
if (StringUtils.isNotBlank(tvMarket)) {
params.add(new HttpParameter(PARAM_TV_MARKET, tvMarket));
}
if (StringUtils.isNotBlank(q)) {
params.add(new HttpParameter(PARAM_Q, q));
}
if (count != null && count.isPresent()) {
params.add(new HttpParameter(PARAM_COUNT, count.get()));
}
if (cursor != null && cursor.isPresent()) {
params.add(new HttpParameter(PARAM_CURSOR, cursor.get()));
}
return params;
}
private List validateAndCreateApplicationListParameters(TwitterApplicationList twitterApplicationList) {
List params = new ArrayList<>();
if (TwitterAdUtil.isNotNullOrEmpty(twitterApplicationList.getName())) {
params.add(new HttpParameter(PARAM_NAME, twitterApplicationList.getName()));
}
if (TwitterAdUtil.isNotEmpty(twitterApplicationList.getApps())) {
List apps = twitterApplicationList.getApps();
List appIdentifiers = Lists.newArrayList();
for (TwitterApplicationDetails twitterApplicationDetails : apps) {
if (TwitterAdUtil.isNotNullOrEmpty(twitterApplicationDetails.getAppIdentifier())) {
appIdentifiers.add(twitterApplicationDetails.getAppIdentifier());
}
}
if (TwitterAdUtil.isNotEmpty(appIdentifiers)) {
params.add(new HttpParameter(PARAM_APP_STORE_IDENTIFIERS, TwitterAdUtil.getCsv(appIdentifiers)));
}
}
return params;
}
}