Как я могу получить информацию ipAddress из критерия?

Я работаю с Google Adwords и в настоящее время не могу получить конкретную информацию. В моей учетной записи Adwords я установил "Исключение IP-адресов" с 3 IP-адресами. Я хочу получить этот IP-адрес из моего кода:

AdWordsUser user = new AdWordsUser();
var campaignService = (CampaignCriterionService)user.GetService(AdWordsService.v201506.CampaignCriterionService);
int offset = 0;
        int pageSize = 500;

        var page = new CampaignCriterionPage();
        String awql = "SELECT Id where IsNegative = true ORDER BY Id ASC LIMIT " + offset + "," + pageSize;
try
        {
            do
            {   
                page = campaignService.query(awql);

                // Display the results.
                if (page != null && page.entries != null)
                {
                    int i = offset;
                    foreach (var item in page.entries)
                    {
                        var t = item; //my work logic here ....                           
                        i++;
                    }
                }
                offset += pageSize;
            } while (offset < page.totalNumEntries);
            Debug.WriteLine("Number of items found: {0}", page.totalNumEntries);
        }
        catch (Exception e)
        {
            throw new System.ApplicationException("Failed to retrieve campaigns", e);
        }

Запрос возвращает количество результатов: 3, но без фактической информации о ipAddress( ipAddress содержит ноль) .

А что я могу сделать?

1 ответ

К сожалению, я не верю, что AWQL предоставляет селектор для адреса заблокированного IP. В любом случае, он, конечно, НЕ поставляется с оператором AWQL, который вы использовали выше, который только возвращает поле Id:

String awql = "SELECT Id where IsNegative = true ORDER BY Id ASC LIMIT " + offset + "," + pageSize; try

Вот почему значение пусто в вашем ответе.

Единственный способ, которым я верю, что это возможно - это испачкать руки Selector а также Predicate объекты для этой услуги и использовать get() метод, а не query() один.

Это решение работает для меня (правда, с более поздней версией API)

var campaignCriterionService = (CampaignCriterionService)user.GetService(AdWordsService.v201601.CampaignCriterionService);
int offset = 0;
int pageSize = 500;

var page = new CampaignCriterionPage();

try
{
    do
    {
        page = campaignCriterionService.get(new Selector
        {
            fields = new string[] { IpBlock.Fields.Id, IpBlock.Fields.IpAddress },
            predicates = new Predicate[]
            {
                new Predicate
                {
                    field = IpBlock.Fields.CriteriaType,
                    @operator = PredicateOperator.EQUALS,
                    values = new string[] { "IP_BLOCK" }
                }
            }
        });

        // Display the results.
        if (page != null && page.entries != null)
        {
            int i = offset;
            foreach (var item in page.entries)
            {
                var t = item; //my work logic here ....                           
                i++;
            }
        }
        offset += pageSize;
    } while (offset < page.totalNumEntries);
    Debug.WriteLine("Number of items found: {0}", page.totalNumEntries);
}
catch (Exception e)
{
    throw new System.ApplicationException("Failed to retrieve campaigns", e);
}
Другие вопросы по тегам