Рекламный API - MediaObject - как? - PullRequest
2 голосов
/ 11 марта 2011

В Facebook Ads API есть вызов для размещения рекламы - для этого требуется присоединить изображения к сообщению, задать имя файла в creative_spec, а затем добавить изображение с этим именем в составную часть.

Объект FacebookMedia кажется правильным для этого, но затем я вижу в коде, что только 1 медиа-объект может быть прикреплен к сообщению.Есть ли причина для этого?

Вот некоторый (дрянной, первый проход) код:

        dynamic adgroup = new ExpandoObject();
        adgroup.method = "ads.createAdGroups";
        adgroup.account_id = AdAccount.FbAdAccountId;
        adgroup.adgroup_specs = new List<dynamic>();


            dynamic adgroup_specs = new ExpandoObject();
            adgroup_specs.campaign_id = campaignid;
            adgroup_specs.name = ad.campaign_name;
            adgroup_specs.status = 1;
            adgroup_specs.bid_type = 1;
            adgroup_specs.max_bid = ad.max_bid;
            adgroup_specs.targeting = (dynamic)(new ExpandoObject());
            adgroup_specs.targeting.countries = new List<string>();
            adgroup_specs.targeting.countries.Add("US");

            adgroup_specs.creative = (dynamic)(new ExpandoObject());
            adgroup_specs.creative.title = ad.AdTitleText;
            adgroup_specs.creative.body = ad.AdCopyText;
            adgroup_specs.creative.link_url = ad.url; // TODO: ASk Bill
            adgroup_specs.creative.file_name = ad.ImageId + "_" + ad.ImageName;

            var image = dc.Images.Where(r => r.ImageId == ad.ImageId).FirstOrDefault();

            adgroup.adgroup_specs.Add(adgroup_specs);

Затем мне нужно прикрепить все изображения, не зная, как это сделать.Они должны быть в сообщении с их именем, поэтому я полагаю, что могу прикрепить их куда угодно:

        var images = (from image in dc.Images
                      where image_ids.Contains(image.ImageId)
                      select image).Distinct();


        var p = adgroups as IDictionary<String, object>;

        foreach (var i in images)
        {
            FacebookMediaObject fmo = new FacebookMediaObject();
            fmo.FileName = i.ImageId + "_" + i.Name;
            fmo.SetValue(i.ImageData);
            fmo.ContentType = "image/png";
            p.Add(i.ImageId + "_" + i.Name, fmo);
        }

        dynamic dresult = FbApp.Post(adgroup);

РЕДАКТИРОВАТЬ: Так что это даже не работало с одним изображением, у меня есть список объявлений и когдаотправленный без изображения, он публикует правильные данные, когда публикуется с изображением, он выглядит следующим образом (смотрите adgroup_specs):

Хост: api.facebook.com Content-Length: 5945 Ожидаемое: 100-продолжение

- 8cdad9aeb95b79c Содержание-расположение: данные формы;name = "method"

ads.createAdGroups --8cdad9aeb95b79c Content-Disposition: form-data;name = "account_id"

106925396 --8cdad9aeb95b79c Content-Disposition: form-data;name = "adgroup_specs"

System.Collections.Generic.List`1 [System.Object] --8cdad9aeb95b79c Content-Disposition: form-data;name = "api_key"

- 8cdad9aeb95b79c Content-Disposition: form-data;name = "format"

json-strings --8cdad9aeb95b79c Content-Disposition: form-data;filename = "667_Screen shot 2011-02-24 at 3.46.29 PM.png" Content-Type: image / png

Преобразует список <> неправильно.Это работает в обычном посте без multipart.Это ошибка?

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Похоже, это ошибка.Пожалуйста, отправьте его в трекер проблем на codeplex.http://facebooksdk.codeplex.com/workitem/list/basic

0 голосов
/ 17 июня 2011

Как правило, это работает с API рекламы Facebook. Это может немного сбивать с толку, потому что JSON для каждой группы объявлений должен ссылаться на имя изображения, которое он использует для своего объявления, например:

[
  {
    "campaign_id": 12345,
    "bid_type": 1,                                                                                                                                                                               
    "max_bid": 150,                                                                                                                                                 
    "name": "My New Ad",
    "adgroup_status": 2,                                                                                                                                                                      
    "creative": {
      "title": "My New Ad",
      "body": "Body text for my new ad",
      "link_url": "http://www.example.com/",
      "image_file": "sample.gif"
    },
    "targeting": {
      "country": ["US"],
      "age_min": 25,
      "age_max": 66,
      "genders": [1],
    }
  }
]

Место, где написано "sample.gif", говорит, что Facebook тоже заглянет в этот POST для вложения файла с filename = "sample.gif". Чтобы включить несколько изображений, прикрепите их все под разными именами и укажите их в каждой из групп объявлений.

Надеюсь, это полезно для людей, пытающихся создать несколько групп объявлений одновременно, используя разные изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...