广告API - MediaObject - howto?

时间:2011-03-11 05:07:41

标签: facebook-c#-sdk facebook-ads-api

Facebook广告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 内容长度:5945 期待:100-continue

- 8cdad9aeb95b79c 内容处理:表格数据;名称= “方法”

ads.createAdGroups --8cdad9aeb95b79c 内容处理:表格数据;名称= “ACCOUNT_ID”

106925396 --8cdad9aeb95b79c 内容处理:表格数据;名称= “adgroup_specs”

System.Collections.Generic.List`1 [System.Object的] --8cdad9aeb95b79c 内容处理:表格数据;名称= “API_KEY”

- 8cdad9aeb95b79c 内容处理:表格数据;名称= “格式”

JSON串 --8cdad9aeb95b79c 内容处理:表格数据; filename =“667_Screen shot 2011-02-24 at 3.46.29 PM.png” 内容类型:image / png

它正在转换List&lt;&gt;不正确。这适用于没有multipart的普通帖子。这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

这看起来像是一个bug。请在codeplex上的问题跟踪器中提交。 http://facebooksdk.codeplex.com/workitem/list/basic

答案 1 :(得分:0)

通常,这适用于Facebook Ads API。这可能有点令人困惑,因为每个广告组的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文件附件,文件名为“sample.gif”。要包含多个图像,请使用不同的名称将它们全部附加,并在每个广告组中指定它们。

我希望这对于尝试使用不同图片一次创建多个广告组的人有用。