diff --git a/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingCreativeApi.java b/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingCreativeApi.java index 5ca052b..cf18ec0 100644 --- a/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingCreativeApi.java +++ b/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingCreativeApi.java @@ -1,10 +1,100 @@ package io.better.toutiao.api.advertisingdelivery; +import io.better.toutiao.dto.BaseRespDTO; +import io.better.toutiao.dto.delivery.creative.AdvertisingCreativeInDTO; +import io.better.toutiao.dto.delivery.creative.AdvertisingCreativeOutDTO; +import io.better.toutiao.dto.status.UpdateStatusDTO; import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; /** + * The interface Advertising creative api. + * * @author better create in 2019-04-28 16:27 */ -@FeignClient(value = "", url = "") +@FeignClient(value = "https://ad.toutiao.com/open_api/2", url = "/creative") public interface AdvertisingCreativeApi { + + /** + * 广告投放-获取某广告主的广告创意信息 + * + * @param accessToken 访问凭证 + * @param advertiserId 广告主ID + * @param page 当前页 + * @param pageSize 每页记录数 + * @param filtering 过滤字段 + * @param fields 查询字段 + * @return 广告创意信息 base resp dto + */ + @GetMapping(value = "/get") + BaseRespDTO<AdvertisingCreativeInDTO> listAdvertisingCreative(@RequestHeader("Access-Token") String accessToken, + @RequestParam("advertiser_id") Long advertiserId, + @RequestParam(value = "page", defaultValue = "1", required = false) Integer page, + @RequestParam(value = "page_size", defaultValue = "20", required = false) Integer pageSize, + @RequestParam(value = "filtering", required = false) Map<String, Object> filtering, + @RequestParam(value = "fields", required = false) String[] fields); + + /** + * 广告投放-为某广告主下的某计划创建广告创意 + * + * @param accessToken 访问凭证 + * @param advertisingCreativeOut 创建信息 + * @return the base resp dto + */ + @PostMapping(value = "/create_v2") + BaseRespDTO<Integer> createAdvertisingCreative(@RequestHeader("Access-Token") String accessToken, + @RequestBody AdvertisingCreativeOutDTO advertisingCreativeOut); + + /** + * 广告投放-查看某广告主下某计划下的创建详情信息 + * + * @param accessToken 访问凭证 + * @param advertiserId 广告主ID + * @param adId 计划ID + * @return the advertising creative detail info + */ + @GetMapping(value = "/read_v2") + BaseRespDTO<List<AdvertisingCreativeOutDTO>> getAdvertisingCreativeDetailInfo(@RequestHeader("Access-Token") String accessToken, + @RequestParam("advertiser_id") Integer advertiserId, + @RequestParam("ad_id") Integer adId); + + /** + * 更新 + * + * @param accessToken 访问凭证 + * @param advertisingCreativeOut 更新信息 + * @return the base resp dto + */ + @PostMapping(value = "/update_v2") + BaseRespDTO<Integer> updateAdvertisingCreative(@RequestHeader("Access-Token") String accessToken, + @RequestBody AdvertisingCreativeOutDTO advertisingCreativeOut); + + /** + * 广告投放-更新某个广告创意状态 + * + * @param accessToken 访问凭证 + * @param updateStatus 更新状态信息 + * @return the base resp dto + */ + @PostMapping(value = "/update/status") + BaseRespDTO<?> updateAdvertisingCreativeStatus(@RequestHeader("Access-Token") String accessToken, + @RequestBody UpdateStatusDTO updateStatus); + + /** + * 广告投放-获取光广告创意下的素材信息 + * + * @param accessToken 访问凭证 + * @param advertiserId 广告主ID + * @param creativeIds 广告创意ID + * @param fields 广告创意获取字段 + * @return + */ + @GetMapping(value = "/material/read") + BaseRespDTO<AdvertisingCreativeInDTO.CreativeMaterialInfo> getCreativeMaterial(@RequestHeader("Access-Token") String accessToken, + @RequestParam("advertiser_id") Long advertiserId, + @RequestParam("creative_ids") Long[] creativeIds, + @RequestParam("fields") String[] fields); } diff --git a/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingPlanApi.java b/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingPlanApi.java index 4635403..990d528 100644 --- a/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingPlanApi.java +++ b/src/main/java/io/better/toutiao/api/advertisingdelivery/AdvertisingPlanApi.java @@ -1,7 +1,7 @@ package io.better.toutiao.api.advertisingdelivery; import io.better.toutiao.dto.BaseRespDTO; -import io.better.toutiao.dto.advertisingdelivery.plan.AdvertisingPlanInDTO; +import io.better.toutiao.dto.delivery.plan.AdvertisingPlanInDTO; import io.better.toutiao.dto.budget.UpdateBidDTO; import io.better.toutiao.dto.budget.UpdateBudgetDTO; import io.better.toutiao.dto.resp.AdvertisingPlanRespDTO; diff --git a/src/main/java/io/better/toutiao/dto/advertisingdelivery/creative/AdvertisingCreativeDTO.java b/src/main/java/io/better/toutiao/dto/advertisingdelivery/creative/AdvertisingCreativeDTO.java deleted file mode 100644 index 573b8cc..0000000 --- a/src/main/java/io/better/toutiao/dto/advertisingdelivery/creative/AdvertisingCreativeDTO.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.better.toutiao.dto.advertisingdelivery.creative; - -import lombok.Data; - -/** - * @author better create in 2019-04-29 11:16 - */ -@Data -public class AdvertisingCreativeDTO { -} diff --git a/src/main/java/io/better/toutiao/dto/advertisingdelivery/AdvertisingDeliveryQueryDTO.java b/src/main/java/io/better/toutiao/dto/delivery/AdvertisingDeliveryQueryDTO.java similarity index 95% rename from src/main/java/io/better/toutiao/dto/advertisingdelivery/AdvertisingDeliveryQueryDTO.java rename to src/main/java/io/better/toutiao/dto/delivery/AdvertisingDeliveryQueryDTO.java index 371829a..aaff5a5 100644 --- a/src/main/java/io/better/toutiao/dto/advertisingdelivery/AdvertisingDeliveryQueryDTO.java +++ b/src/main/java/io/better/toutiao/dto/delivery/AdvertisingDeliveryQueryDTO.java @@ -1,4 +1,4 @@ -package io.better.toutiao.dto.advertisingdelivery; +package io.better.toutiao.dto.delivery; import io.better.toutiao.dto.PageDTO; import lombok.Data; diff --git a/src/main/java/io/better/toutiao/dto/advertisingdelivery/budget/AccountBudgetDTO.java b/src/main/java/io/better/toutiao/dto/delivery/budget/AccountBudgetDTO.java similarity index 82% rename from src/main/java/io/better/toutiao/dto/advertisingdelivery/budget/AccountBudgetDTO.java rename to src/main/java/io/better/toutiao/dto/delivery/budget/AccountBudgetDTO.java index d6b606e..730cdfc 100644 --- a/src/main/java/io/better/toutiao/dto/advertisingdelivery/budget/AccountBudgetDTO.java +++ b/src/main/java/io/better/toutiao/dto/delivery/budget/AccountBudgetDTO.java @@ -1,7 +1,6 @@ -package io.better.toutiao.dto.advertisingdelivery.budget; +package io.better.toutiao.dto.delivery.budget; import lombok.Data; -import lombok.EqualsAndHashCode; /** * @author better create in 2019-04-29 14:03 diff --git a/src/main/java/io/better/toutiao/dto/delivery/creative/AdvertisingCreativeInDTO.java b/src/main/java/io/better/toutiao/dto/delivery/creative/AdvertisingCreativeInDTO.java new file mode 100644 index 0000000..d8cf76b --- /dev/null +++ b/src/main/java/io/better/toutiao/dto/delivery/creative/AdvertisingCreativeInDTO.java @@ -0,0 +1,156 @@ +package io.better.toutiao.dto.delivery.creative; + +import io.better.toutiao.dto.resp.PageRespDTO; +import lombok.Data; + +import java.util.List; + +/** + * @author better create in 2019-04-29 11:16 + */ +@Data +public class AdvertisingCreativeInDTO { + + /** + * 分页信息 + */ + private PageRespDTO pageInfo; + + /** + * 创意信息集合 + */ + private List<CreativeInfo> list; + + /** + * 创意信息 + */ + @Data + private static class CreativeInfo { + /** + * 创意ID + */ + private String creativeId; + + /** + * 广告计划ID + */ + private String adId; + + /** + * 广告主ID + */ + private String advertiserId; + + /** + * 创意素材标题 + */ + private String title; + + /** + * 动态词包列表 + */ + private String[] creativeWordIds; + + /** + * 创意素材状态 + */ + private String status; + + /** + * 创意素材操作状态 + */ + private String optStatus; + + /** + * 创意素材类型 + */ + private String imageMode; + + /** + * 图片素材id列表 + */ + private String[] imageIds; + + /** + * 视频素材封面 + */ + private String imageId; + + /** + * 视频id + */ + private String videoId; + + /** + * 第三方id + */ + private String thirdPartyId; + + /** + * 创意审核信息 + */ + private String auditRejectReason; + + /** + * 素材信息列表 + */ + private List<?> materials; + } + + /** + * 创意素材信息 + */ + @Data + public static class CreativeMaterialInfo { + + /** + * 创意ID + */ + private String id; + + /** + * 广告ID + */ + private String adId; + + /** + * 广告主ID + */ + private String advertiserId; + + /** + * 创意标题 + */ + private String title; + + /** + * 创意状态 + */ + private String optStatus; + + /** + * 创意类型 + */ + private String imageMode; + + /** + * 图片素材信息 + */ + private String[] imageInfo; + + /** + * + */ + private String imageId; + + /** + * + */ + private String videoId; + + /** + * + */ + private String auditRejectReason; + } +} diff --git a/src/main/java/io/better/toutiao/dto/delivery/creative/AdvertisingCreativeOutDTO.java b/src/main/java/io/better/toutiao/dto/delivery/creative/AdvertisingCreativeOutDTO.java new file mode 100644 index 0000000..5f309bc --- /dev/null +++ b/src/main/java/io/better/toutiao/dto/delivery/creative/AdvertisingCreativeOutDTO.java @@ -0,0 +1,227 @@ +package io.better.toutiao.dto.delivery.creative; + +import lombok.Data; + +import java.util.List; + +/** + * @author better create in 2019-04-29 11:16 + */ +@Data +public class AdvertisingCreativeOutDTO { + + /** + * 广告主ID + */ + private String advertiserId; + + /** + * 广告计划ID + */ + private String adId; + + /** + * 展示监测链接 + */ + private String trackUrl; + + /** + * 点击监测链接 + */ + private String actionTrackUrl; + + /** + * 点击监测链接 + */ + private String videoPlayEffectiveTrackUrl; + + /** + * 视频播放完毕监测链接 + */ + private String videoPlayDoneTrackUrl; + + /** + * 视频播放监测链接 + */ + private String videoPlayTrackUrl; + + /** + * 是否关闭评论 + * <p> + * 允许值: 0, 1 + */ + private Integer isCommentDisable; + + + /** + * 是否关闭视频详情页落地页 + * 允许值: 0, 1 + */ + private Integer closeVideoDetail; + + /** + * 创意展现方式 + * <p> + * 允许值: "CREATIVE_DISPLAY_MODE_CTR", "CREATIVE_DISPLAY_MODE_RANDOM" + */ + private String creativeDisplayMode; + + + /** + * 是否使用优选广告位,0表示不使用优选,1表示使用, + * <p> + * 使用优选广告位的时候默认忽略inventory_type字段 + * <p> + * 默认值: 0 + * <p> + * 允许值: 0, 1 + */ + private Integer smartInventory; + + /** + * 场景广告位 + * <p> + * 使用场景广告位时默认忽略inventory_type字段,与scene_inventory不能同时传 + * <p> + * 允许值: "VIDEO_SCENE", "FEED_SCENE", "TAIL_SCENE" + */ + private String sceneInventory; + + /** + * 是否开启衍生计划,1为开启,0为不开启 + * <p> + * 默认值: 0 + */ + private String generateDerivedAd; + + /** + * 创意投放位置 + */ + private String[] inventoryType; + + /** + * 文章来源 + * <p> + * 当推广目的为非应用下载或推广目的为应用下载&download_type=EXTERNAL_URL时必填 + */ + private String source; + + /** + * 应用名 + * <p> + * 当推广应用下载[包含Android、iOS]时, 必填 + */ + private String appName; + + /** + * Android应用下载详情页 + * <p> + * 当推广应用下载Android时, 必填 + */ + private String webUrl; + + /** + * 创意标签 + * <p> + * 以英文逗号分隔,最多20个标签,且每个标签长度不超过10个字符 + */ + private String[] adKeywords; + + /** + * 创意分类-三级行业(新版),填写三级行业ID, + * <p> + * 可从tools/industry/get/ 接口获取 + */ + private Integer thirdIndustryId; + + /** + * 附加创意类型 + * 仅当推广目的landing_type=LINK时,填写 + * 允许值: "ATTACHED_CREATIVE_NONE", "ATTACHED_CREATIVE_PHONE","ATTACHED_CREATIVE_FORM" + */ + private String advancedCreativeType; + + /** + * 副标题 + */ + private String advancedCreativeTitle; + + /** + * 电话号码 + * 当附加创意类型为ATTACHED_CREATIVE_PHONE时, 必填 + */ + private String phoneNumber; + + /** + * 按钮文本 + * 当附加创意类型不为ATTACHED_CREATIVE_NONE时, 必填 + */ + private String buttonText; + + /** + * 表单提交链接 + * 当附加创意类型为ATTACHED_CREATIVE_FORM时, 必填 + * 且当附加创意类型为当附加创意类型为ATTACHED_CREATIVE_FORM时, 必须为今日头条建站地址 + */ + private String formUrl; + + /** + * 创意类型 + * 该字段为STATIC_ASSEMBLE表示程序化创意,其他情况无该字段 + */ + private String creativeMaterialMode; + + /** + * 标题信息,程序化创意必填 + */ + private List<TitleCreativeInfo> titleList; + + /** + * 素材信息,程序化创意必填 + */ + private List<ImageCreativeInfo> imageList; + + /** + * 素材信息,投放位置和创意类型决定素材规格 + */ + private List<?> creatives; + + @Data + public static class TitleCreativeInfo { + + /** + * 创意标题 + */ + private String title; + + /** + * 动态词包ID + * 可使用动态词包查询接口获得 + */ + private List<?> creativeWordIds; + } + + @Data + public static class ImageCreativeInfo { + + /** + * 素材类型 + */ + private String imageMode; + + /** + * 图片ID + */ + private String imageId; + + /** + * 视频ID + */ + private String videoId; + + /** + * 图片id列表,非视频素材时填写 + */ + private List<?> imageIds; + } +} diff --git a/src/main/java/io/better/toutiao/dto/delivery/creative/ImageCreativeOutDTO.java b/src/main/java/io/better/toutiao/dto/delivery/creative/ImageCreativeOutDTO.java new file mode 100644 index 0000000..2952f7a --- /dev/null +++ b/src/main/java/io/better/toutiao/dto/delivery/creative/ImageCreativeOutDTO.java @@ -0,0 +1,45 @@ +package io.better.toutiao.dto.delivery.creative; + +import lombok.Data; + +import java.util.List; + +/** + * @author better create in 2019-04-30 09:50 + */ +@Data +public class ImageCreativeOutDTO { + + /** + * 创意标题,如果要使用动态词包 + * 格式如下:“XXX{词包名}XXX{词包名}XXX” + * 请注意当您使用动态词包需在下方creative_word_ids字段中按顺序传入词包ID + * 并且在一个标题中最多使用两个动态词包。长度为6-30个字, 两个英文字符占1位 + */ + private String title; + + /** + * 动态词包ID,可使用动态词包查询接口获得 + * 结合标题中的词包格式您需要填写相同个数与顺序的词包ID + * 如果实际ID顺序与标题中词包名顺序不一致我们将以词包ID顺序为准 + */ + private List<?> creativeWordIds; + + /** + * 素材类型 + */ + private String imageMode; + + /** + * 图片id列表,非视频素材时填写(组图传3张图,其他传1张) + * 图片ID和视频ID可通过文件管理 中的接口获得。 + */ + private List<?> imageIds; + + /** + * 创意自定义参数, + * 例如开发者可设定此参数为创意打标签用于区分使用的素材类型,选填 + */ + private String thirdPartyId; + +} diff --git a/src/main/java/io/better/toutiao/dto/delivery/creative/VideoCreativeOutDTO.java b/src/main/java/io/better/toutiao/dto/delivery/creative/VideoCreativeOutDTO.java new file mode 100644 index 0000000..fe95166 --- /dev/null +++ b/src/main/java/io/better/toutiao/dto/delivery/creative/VideoCreativeOutDTO.java @@ -0,0 +1,46 @@ +package io.better.toutiao.dto.delivery.creative; + +import lombok.Data; + +import java.util.List; + +/** + * @author better create in 2019-04-30 09:50 + */ +@Data +public class VideoCreativeOutDTO { + /** + * 创意标题,如果要使用动态词包 + * 格式如下:“XXX{词包名}XXX{词包名}XXX” + * 请注意当您使用动态词包需在下方creative_word_ids字段中按顺序传入词包ID + * 并且在一个标题中最多使用两个动态词包。标题,长度为6-30个字, 两个英文字符占1位 + */ + private String title; + + + /** + * 动态词包ID,可使用动态词包查询接口获得,结合标题中的词包格式您需要填写相同个数与顺序的词包ID, + * 如果实际ID顺序与标题中词包名顺序不一致我们将以词包ID顺序为准。 + */ + private List<?> creativeWordIds; + + /** + * 素材类型 + */ + private String imageMode; + + /** + * 图片id,视频素材时填写。图片ID和视频ID可通过文件管理 中的接口获得。 + */ + private String imageId; + + /** + * 视频id,视频素材时填写。图片ID和视频ID可通过文件管理 中的接口获得。 + */ + private String videoId; + + /** + * 创意自定义参数,例如开发者可设定此参数为创意打标签用于区分使用的素材类型,选填 + */ + private String thirdPartyId; +} diff --git a/src/main/java/io/better/toutiao/dto/advertisingdelivery/group/AdvertisingGroupDTO.java b/src/main/java/io/better/toutiao/dto/delivery/group/AdvertisingGroupDTO.java similarity index 71% rename from src/main/java/io/better/toutiao/dto/advertisingdelivery/group/AdvertisingGroupDTO.java rename to src/main/java/io/better/toutiao/dto/delivery/group/AdvertisingGroupDTO.java index 640d367..ed753c9 100644 --- a/src/main/java/io/better/toutiao/dto/advertisingdelivery/group/AdvertisingGroupDTO.java +++ b/src/main/java/io/better/toutiao/dto/delivery/group/AdvertisingGroupDTO.java @@ -1,7 +1,10 @@ -package io.better.toutiao.dto.advertisingdelivery.group; +package io.better.toutiao.dto.delivery.group; + +import lombok.Data; /** * @author better create in 2019-04-29 11:15 */ +@Data public class AdvertisingGroupDTO { } diff --git a/src/main/java/io/better/toutiao/dto/advertisingdelivery/plan/AdvertisingPlanInDTO.java b/src/main/java/io/better/toutiao/dto/delivery/plan/AdvertisingPlanInDTO.java similarity index 99% rename from src/main/java/io/better/toutiao/dto/advertisingdelivery/plan/AdvertisingPlanInDTO.java rename to src/main/java/io/better/toutiao/dto/delivery/plan/AdvertisingPlanInDTO.java index 8a7ffaa..1ff65f0 100644 --- a/src/main/java/io/better/toutiao/dto/advertisingdelivery/plan/AdvertisingPlanInDTO.java +++ b/src/main/java/io/better/toutiao/dto/delivery/plan/AdvertisingPlanInDTO.java @@ -1,4 +1,4 @@ -package io.better.toutiao.dto.advertisingdelivery.plan; +package io.better.toutiao.dto.delivery.plan; import lombok.Data; diff --git a/src/main/java/io/better/toutiao/dto/advertisingdelivery/plan/AdvertisingPlanOutDTO.java b/src/main/java/io/better/toutiao/dto/delivery/plan/AdvertisingPlanOutDTO.java similarity index 99% rename from src/main/java/io/better/toutiao/dto/advertisingdelivery/plan/AdvertisingPlanOutDTO.java rename to src/main/java/io/better/toutiao/dto/delivery/plan/AdvertisingPlanOutDTO.java index 366d36f..020a6a8 100644 --- a/src/main/java/io/better/toutiao/dto/advertisingdelivery/plan/AdvertisingPlanOutDTO.java +++ b/src/main/java/io/better/toutiao/dto/delivery/plan/AdvertisingPlanOutDTO.java @@ -1,4 +1,4 @@ -package io.better.toutiao.dto.advertisingdelivery.plan; +package io.better.toutiao.dto.delivery.plan; import lombok.Data; diff --git a/src/main/java/io/better/toutiao/dto/status/UpdateStatusDTO.java b/src/main/java/io/better/toutiao/dto/status/UpdateStatusDTO.java index 4bfe99f..ba79a83 100644 --- a/src/main/java/io/better/toutiao/dto/status/UpdateStatusDTO.java +++ b/src/main/java/io/better/toutiao/dto/status/UpdateStatusDTO.java @@ -12,5 +12,7 @@ public class UpdateStatusDTO { private Integer[] campaignIds; + private Integer[] creativeIds; + private String optStatus; }