Google Ads API: how to handle missing entities in result?

32 views
Skip to first unread message

Mat

unread,
Mar 22, 2019, 10:13:30 AM3/22/19
to AdWords API and Google Ads API Forum
Hi,

fetching a Ads API report using a query like this:

  query = ('SELECT '
           'extension_feed_item.app_feed_item.final_urls, '
           'extension_feed_item.app_feed_item.final_mobile_urls, '
           'extension_feed_item.promotion_feed_item.final_urls, '
           'extension_feed_item.promotion_feed_item.final_mobile_urls, '
           'extension_feed_item.sitelink_feed_item.final_urls, '
           'extension_feed_item.sitelink_feed_item.final_mobile_urls, '
           'extension_feed_item.status, '
           'extension_feed_item.resource_name, '
           'ad_group.status, '
           'campaign.status, '
           'campaign.serving_status '                     
           'FROM extension_feed_item '
           'WHERE extension_feed_item.status = ENABLED '
           'AND ad_group.status = ENABLED '
           'AND campaign.status = ENABLED '
           'AND campaign.serving_status = SERVING'
           )

may result in rows, where some of the selected fields are missing:

campaign {
  resource_name: "customers/1234567890/campaigns/1234567890"
  status: ENABLED
  serving_status: SERVING
}
ad_group {
  resource_name: "customers/1234567890/adGroups/1234567890"
  status: ENABLED
}
extension_feed_item {
  resource_name: "customers/1234567890/extensionFeedItems/1234567890"
  status: ENABLED
}

An attempt to access the non-existent fields will result in an error:

app_final_urls = extension_feed_item.app_feed_item.final_urls.value


> AttributeError: 'google.protobuf.pyext._message.RepeatedCompositeCo' object has no attribute 'value'


How can I avoid this?

Best regards
Mat
Message has been deleted

Mat

unread,
Mar 22, 2019, 12:10:14 PM3/22/19
to AdWords API and Google Ads API Forum
After some more experimentation I learned that the if-queries are not needed after all. The following code also works - never mind :-)

  query = ('SELECT '
           'extension_feed_item.app_feed_item.final_urls, '
           'extension_feed_item.app_feed_item.final_mobile_urls, '
           'extension_feed_item.promotion_feed_item.final_urls, '
           'extension_feed_item.promotion_feed_item.final_mobile_urls, '
           'extension_feed_item.sitelink_feed_item.final_urls, '
           'extension_feed_item.sitelink_feed_item.final_mobile_urls, '
           'extension_feed_item.status, '
           'extension_feed_item.resource_name, '
           'ad_group.status, '
           'campaign.status, '
           'campaign.serving_status '                     
           'FROM extension_feed_item '
           'WHERE extension_feed_item.status = ENABLED '
           'AND ad_group.status = ENABLED '
           'AND campaign.status = ENABLED '
           'AND campaign.serving_status = SERVING'
           )
  results = ga_service.search(customer_id, query=query)
  try:
    for row in results:
      for e in row.extension_feed_item.app_feed_item.final_urls:
        print(e.value)
      for e in row.extension_feed_item.app_feed_item.final_mobile_urls:
        print(e.value)
      for e in row.extension_feed_item.promotion_feed_item.final_urls:
        print(e.value)
      for e in row.extension_feed_item.promotion_feed_item.final_mobile_urls:
        print(e.value)
      for e in row.extension_feed_item.sitelink_feed_item.final_urls:
        print(e.value)
      for e in row.extension_feed_item.sitelink_feed_item.final_mobile_urls:
        print(e.value)

Reply all
Reply to author
Forward
0 new messages