Hi,

I have a campaign with one sitelink extension that belongs to an account 
with 5 sitelinks.  However when I download the sitelinks for the campaign, 
all 5 sitelinks are returned.  All the sitelinks in question are upgraded. 
 Can someone spot the problem with the code below?  The code attempts to 
download just the campaign's sitelinks and print them out.  As you can see 
it incorrectly prints out all 5 sitelinks.

In the interests of full disclosure, I am a colleague of Julian who posted 
about this here: 
https://groups.google.com/forum/#!searchin/adwords-api/feed/adwords-api/HbTVwjXmPhM/PZEIXgwur7UJ
 without 
receiving a complete answer.

Campaign name: campaign_2013_05_31_1105_53
Campaign ID: 135309525
Client ID: 490-175-3108
Campaign's sitelink: "Staff"

Many thanks,
Peter

-------------------------------------- CODE 
--------------------------------------
public static void runExample______2(AdWordsServices adWordsServices, 
AdWordsSession session, long[] campaignIds) throws Exception
{
FeedServiceInterface feedService = adWordsServices.get(session, 
FeedServiceInterface.class);
FeedItemServiceInterface feedItemService = adWordsServices.get(session, 
FeedItemServiceInterface.class);
CampaignFeedServiceInterface campaignFeedService = 
adWordsServices.get(session, CampaignFeedServiceInterface.class);

final Selector campaignFeedSelector = new Selector();
campaignFeedSelector.setFields(CAMPAIGN_FEED_FIELDS);
 final Predicate campaignPredicate = new Predicate();
campaignPredicate.setOperator(PredicateOperator.EQUALS);
campaignPredicate.setField("CampaignId");
campaignPredicate.setValues(new String[] { Long.toString(campaignIds[0]) });

final Predicate statusPredicate = new Predicate();
statusPredicate.setOperator(PredicateOperator.EQUALS);
statusPredicate.setField("Status");
statusPredicate.setValues(new String[] { 
CampaignFeedStatus.ACTIVE.getValue() });
 campaignFeedSelector.setPredicates(new Predicate[] { campaignPredicate, 
statusPredicate });
 final CampaignFeedPage campaignFeedPage = 
campaignFeedService.get(campaignFeedSelector);
if (campaignFeedPage != null && campaignFeedPage.getEntries() != null)
{
final CampaignFeed[] campaignFeedEntries = campaignFeedPage.getEntries();
final List<String> s = new ArrayList<String>();
for (final CampaignFeed campaignFeed : campaignFeedEntries)
{
final Long campaignId = campaignFeed.getCampaignId();
final Long feedId = campaignFeed.getFeedId();
final CampaignFeedStatus campaignFeedStatus = campaignFeed.getStatus();
final int[] placeholderTypesArray = campaignFeed.getPlaceholderTypes();
final List<Integer> placeholderTypes = getList(placeholderTypesArray);
 final Function matchingFunction = campaignFeed.getMatchingFunction();
final FunctionArgumentOperand[] lhsOperands = 
matchingFunction.getLhsOperand();
final FunctionArgumentOperand[] rhsOperands = 
matchingFunction.getRhsOperand();
final FunctionOperator functionOperator = matchingFunction.getOperator();
final String functionOperatorString = functionOperator.getValue();
final List<String> lhsFunctionArgumentOperandTypes = new 
ArrayList<String>();
final List<String> rhsFunctionArgumentOperandTypes = new 
ArrayList<String>();
if (lhsOperands != null)
{
for (final FunctionArgumentOperand lhsOperand : lhsOperands)
{
final String lhsFunctionArgumentOperandType = 
lhsOperand.getFunctionArgumentOperandType();
lhsFunctionArgumentOperandTypes.add(lhsFunctionArgumentOperandType);
}
}
if (rhsOperands != null)
{
for (final FunctionArgumentOperand rhsOperand : rhsOperands)
{
final String rhsFunctionArgumentOperandType = 
rhsOperand.getFunctionArgumentOperandType();
rhsFunctionArgumentOperandTypes.add(rhsFunctionArgumentOperandType);
}
} 
s.add("Campaign Feed: Campaign ID " + campaignId + ", " + "Feed ID " + 
feedId + ", " + "CampaignFeedStatus " + campaignFeedStatus + ", " + 
"Placeholder Types " + placeholderTypes);
s.add("\tMatching Function: functionOperatorString [" + 
functionOperatorString + "]");
final Selector feedSelector = new Selector();
feedSelector.setFields(FEED_FIELDS);
 final Predicate feedIdPredicate = new Predicate();
feedIdPredicate.setOperator(PredicateOperator.EQUALS);
feedIdPredicate.setField("Id");
feedIdPredicate.setValues(new String[] { Long.toString(feedId) });
 final Predicate feedStatusPredicate = new Predicate();
feedStatusPredicate.setOperator(PredicateOperator.EQUALS);
feedStatusPredicate.setField("FeedStatus");
feedStatusPredicate.setValues(new String[] { FeedStatus.ACTIVE.getValue() 
});
 feedSelector.setPredicates(new Predicate[] { feedIdPredicate, 
feedStatusPredicate });
 final FeedPage feedPage = feedService.get(feedSelector);
if (feedPage != null && feedPage.getEntries() != null)
{
final Feed[] feeds = feedPage.getEntries();
for (final Feed feed : feeds)
{
final Long currentFeedId = feed.getId();
final String feedName = feed.getName();
final String feedOrigin = feed.getOrigin() != null ? 
feed.getOrigin().getValue() : "";
final String FeedStatus = feed.getStatus() != null ? 
feed.getStatus().getValue() : "";
s.add("\tFeed: " + "currentFeedId " + currentFeedId + ", feedName " + 
feedName + ", feedOrigin " + feedOrigin + ", FeedStatus " + FeedStatus);
final FeedAttribute[] feedAttributes = feed.getAttributes();
for (final FeedAttribute feedAttribute : feedAttributes)
{
final Long attributeId = feedAttribute.getId();
final Boolean isPartOfKey = feedAttribute.getIsPartOfKey();
final String attributeName = feedAttribute.getName();
final String feedAttributeType = feedAttribute.getType() != null ? 
feedAttribute.getType().getValue() : "";
s.add("\t\tFeedAttribute: " + "attributeId " + attributeId + ", isPartOfKey 
" + isPartOfKey + ", attributeName " + attributeName + ", feedAttributeType 
" + feedAttributeType);
}
 final Selector feedItemSelector = new Selector();
feedItemSelector.setFields(FEED_ITEM_FIELDS);
 final Predicate feedItemFeedIdPredicate = new Predicate();
feedItemFeedIdPredicate.setOperator(PredicateOperator.EQUALS);
feedItemFeedIdPredicate.setField("FeedId");
feedItemFeedIdPredicate.setValues(new String[] { Long.toString(feedId) });
 feedItemSelector.setPredicates(new Predicate[] { feedItemFeedIdPredicate 
});
 final FeedItemPage feedItemPage = feedItemService.get(feedItemSelector);
if (feedItemPage != null && feedItemPage.getEntries() != null)
{
final FeedItem[] feedItems = feedItemPage.getEntries();
for (final FeedItem feedItem : feedItems)
{
final Long devicePreference = feedItem.getDevicePreference() != null ? 
feedItem.getDevicePreference().getDevicePreference() : null;
final String endTime = feedItem.getEndTime();
final Long feedIdentifier = feedItem.getFeedId();
final Long feedItemId = feedItem.getFeedItemId();
final String startTime = feedItem.getStartTime();
final FeedItemStatus feedItemStatus = feedItem.getStatus();
s.add("\t\tFeedItem: feedItemId " + feedItemId + ", feedId " + 
feedIdentifier + ", startTime " + startTime + ", endTime " + endTime + ", 
feedItemStatus " + feedItemStatus + ", devicePreference " + 
devicePreference);
final FeedItemValidationDetail[] validationDetails = 
feedItem.getValidationDetails();
if (validationDetails != null)
{
for (final FeedItemValidationDetail validationDetail : validationDetails)
{
final Long feedItemMappingId = validationDetail.getFeedMappingId();
final FeedItemValidationDetailValidationStatus validationStatus = 
validationDetail.getValidationStatus();
final FeedItemValidationDetailApprovalStatus validationDetailApprovalStatus 
= validationDetail.getApprovalStatus();
s.add("\t\t\tFeedItemValidationDetail: feedItemMappingId " + 
feedItemMappingId + ", validationStatus " + validationStatus + ", 
approvalStatus " + validationDetailApprovalStatus);
final FeedItemAttributeError[] validationErrors = 
validationDetail.getValidationErrors();
if (validationErrors != null)
{
for (final FeedItemAttributeError validationError : validationErrors)
{
final Integer validationErrorCode = 
validationError.getValidationErrorCode();
s.add("\t\t\t\tFeedItemAttributeError: errorCode " + validationErrorCode);
}
}
}
}
final FeedItemAttributeValue[] feedItemAttributeValues = 
feedItem.getAttributeValues();
if (feedItemAttributeValues != null)
{
for (final FeedItemAttributeValue feedItemAttributeValue : 
feedItemAttributeValues)
{
final Long feedAttributeId = feedItemAttributeValue.getFeedAttributeId();
final Long feedItemAttributeId = 
feedItemAttributeValue.getFeedAttributeId();
final Boolean booleanValue = feedItemAttributeValue.getBooleanValue();
final Double doubleValue = feedItemAttributeValue.getDoubleValue();
final Long integerValue = feedItemAttributeValue.getIntegerValue();
final String stringValue = feedItemAttributeValue.getStringValue();
s.add("\t\t\tFeedItemAttributeValue: feedAttributeId " + feedAttributeId + 
", feedItemAttributeId " + feedItemAttributeId + 
", booleanValue " + booleanValue + 
", doubleValue " + doubleValue +
", integerValue " + integerValue +
", stringValue " + stringValue);
}
}
}
}
}
}
}
for (String str : s)
System.out.println(str);
}
}

 public static final String[] CAMPAIGN_FEED_FIELDS = new String[] { 
"CampaignId", "FeedId", "MatchingFunction", "PlaceholderTypes", "Status" }; 
  
 public static final String[] FEED_FIELDS = new String[] { "Attributes", 
"FeedStatus", "Id", "Name", "Origin" }; 
 public static final String[] FEED_ITEM_FIELDS = new String[] { 
"AttributeValues", "DevicePreference", "EndTime", "FeedId", "FeedItemId", 
"StartTime", "Status", "ValidationDetails" }; 
 public static List<Integer> getList(final int[] array)
{
final List<Integer> list = new ArrayList<Integer>();
if (array != null)
{
if (array != null && array.length > 0)
{
for (final int l : array)
{
list.add(l); 
}
}
}
return list;
}

-------------------------------------- OUTPUT 
--------------------------------------
Campaign Feed: Campaign ID 135309525, Feed ID 2026485, CampaignFeedStatus 
ACTIVE, Placeholder Types [1]
Matching Function: functionOperatorString [EQUALS]
Feed: currentFeedId 2026485, feedName Main sitelink feed, feedOrigin 
ADWORDS, FeedStatus ACTIVE
FeedAttribute: attributeId 1, isPartOfKey false, attributeName 
SitelinkName, feedAttributeType STRING
FeedAttribute: attributeId 2, isPartOfKey false, attributeName SitelinkUrl, 
feedAttributeType URL
FeedAttribute: attributeId 3, isPartOfKey false, attributeName 
SitelinkDescription1, feedAttributeType STRING
FeedAttribute: attributeId 4, isPartOfKey false, attributeName 
SitelinkDescription2, feedAttributeType STRING
FeedItem: feedItemId 9846525, feedId 2026485, startTime null, endTime null, 
feedItemStatus ACTIVE, devicePreference null
FeedItemValidationDetail: feedItemMappingId 2104725, validationStatus 
VALID, approvalStatus DISAPPROVED
FeedItemAttributeValue: feedAttributeId 1, feedItemAttributeId 1, 
booleanValue null, doubleValue null, integerValue null, stringValue Contact 
Us
FeedItemAttributeValue: feedAttributeId 2, feedItemAttributeId 2, 
booleanValue null, doubleValue null, integerValue null, stringValue 
http://www.oursite.com/contactus
FeedItem: feedItemId 9846645, feedId 2026485, startTime null, endTime null, 
feedItemStatus ACTIVE, devicePreference null
FeedItemValidationDetail: feedItemMappingId 2104725, validationStatus 
VALID, approvalStatus DISAPPROVED
FeedItemAttributeValue: feedAttributeId 1, feedItemAttributeId 1, 
booleanValue null, doubleValue null, integerValue null, stringValue About Us
FeedItemAttributeValue: feedAttributeId 2, feedItemAttributeId 2, 
booleanValue null, doubleValue null, integerValue null, stringValue 
http://www.oursite.com/aboutus
FeedItem: feedItemId 9846885, feedId 2026485, startTime null, endTime null, 
feedItemStatus ACTIVE, devicePreference null
FeedItemValidationDetail: feedItemMappingId 2104725, validationStatus 
VALID, approvalStatus APPROVED
FeedItemAttributeValue: feedAttributeId 1, feedItemAttributeId 1, 
booleanValue null, doubleValue null, integerValue null, stringValue map
FeedItemAttributeValue: feedAttributeId 2, feedItemAttributeId 2, 
booleanValue null, doubleValue null, integerValue null, stringValue 
http://www.oursite.com/map
FeedItem: feedItemId 9847005, feedId 2026485, startTime null, endTime null, 
feedItemStatus ACTIVE, devicePreference null
FeedItemValidationDetail: feedItemMappingId 2104725, validationStatus 
VALID, approvalStatus APPROVED
FeedItemAttributeValue: feedAttributeId 1, feedItemAttributeId 1, 
booleanValue null, doubleValue null, integerValue null, stringValue Products
FeedItemAttributeValue: feedAttributeId 2, feedItemAttributeId 2, 
booleanValue null, doubleValue null, integerValue null, stringValue 
http://www.oursite.com/products
FeedItem: feedItemId 9847245, feedId 2026485, startTime null, endTime null, 
feedItemStatus ACTIVE, devicePreference null
FeedItemValidationDetail: feedItemMappingId 2104725, validationStatus 
VALID, approvalStatus APPROVED
FeedItemAttributeValue: feedAttributeId 1, feedItemAttributeId 1, 
booleanValue null, doubleValue null, integerValue null, stringValue Staff
FeedItemAttributeValue: feedAttributeId 2, feedItemAttributeId 2, 
booleanValue null, doubleValue null, integerValue null, stringValue 
http://www.oursite.com/staff

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://adwordsapi.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to