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的普通帖子。这是一个错误吗?
答案 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”。要包含多个图像,请使用不同的名称将它们全部附加,并在每个广告组中指定它们。
我希望这对于尝试使用不同图片一次创建多个广告组的人有用。