Получите отказ от рекламы в Facebook для нескольких объявлений

Каков наилучший и наиболее оптимальный способ проверить список заданных групп объявлений (список идентификаторов групп объявлений) на предмет отклонения статуса и узнать причины отклонения?

Самый простой, но не оптимальный способ:

1) Получить все отклоненные группы объявлений учетной записи:

params = {
    'status': ['DISAPPROVED'],
    'limit': 1000
}
adgroup_iter = account.get_ad_groups(params=params)
disapproved_ad_ids = []
for adgroup in adgroup_iter:
    disapproved_ad_ids.append(adgroup._data['id'])

2) Из полученного списка выберите только интересующие ad_groups пересекающимися списками:

ads_of_interest = list(set(ad_ids_to_check) & set(disapproved_ad_ids))

3) Сделайте запрос ДЛЯ КАЖДОЙ интересующей группы объявлений по причинам отклонения (поле adgroup_review_feedback):

for adgroup_id in ads_of_interest:
    adgroup = AdGroup(adgroup_id)
    print adgroup.remote_read(fields=[AdGroup.Field.adgroup_review_feedback])

Плохо то, что у меня работает много рекламы, и нехорошо делать отдельный вызов API, чтобы получить причину отклонения для каждой из них, потому что это просто заставляет меня превышать лимит запросов facebook.

ЗАКОНЧИЛСЯ РЕШЕНИЕМ:

params = {
    'adgroup_status': ['DISAPPROVED'],
    'limit': 500,
    'fields': 'id,adgroup_review_feedback'
}

а затем ищет пересечения результатов и список «интересных» объявлений, отбрасывая 3-й абзац моего вопроса, потому что необходимые данные уже содержатся в результатах 1-го (спасибо за ответ @Igy)

Упомяните имя поля 'adgroup_status' вместо 'status' (как указано в моем вопросе) - это решило проблему неправильных ответов facebook. Вероятно, это опечатка в документации в разделе "Извлечение всех реклама рекламного аккаунта..." пример для Python SDK, так как он не работает в SDK v.2.2.6


person Nikita Mendelbaum    schedule 03.03.2015    source источник


Ответы (1)


Нет необходимости получать каждое объявление по отдельности

Вы можете запросить поле adgroup_review_feedback вместе с другими интересующими вас полями при первоначальном получении списка.

Вот пример из моей учетной записи, идентификаторы удалены:

/v2.2/act_<ACCOUNT_ID>/adgroups
  ?adgroup_status=['DISAPPROVED']
  &fields=id,adgroup_review_feedback

Ответ:

{
  "data": [
    {
      "id": "<REMOVED>", 
      "adgroup_review_feedback": {
        "TEXT_OVERLAY": "Your ad wasn't approved because it uses too much text in its image or video thumbnail, which doesn't follow Facebook's ad guidelines. Ad images or video thumbnails aren't allowed to include more than 20% text. You'll still be charged for any impressions or clicks your ad received before it was disapproved. You may upload your ad image to see why it is considered 20% text, or visit the Help Center to learn more.If you’ve read the guidelines in the Help Center and think your ad follows the rules and should have been approved, please let us know."
      }
    }, 
    {
      "id": "<REMOVED>", 
      "adgroup_review_feedback": {
        "TEXT_OVERLAY": "Your ad wasn't approved because it uses too much text in its image or video thumbnail, which doesn't follow Facebook's ad guidelines. Ad images or video thumbnails aren't allowed to include more than 20% text. You'll still be charged for any impressions or clicks your ad received before it was disapproved. You may upload your ad image to see why it is considered 20% text, or visit the Help Center to learn more.If you’ve read the guidelines in the Help Center and think your ad follows the rules and should have been approved, please let us know."
      }
    }
  ], 
  "paging": {
    "cursors": {
      "before": "<REMOVED>==", 
      "after": "<REMOVED>=="
    }
  }
}

Используя ваш код из вопроса в качестве примера, похоже, что он распечатает причины отклонения для всех отклоненных объявлений. к аккаунту со временем добавляется много рекламы

params = {
    'status': ['DISAPPROVED'],
    'limit': 1000,
    'fields': 'id,adgroup_review_feedback'
}

adgroup_iter = account.get_ad_groups(params=params)
for adgroup in adgroup_iter:
    print adgroup(adgroup_review_feedback)
person Igy    schedule 03.03.2015
comment
Спасибо! Это действительно полезно. Не удалось найти в справочнике по API, как запрашивать дополнительные данные при вызове /v2.2/act_‹ACCOUNT_ID›/adgroups Кроме того, в последней строке вы написали: print adgroup(adgroup_review_feedback) Вы имели в виду print adgroup._data['adgroup_review_feedback'] вместо этого или есть лучший способ получить данные из объекта группы объявлений? - person Nikita Mendelbaum; 04.03.2015
comment
Что касается лимита на 1000 элементов - в документации сказано, что это нормально (Developers.facebook.com/docs/marketing-api/adgroup/) На данный момент у меня 460 объявлений в ответе, и он возвращается, прежде чем вы успели сказать Майли Сайрус - person Nikita Mendelbaum; 04.03.2015
comment
И еще вопрос: какие группы объявлений возвращаются с моим и вашим кодом, у которых вообще нет adgroup_review_feedback? Таким образом, эта группа объявлений отклонена без указания причины... - person Nikita Mendelbaum; 04.03.2015
comment
И извините: есть ли способ отфильтровать результаты запроса по adgroup_ids, чтобы получить только интересующие меня ad_groups вместо всех отклоненных за все время? - person Nikita Mendelbaum; 04.03.2015
comment
Мой пример того, как сделать ваш вызов, может быть неправильным, но вызов API, который я предоставил выше, определенно работает. Кстати, не для всех отклоненных объявлений будут доступны отзывы о том, почему они были отклонены, поэтому вы можете увидеть некоторые отклоненные объявления без отзывов, особенно старые объявления. Любой запрос, который вы делаете, который запрашивает рекламу, может запрашивать поле adgroup_review_feedback как часть этого запроса. Если вы делаете один вызов, чтобы получить список «интересных» объявлений, а другой — чтобы увидеть их статус, вы, вероятно, можете добавить adgroup_review_feedback в поля, которые вы запрашиваешь в первом звонке и пропускаешь второй - person Igy; 05.03.2015
comment
Дополнительные сведения о выборе возвращаемых полей см. здесь: developers. facebook.com/docs/graph-api/using-graph-api - person Igy; 05.03.2015
comment
Спасибо за подробный ответ - person Nikita Mendelbaum; 05.03.2015