2

Facebook Ads API 调用了发布广告 - 它需要将图像附加到帖子,并在 creative_spec 中设置文件名,然后在 multipart 中附加具有该名称的图像。

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-继续

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

ads.createAdGroups --8cdad9aeb95b79c 内容处置:表单数据;名称="account_id"

106925396 --8cdad9aeb95b79c 内容处置:表单数据;名称="广告组规格"

System.Collections.Generic.List`1[System.Object] --8cdad9aeb95b79c 内容处置:表单数据;名称="api_key"

--8cdad9aeb95b79c 内容处置:表单数据;名称="格式"

json-strings --8cdad9aeb95b79c 内容配置:表单数据;filename="667_Screen shot 2011-02-24 at 3.46.29 PM.png" Content-Type: image/png

它正在错误地转换 List<>。这适用于没有多部分的普通帖子。这是一个错误吗?

4

2 回答 2

1

这看起来像是一个错误。请将其归档到 codeplex 上的问题跟踪器中。http://facebooksdk.codeplex.com/workitem/list/basic

于 2011-03-14T19:15:24.770 回答
0

一般来说,这确实适用于 Facebook 广告 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”的文件附件。要包含多张图片,请使用不同的名称附加它们,并在每个广告组中指定它们。

我希望这对尝试使用不同图像一次创建多个广告组的人们有所帮助。

于 2011-06-16T20:31:56.140 回答