如何通过Facebook Marketing API获取轮播广告的唯一图片?
问题背景
我需要从Facebook广告中获取所有唯一图片。当广告适配多个版位时,Facebook会为同一张图片生成不同的哈希值,导致调用<ad_id>/adcreatives?fields=asset_feed_spec接口时,原本只有4张图片的轮播组件,返回的asset_feed_spec里却显示9张图片(都是因多版位生成的不同哈希值的同图变体)。请问有没有办法获取到所有唯一的图片?
可行解决方案
通过图片URL核心标识去重:Facebook生成的版位变体图片URL,通常仅在末尾添加尺寸、格式等参数,核心路径/文件名是一致的。提取URL中去掉变体参数的核心部分,以此作为唯一标识分组去重。
示例:https://fbcdn.com/abc123_800x800.jpg与https://fbcdn.com/abc123_1080x1080.jpg的核心标识都是abc123,判定为同一张图片。调用带
image_hash字段的接口:修改请求接口为GET <ad_id>/adcreatives?fields=asset_feed_spec,image_hash,image_hash是原始图片的唯一哈希值,同一张图片的所有版位变体共享该值,直接通过此字段分组筛选唯一图片。解析
asset_feed_spec中的original_asset_id:在asset_feed_spec的图片对象中,original_asset_id对应原始上传的图片ID,所有同图的版位变体该ID一致。遍历图片列表,按此ID分组,每组保留一个条目即可。计算图片文件哈希值(兜底方案):如果上述字段都无法获取,可请求图片的原始URL下载文件,计算其MD5或SHA-256哈希值,以此作为唯一标识去重。该方法准确率最高,但会增加网络请求成本。
内容的提问来源于stack exchange,提问作者Kashyap Chandarana

