diff --git a/.gitignore b/.gitignore
index f67b60b..1aa3c57 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,3 +33,4 @@
.idea/misc.xml
.idea/modules.xml
.idea/vcs.xml
+.idea
diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml
deleted file mode 100644
index 4bca4a8..0000000
--- a/.idea/sonarIssues.xml
+++ /dev/null
@@ -1,359 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
deleted file mode 100644
index adf6af5..0000000
--- a/.idea/workspace.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
\ No newline at end of file
diff --git a/api/v2.2/campaign/list.go b/api/v2.2/campaign/list.go
new file mode 100644
index 0000000..7dd5863
--- /dev/null
+++ b/api/v2.2/campaign/list.go
@@ -0,0 +1,16 @@
+package campaign
+
+import (
+ "github.com/bububa/kwai-marketing-api/core"
+ "github.com/bububa/kwai-marketing-api/model/v2.2/campaign"
+)
+
+// List 查询广告计划
+func List(clt *core.SDKClient, accessToken string, req *campaign.ListRequest) (*campaign.ListResponse, error) {
+ var resp campaign.ListResponse
+ err := clt.Post(accessToken, req, &resp)
+ if err != nil {
+ return nil, err
+ }
+ return &resp, nil
+}
diff --git a/api/v2.2/creative/list.go b/api/v2.2/creative/list.go
new file mode 100644
index 0000000..0458d59
--- /dev/null
+++ b/api/v2.2/creative/list.go
@@ -0,0 +1,16 @@
+package creative
+
+import (
+ "github.com/bububa/kwai-marketing-api/core"
+ "github.com/bububa/kwai-marketing-api/model/v2.2/creative"
+)
+
+// List 查询广告创意
+func List(clt *core.SDKClient, accessToken string, req *creative.ListRequest) (*creative.ListResponse, error) {
+ var resp creative.ListResponse
+ err := clt.Post(accessToken, req, &resp)
+ if err != nil {
+ return nil, err
+ }
+ return &resp, nil
+}
diff --git a/api/v2.2/creative/list_advanced_creative.go b/api/v2.2/creative/list_advanced_creative.go
new file mode 100644
index 0000000..c32cb18
--- /dev/null
+++ b/api/v2.2/creative/list_advanced_creative.go
@@ -0,0 +1,16 @@
+package creative
+
+import (
+ "github.com/bububa/kwai-marketing-api/core"
+ "github.com/bububa/kwai-marketing-api/model/v2.2/creative"
+)
+
+// AdvancedCreativeList 查询程序化广告创意
+func AdvancedCreativeList(clt *core.SDKClient, accessToken string, req *creative.AdvancedCreativeListRequest) (*creative.ListAdvancedCreativeResponse, error) {
+ var resp creative.ListAdvancedCreativeResponse
+ err := clt.Post(accessToken, req, &resp)
+ if err != nil {
+ return nil, err
+ }
+ return &resp, nil
+}
diff --git a/api/v2.2/unit/list.go b/api/v2.2/unit/list.go
new file mode 100644
index 0000000..3397e96
--- /dev/null
+++ b/api/v2.2/unit/list.go
@@ -0,0 +1,16 @@
+package unit
+
+import (
+ "github.com/bububa/kwai-marketing-api/core"
+ "github.com/bububa/kwai-marketing-api/model/v2.2/unit"
+)
+
+// List 查询广告组
+func List(clt *core.SDKClient, accessToken string, req *unit.ListRequest) (*unit.ListResponse, error) {
+ var resp unit.ListResponse
+ err := clt.Post(accessToken, req, &resp)
+ if err != nil {
+ return nil, err
+ }
+ return &resp, nil
+}
diff --git a/model/v2.2/campaign/campaign.go b/model/v2.2/campaign/campaign.go
new file mode 100644
index 0000000..6577fce
--- /dev/null
+++ b/model/v2.2/campaign/campaign.go
@@ -0,0 +1,33 @@
+package campaign
+
+// Campaign 包含广告计划信息
+type Campaign struct {
+ CampaignID uint64 `json:"campaign_id"` // 计划id
+ CampaignName string `json:"campaign_name,omitempty"` // 计划名称
+ PutStatus int `json:"put_status,omitempty"` // 投放状态(操作结果) 1:投放中;2:暂停;3:删除
+ Status int `json:"status,omitempty"` // 计划状态 1:广告计划已暂停;3:广告计划超预算;4:有效;5:广告计划已删除;6:账户余额不足;-2:不限
+ DayBudget int64 `json:"day_budget,omitempty"` // 当日预算
+ DayBudgetSchedule []int64 `json:"day_budget_schedule,omitempty"` // 分日预算 优先级高于day_budget
+ CampaignType int `json:"campaign_type,omitempty"` // 计划类型
+ CampaignSubType int `json:"campaign_sub_type,omitempty"` // 计划子类型 商品库推广计划类型的老数据会返回【后续会进行下线】。4:DPA,5:SDPA
+ AdType int `json:"ad_type,omitempty"` // 广告计划类型 0:信息流,1:搜索
+ BidType int `json:"bid_type,omitempty"` // 出价类型
+ AutoAdjust int `json:"auto_adjust,omitempty"` // 自动调控开关 0:关闭,1:开启
+ AutoBuild int `json:"auto_build,omitempty"` // 自动基建开关 0:关闭,1:开启
+ AutoBuildNameRule AutoBuildNameRule `json:"auto_build_name_rule,omitempty"` // 自动基建广告命名规则
+ AutoManage int `json:"auto_manage,omitempty"` // 智能投放开关 0:关闭,1:开启
+ CampaignOCPXActionType int `json:"campaign_ocpx_action_type,omitempty"` // 智能模式下的优化目标
+ CampaignOCPXActionName string `json:"campaign_ocpx_action_type_name,omitempty"` // 智能模式下的优化目标名称
+ CampaignDeepConversionType int `json:"campaign_deep_conversion_type,omitempty"` // 智能模式下的深度优化目标
+ CampaignDeepConversionTypeName string `json:"campaign_deep_conversion_type_name,omitempty"` // 智能模式下的深度优化目标名称
+ CreateTime string `json:"create_time,omitempty"` // 创建时间
+ UpdateTime string `json:"update_time,omitempty"` // 更新时间
+}
+
+// AutoBuildNameRule 自动基建命名规则
+type AutoBuildNameRule struct {
+ // UnitNameRule 广告组名称命名规则; 必须同时包含[日期]和[序号]宏变量,eg: 系统自动搭建_[日期][序号]
+ UnitNameRule string `json:"unit_name_rule,omitempty"`
+ // CreativeNameRule 广告创意名称命名规则; 必须同时包含[日期]和[序号]宏变量,eg: 系统自动搭建_[日期][序号]
+ CreativeNameRule string `json:"creative_name_rule,omitempty"`
+}
diff --git a/model/v2.2/campaign/create_request.go b/model/v2.2/campaign/create_request.go
index 4bc2524..4fbf64d 100644
--- a/model/v2.2/campaign/create_request.go
+++ b/model/v2.2/campaign/create_request.go
@@ -26,13 +26,6 @@ type CreateRequest struct {
AutoBuildNameRule *AutoBuildNameRule `json:"auto_build_name_rule,omitempty"`
}
-// AutoBuildNameRule 自动基建命名规则
-type AutoBuildNameRule struct {
- // UnitNameRule 广告组名称命名规则; 必须同时包含[日期]和[序号]宏变量,eg: 系统自动搭建_[日期][序号]
- UnitNameRule string `json:"unit_name_rule,omitempty"`
- // CreativeNameRule 广告创意名称命名规则; 必须同时包含[日期]和[序号]宏变量,eg: 系统自动搭建_[日期][序号]
- CreativeNameRule string `json:"creative_name_rule,omitempty"`
-}
// Url implement PostRequest interface
func (r CreateRequest) Url() string {
return "gw/dsp/campaign/create"
diff --git a/model/v2.2/campaign/list_request.go b/model/v2.2/campaign/list_request.go
new file mode 100644
index 0000000..f81170a
--- /dev/null
+++ b/model/v2.2/campaign/list_request.go
@@ -0,0 +1,28 @@
+package campaign
+
+import "encoding/json"
+
+type ListRequest struct {
+ AdvertiserID uint64 `json:"advertiser_id"` // 广告主 ID,在获取 access_token 的时候返回,必填
+ CampaignID uint64 `json:"campaign_id,omitempty"` // 广告计划 ID,过滤筛选条件,若不传或传空则视为无限制条件
+ CampaignName string `json:"campaign_name,omitempty"` // 计划名称,过滤筛选条件,若不传或传空则视为无限制条件
+ CampaignIDs []uint64 `json:"campaign_ids,omitempty"` // 广告计划 ID 集,不超过 200 个
+ PutStatusList int `json:"put_status_list,omitempty"` // 计划投放状态筛选,1:投放;2:暂停;3:删除。传了该参数会覆盖 status 参数筛选,因为二者是相同筛选项
+ Status int `json:"status,omitempty"` // 计划状态,过滤筛选条件;1:广告计划已暂停;4:有效;5:广告计划已删除; -2 不限
+ StartDate string `json:"start_date,omitempty"` // 开始时间,格式为"yyyy-MM-dd",与 end_date 同时传或同时不传;过滤筛选条件,参数值对应 update_time 信息
+ EndDate string `json:"end_date,omitempty"` // 结束时间,格式为"yyyy-MM-dd",与 start_date 同时传或同时不传;过滤筛选条件,参数值对应 update_time 信息
+ TimeFilterType int `json:"time_filter_type,omitempty"` // 按创建时间,还是更新时间进行筛选。1.如传入此字段时不传"start_date",与"end_date"字段,则不根据时间筛选。2.传入"start_date",与"end_date"字段,且此字段为 1 时,按照创建时间进行筛选。3.传入"start_date",与"end_date"字段,此字段不传,或传值为 0 时,则按照更新时间进行筛选
+ Page int `json:"page,omitempty"` // 请求的页码数,默认为 1
+ PageSize int `json:"page_size,omitempty"` // 请求的每页行数,默认为 20
+}
+
+// Url implement PostRequest interface
+func (r ListRequest) Url() string {
+ return "gw/dsp/campaign/list"
+}
+
+// Encode implement PostRequest interface
+func (r ListRequest) Encode() []byte {
+ ret, _ := json.Marshal(r)
+ return ret
+}
diff --git a/model/v2.2/campaign/list_response.go b/model/v2.2/campaign/list_response.go
new file mode 100644
index 0000000..1261393
--- /dev/null
+++ b/model/v2.2/campaign/list_response.go
@@ -0,0 +1,9 @@
+package campaign
+
+// ListResponse 获取广告计划信息 API Response
+type ListResponse struct {
+ // TotalCount 数据总数
+ TotalCount int `json:"total_count,omitempty"`
+ // Details 返回值详情
+ Details []Campaign `json:"details,omitempty"`
+}
diff --git a/model/v2.2/creative/advanced_creative.go b/model/v2.2/creative/advanced_creative.go
new file mode 100644
index 0000000..23c94bb
--- /dev/null
+++ b/model/v2.2/creative/advanced_creative.go
@@ -0,0 +1,40 @@
+package creative
+
+type AdvancedCreative struct {
+ UnitID int64 `json:"unit_id"` // 广告组ID
+ PackageName string `json:"package_name"` // 程序化创意包名称,1-100字符
+ HorizontalPhotoIDs []string `json:"horizontal_photo_ids"` // 横版视频ID列表,横版视频和竖版视频加起来只能1-5个
+ VerticalPhotoIDs []string `json:"vertical_photo_ids"` // 竖版视频ID列表
+ CoverImageTokens []string `json:"cover_image_tokens"` // 封面image_token,只能是1-4个
+ CoverImageURLs []string `json:"cover_image_urls"` // 封面链接地址
+ StickerStyles []int `json:"sticker_styles"` // 封面贴纸
+ CoverSlogans []string `json:"cover_slogans"` // 封面广告语
+ ActionBar string `json:"action_bar"` // 行动号召按钮
+ Captions []string `json:"captions"` // 作品广告语,只能是1-3个
+ ClickURL string `json:"click_url"` // 第三方点击检测链接
+ ActionBarClickURL string `json:"actionbar_click_url"` // 第三方ActionBar点击监控链接
+ PutStatus int `json:"put_status"` // 程序化创意操作状态,1:投放,2:暂停,3:删除
+ ViewStatus int `json:"view_status"` //程序化创意状态
+ ViewStatusReason string `json:"view_status_reason"` // 程序化创意状态描述
+ CreateTime string `json:"create_time"` // 创建时间,格式样例:"2019-06-11 15:17:25"
+ UpdateTime string `json:"update_time"` // 更新时间,格式样例:"2019-06-11 15:17:25"
+ Creatives []int64 `json:"creatives"` // 创建后生成的程序化创意 ID
+ PicIDs []string `json:"pic_ids"` // 图片库图片ID
+ AppGradeType int `json:"app_grade_type"` // 审核分级类型,0:默认;1:审核降级(当创意发生降级时,会限制部分流量无法投放)
+ PicList []string `json:"pic_list"` // 联盟图片(横版/竖版),联盟图片imageToken
+ PicURLList []string `json:"pic_url_list"` // 联盟图片url(横版/竖版),联盟图片url
+ PhotoList []Photo `json:"photo_list"` // 素材列表
+ AdPhotoPlayedT3SURL string `json:"ad_photo_played_t3s_url"` // 第三方有效播放监测链接
+ CreativeCategory int `json:"creative_category"` // 创意分类
+ CreativeTag []string `json:"creative_tag"` // 创意标签
+ NewExposeTag []ExposeTag `json:"new_expose_tag"` // 广告标签 2 期
+}
+type Photo struct {
+ PhotoID int64 `json:"photo_id"` // 视频 ID
+ CoverImageToken string `json:"cover_image_token"` // 封面图片 token
+ CreativeMaterialType int `json:"creative_material_type"` // 素材类型,1:竖版视频;2:横版视频
+}
+
+type ExposeTag struct {
+ Text string `json:"text"`
+}
diff --git a/model/v2.2/creative/creative.go b/model/v2.2/creative/creative.go
new file mode 100644
index 0000000..53095b6
--- /dev/null
+++ b/model/v2.2/creative/creative.go
@@ -0,0 +1,69 @@
+package creative
+
+type Creative struct {
+ CampaignID uint64 `json:"campaign_id"` // 广告计划 ID
+ UnitID uint64 `json:"unit_id"` // 广告组 ID
+ CreativeID uint64 `json:"creative_id"` // 广告创意 ID
+ CreativeName string `json:"creative_name"` // 广告创意名称
+ CreativeMaterialType int `json:"creative_material_type"` // 素材类型 0:历史创意未作区分 1:竖版视频 2:横版视频 3:后贴片单图图片创意(历史类型,已下线)4:便利贴单图图片创意 11:开屏视频 12:开屏图片
+ CreativeCategory int `json:"creative_category"` // 创意分类
+ CreativeTag []string `json:"creative_tag"` // 创意标签
+ PhotoID string `json:"photo_id"` // 视频作品 ID
+ PhotoMD5 string `json:"photo_md5"` // 视频作品的md5
+ MaterialURL []string `json:"material_url"` // 单图创意 url
+ ImageTokens []string `json:"image_tokens"` // 单图创意 image_token
+ Status int `json:"status"` // 广告创意状态(优先先看这个状态,计算结果) -1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:组审核中,12:组审核未通过,14:已结束,15:组已暂停,17:组超预算,19:未达投放时间,40:已删除,41:审核中,42:审核未通过,46:已暂停,52:投放中,53:作品异常,54:视频审核通过可投放滑滑场景,55:部分素材审核失败
+ PutStatus int `json:"put_status"` // 投放状态(操作结果) 1:投放中;2:暂停 3:删除
+ ReviewDetail string `json:"review_detail"` // 审核拒绝理由
+ RejectVideoSnapshot []string `json:"reject_video_snapshot"` // 审核拒绝图片 list 里面可以包含多个数据
+ CoverURL string `json:"cover_url"` // 封面 URL
+ ImageToken string `json:"image_token"` // 视频封面 token 若创意使用系统自动生成的首帧图片作为封面,该 token 无法复用
+ CoverWidth int64 `json:"cover_width"` // 封面图宽度
+ CoverHeight int64 `json:"cover_height"` // 封面图高度
+ OverlayBgURL string `json:"overlay_bg_url"` // 动态词包原始封面图片 URL
+ OverlayBgImageToken string `json:"overlay_bg_image_token"` // 动态词包原始封面图片 token
+ StickerTitle string `json:"sticker_title"` // 封面广告语标题
+ OverlayType string `json:"overlay_type"` // 贴纸样式类型
+ DisplayInfo DisplayInfo `json:"display_info"` //广告展示信息
+ ShortSlogan string `json:"short_slogan"` // 便利贴创意短广告语
+ ExposeTag string `json:"expose_tag"` // 广告标签
+ NewExposeTag []NewExposeTag `json:"new_expose_tag"` //广告标签 2 期
+ ClickTrackUrl string `json:"click_track_url"` // 点击监测链接 若出现与后台显示不一致,以文档为准即可
+ ImpressionUrl string `json:"impression_url"` // 第三方开始播放监测链接 若出现与后台显示不一致,以文档为准即可
+ ActionbarClickUrl string `json:"actionbar_click_url"` // 第三方点击按钮监测链接
+ AdPhotoPlayedT3sUrl string `json:"ad_photo_played_t3s_url"` // 第三方有效播放监测链接 仅历史个别账户使用
+ CreateTime string `json:"create_time"` // 创建时间 格式样例:"2019-06-11 15:17:25"
+ UpdateTime string `json:"update_time"` // 最后修改时间 格式样例:"2019-06-11 15:17:25"
+ PicId string `json:"pic_id"` // 图片库图片
+ AppGradeType int `json:"app_grade_type"` // 审核分级类型 0:默认;1:审核降级(当创意发生降级时,会限制部分流量无法投放)
+ SplashPhotos []SplashPhoto `json:"splash_photos"` // 开屏视频信息 creative_material_type 为 11 时
+ LiveCreativeType int `json:"live_creative_type"` // 粉丝直播推广创意类型 3:直投直播;4:作品引流
+ SplashPictures []SplashPicture `json:"splash_pictures"` // 开屏图片 creative_material_type 为 12 时
+ LiveTrackUrl string `json:"live_track_url"` // 点击监测链接 计划 campaignType=16 粉丝直播推广时填写
+ AdType int `json:"ad_type"` // 广告计划类型 0:信息流,1:搜索
+ OuterLoopNative int `json:"outer_loop_native"` // 是否开启原生 0关闭,1开启,不填默认为0
+ KolUserType int `json:"kol_user_type"` // 原生达人用户类型 2服务号原生,3聚星达人原生, 不开启原生时此项为0
+ KolUserId int64 `json:"kol_user_id"` // 原生投放目标达人ID
+ Recommendation string `json:"recommendation"` // plc自定义文案
+ DpaStyleTypes []int `json:"dpa_style_types"` // 动态商品卡样式 14001-区域服务卡
+ HighLightFlash int `json:"high_light_flash"` // 高光创意状态 0:关闭 1:开启
+}
+
+type DisplayInfo struct {
+ Description string `json:"description"` // 广告语
+ ActionBarText string `json:"action_bar_text"` // 行动号召按钮文案
+}
+
+type SplashPhoto struct {
+ PhotoID string `json:"photo_id"` // 视频ID
+ PhotoMD5 string `json:"photo_md5"` // 视频的md5
+ CoverURL int64 `json:"cover_url"` // 视频高度
+ Height int64 `json:"height"` // 视频宽度
+}
+
+type SplashPicture struct {
+ CoverID int64 `json:"cover_id"` // 封面ID
+ CoverURL string `json:"cover_url"` // 封面URL
+ Height int64 `json:"height"` // 图片高度
+ Width int64 `json:"width"` // 图片宽度
+}
diff --git a/model/v2.2/creative/list_advanced_creative_request.go b/model/v2.2/creative/list_advanced_creative_request.go
new file mode 100644
index 0000000..62370a6
--- /dev/null
+++ b/model/v2.2/creative/list_advanced_creative_request.go
@@ -0,0 +1,30 @@
+package creative
+
+import "encoding/json"
+
+type AdvancedCreativeListRequest struct {
+ AdvertiserID int64 `json:"advertiser_id"` // 必填,广告主 ID,在获取 access_token 的时候返回
+ UnitIDs []int64 `json:"unit_ids,omitempty"` // 选填,广告组 ID 集,不超过一百个
+ PackageName string `json:"package_name,omitempty"` // 选填,程序化创意包名称,非空,0 到 100 字符
+ Status int `json:"status,omitempty"` // 选填,程序化创意状态,-2:所有(包含已删除)、40:只包含已删除,不传:所有(不包含已删除)
+ StartDate string `json:"start_date,omitempty"` // 选填,起始日期,格式如 yyyy-MM-dd
+ EndDate string `json:"end_date,omitempty"` // 选填,结束时期,格式如 yyyy-MM-dd
+ // 1. 如传入此字段时不传"start_date",与"end_date"字段,则不根据时间筛选。
+ // 2. 传入"start_date",与"end_date"字段,且此字段为 1 时,按照创建时间进行筛选。
+ // 3. 传入"start_date",与"end_date"字段,此字段不传,或传值为 0 时,则按照更新时间进行筛选
+ TimeFilterType int `json:"time_filter_type,omitempty"` // 选填,按创建时间或者更新时间进行筛选,
+ Page int `json:"page,omitempty"` // 选填,页数,默认为 1
+ PageSize int `json:"page_size,omitempty"` // 选填,每页行数,默认为 20
+ PutStatusList []int `json:"put_status_list,omitempty"` // 选填,创意投放状态,1:投放;2:暂停;3:删除。备注:传了该参数会覆盖status参数筛选,因为二者是相同筛选项
+}
+
+// Url implement PostRequest interface
+func (r AdvancedCreativeListRequest) Url() string {
+ return "gw/dsp/advanced_creative/list"
+}
+
+// Encode implement PostRequest interface
+func (r AdvancedCreativeListRequest) Encode() []byte {
+ ret, _ := json.Marshal(r)
+ return ret
+}
diff --git a/model/v2.2/creative/list_advanced_creative_response.go b/model/v2.2/creative/list_advanced_creative_response.go
new file mode 100644
index 0000000..08d76ef
--- /dev/null
+++ b/model/v2.2/creative/list_advanced_creative_response.go
@@ -0,0 +1,8 @@
+package creative
+
+type ListAdvancedCreativeResponse struct {
+ // TotalCount 数据总数
+ TotalCount int `json:"total_count,omitempty"`
+ // Details 返回值详情
+ Details []AdvancedCreative `json:"details,omitempty"`
+}
diff --git a/model/v2.2/creative/list_request.go b/model/v2.2/creative/list_request.go
new file mode 100644
index 0000000..72ff99d
--- /dev/null
+++ b/model/v2.2/creative/list_request.go
@@ -0,0 +1,30 @@
+package creative
+
+import "encoding/json"
+
+type ListRequest struct {
+ AdvertiserID uint64 `json:"advertiser_id"` // 广告主 ID,在获取 access_token 的时候返回
+ CampaignID uint64 `json:"campaign_id,omitempty"` // 广告计划 ID,过滤筛选条件,若不传或传空则视为无限制条件
+ UnitID uint64 `json:"unit_id,omitempty"` // 广告组 ID,过滤筛选条件,若不传或传空则视为无限制条件
+ CreativeID uint64 `json:"creative_id,omitempty"` // 广告创意 ID,过滤筛选条件,若不传或传空则视为无限制条件
+ CreativeName string `json:"creative_name,omitempty"` // 广告创意名称,过滤筛选条件,支持模糊搜索和精确查询
+ CreativeIDs []uint64 `json:"creative_ids,omitempty"` // 广告创意 ID 集,不超过 100 个
+ Status int `json:"status,omitempty"` // 广告创意状态,过滤筛选条件,-2:不限,40:只包含已删除,不传:所有不包含已删除,其他值无效
+ StartDate string `json:"start_date,omitempty"` // 开始时间,过滤筛选条件,格式为"yyyy-MM-dd",参数值对应 update_time 信息
+ EndDate string `json:"end_date,omitempty"` // 结束时间,过滤筛选条件,格式为"yyyy-MM-dd",参数值对应 update_time 信息
+ TimeFilterType int `json:"time_filter_type,omitempty"` // 按创建时间或者更新时间进行筛选,1.如传入此字段时不传"start_date",与"end_date"字段,则不根据时间筛选。2.传入"start_date",与"end_date"字段,且此字段为 1 时,按照创建时间进行筛选。3.传入"start_date",与"end_date"字段,此字段不传,或传值为 0 时,则按照更新时间进行筛选
+ Page int `json:"page,omitempty"` // 请求的页码数,默认为 1
+ PageSize int `json:"page_size,omitempty"` // 请求的每页行数,默认为 20
+ PutStatusList []int `json:"put_status_list,omitempty"` // 创意投放状态,1:投放;2:暂停;3:删除。备注:传了该参数会覆盖 status 参数筛选,因为二者是相同筛选项
+}
+
+// Url implement PostRequest interface
+func (r ListRequest) Url() string {
+ return "gw/dsp/creative/list"
+}
+
+// Encode implement PostRequest interface
+func (r ListRequest) Encode() []byte {
+ ret, _ := json.Marshal(r)
+ return ret
+}
diff --git a/model/v2.2/creative/list_response.go b/model/v2.2/creative/list_response.go
new file mode 100644
index 0000000..5b243f3
--- /dev/null
+++ b/model/v2.2/creative/list_response.go
@@ -0,0 +1,8 @@
+package creative
+
+type ListResponse struct {
+ // TotalCount 数据总数
+ TotalCount int `json:"total_count,omitempty"`
+ // Details 返回值详情
+ Details []Creative `json:"details,omitempty"`
+}
diff --git a/model/v2.2/unit/create_request.go b/model/v2.2/unit/create_request.go
index 4a94b83..c560273 100644
--- a/model/v2.2/unit/create_request.go
+++ b/model/v2.2/unit/create_request.go
@@ -115,98 +115,7 @@ type CreateRequest struct {
//package_id long 必填 新版应用中心,应用包ID 使用新版应用中心投放,该字段必填;老版本应用非必填
PackageId uint64 `json:"package_id,omitempty"`
}
-type Target struct {
- //region long[] 选填 地域 传值为[]表示不限;传递上一级 ID 时,childrenID 可以不传;不允许同时传 parentID 和 childrenID;地域信息可通过地域接口获取;仅计划的 campaign_type 为 5 时,支持设置三级地域(例:山西-大同-左云,左云是三级地域)
- Region []uint64 `json:"region,omitempty"`
- //district_ids long[] 选填 商圈定向 与 region 字段不能同时传、白名单控制,最多选 100 个。可以通过/rest/openapi/v1/region/district/list 接口获取商圈信息。该定向仅支持快手站内广告位,不支持联盟广告位。
- DistrictIds []uint64 `json:"district_ids,omitempty"`
- //user_type int 选填 用户类型 0:实时;1:常驻;2:不限
- UserType int `json:"user_type,omitempty"`
- //age struct 选填 自定义年龄段 不传值表示不限,传值具体见下方表格;与 ages_range 不能同时传
- Age *Age `json:"age,omitempty"`
- //ages_range int[] 选填 固定年龄段 与 age 不能同时传;【18:表示 18-23 岁】;【24:表示 24-30 岁】;【31:表示 31-40 岁】;【41:表示 41-49 岁】;【50:表示 50-100 岁】
- AgesRange []int `json:"ages_range,omitempty"`
- //gender int 选填 性别 1:女性, 2:男性,0 表示不限
- Gender int `json:"gender"`
- //platform_os int 选填 操作系统 1:Android,2:iOS,0 表示不限;当计划类型为 2(提升应用安装)时该字段可忽略
- PlatformOs int `json:"platform_os,omitempty"`
- //android_osv int 选填 Android 版本 3:不限,4:4.x+,5:5.x+,6:6.x+,7:7.x+,8:8.x+,9:9.x+,10:10.x+;当计划类型为 2(提升应用安装)时,仅当 app_id 表示的是 Android 应用可使用此字段传递版本
- AndroidOsv int `json:"android_osv,omitempty"`
- //ios_osv int 选填 iOS 版本 6:不限,7:7.x+,8:8.x+,9:9.x+,10:10.x+;11:11.x+;12:12.x+;13:13.x+;当计划类型为 2(提升应用安装)时,仅当 appId 表示的是 iOS 应用可使用此字段传递版本
- IosOsv int `json:"ios_osv,omitempty"`
- //network int 选填 网络环境 1:Wi-Fi,2:移动网络,0:表示不限
- Network int `json:"network,omitempty"`
- //device_brand_ids long[] 选填 设备品牌ID列表 传值为[]表示不限;当 platform为iOS定向时,没有设备品牌定向;1:苹果(platform字段为空时选填);2:VIVO;3:OPPO;4:华为;5:小米;6:荣耀;7:三星;8:魅族;9:金立;10:HTC;11:联想;12:酷派;13:酷比;14:中兴;15:乐视;16:LG;17:中国移动;18:360;19:百度;20:努比亚;21:一加;22:海信;23:朵唯;24:美图;25:锤子;26:谷歌;27:小辣椒;28:诺基亚;29:康佳
- DeviceBrandIds []uint64 `json:"device_brand_ids,omitempty"`
- //device_price int[] 选填 设备价格 1:1,500 元以下(近期下线), 新增:11:1000以下,12:1001~1500,请直接使用新枚举值; 2:1,501~2,000; 3:2,001~2,500;4:2,501~3,000;5、3,001~3,500; 6:3,501~4,000;7:4,001~4,500; 8:4,501~5,000;9:5,001~5,500; 10:5,500 元以上;传值为 [] 表示不限;
- DevicePrice []int `json:"device_price,omitempty"`
- //app_interest_ids long[] 选填 APP 行为-按分类 id 不能重复且必须准确,具体 id 可通过下方标签接口获取;仅包含安卓数据,若操作系统定向 IOS 则无效;不能同时选择 app_ids(新标签体系字段,替换 app_interest,与 app_interest 同时传递,app_interest 字段失效)。该定向仅支持快手站内广告位,不支持联盟广告位。
- AppInterestIds []uint64 `json:"app_interest_ids,omitempty"`
- //app_ids long[] 选填 APP 行为-按 APP 名称 id 不能重复且必须准确,具体 id 可通过下方应用接口获取,建议不超过 10 个,否则可能出现报错;仅包含安卓数据,若操作系统定向 IOS 则无效;不能同时选择 app_interest。该定向仅支持快手站内广告位,不支持联盟广告位。
- AppIds []uint64 `json:"app_ids,omitempty"`
- //filter_converted_level int 选填 过滤已转化人群纬度 搜索广告、联盟广告、小店通不支持。优化目标不支持【封面曝光数】和【封面点击数】非应用下载类推广不支持过滤【APP】纬度。0(默认):不限;1:广告组 2:广告计划;3:本账户;4:公司主体;5:APP;6:运营自定义产品名
- FilterConvertedLevel int `json:"filter_converted_level,omitempty"`
- //population long[] 选填 人群包定向 /rest/openapi/v1/dmp/population/list 获取人群包 id。population 不能重复,与 exclude_population 不能有交集,不能传付费人群包,付费人群包标识字段:population_type=7
- Population []uint64 `json:"population,omitempty"`
- //exclude_population long[] 选填 人群包排除 /rest/openapi/v1/dmp/population/list 获取人群包 id。exclude_population 不能重复,不能传付费人群包,付费人群包标识字段:population_type=7
- ExcludePopulation []uint64 `json:"exclude_population,omitempty"`
- //paid_audience long[] 选填 付费人群包 id /rest/openapi/v1/dmp/population/list 获取人群包 id。1、不能重复,只能传付费人群包,且 third_platform_code 要一样,2、如果传了【population 或 exclude_population】,报错;修改时要也要保证【population 或 exclude_population】不能同时传。3、创建时若已经有了【population 或 exclude_population】修改时只传 paid_audience 也会报错,这时需要把 population 或 exclude_population】设为[]才行,反之也一样。总之,【population 或 exclude_population】与【paid_audience】不能同时存在。该定向仅支持快手站内广告位,不支持联盟广告位。
- PaidAudience []uint64 `json:"paid_audience,omitempty"`
- //seed_population long[] 选填 种子人群包 当账户开通种子人群包功能后方可使用此功能。该定向仅支持快手站内广告位,不支持联盟广告位。
- SeedPopulation []uint64 `json:"seed_population,omitempty"`
- //intelli_extend_option int 选填 智能定向开关 0:智能定向关闭;1:智能定向开启【计划层级开启智能调控时,只能传1】;当计划层级开启了自动调控功能,不传默认智能定向开启状态,其他清空默认智能定向关闭。
- IntelliExtendOption int `json:"intelli_extend_option,omitempty"`
- //behavior_type int 选填 行为兴趣类型 0:默认;1:自定义行为意向;2:行为意向系统优选。联盟广告位不支持后者。
- BehaviorType int `json:"behavior_type,omitempty"`
- //behavior_interest struct 选填 行为兴趣定向 behavior.keyword 、behavior.label、interest.lable 其中一个必传,具体传值下方表格;仅在 behavior_type = 1 时生效。联盟广告位不支持interest。
- BehaviorInterest *BehaviorInterest `json:"behavior_interest,omitempty"`
- //disable_installed_app_switch int 选填 过滤已安装人群维度 0:过滤(默认),1:不限
- DisableInstalledAppSwitch int `json:"disable_installed_app_switch,omitempty"`
- //filter_time_range int 选填 用户的转化时间范围 0:30天;1:60天;2:90天。该定向仅支持快手站内广告位,不支持联盟广告位。
- FilterTimeRange int `json:"filter_time_range,omitempty"`
- //celebrity struct 选填 快手网红 behaviors、fans_star两个字段必填充。该定向仅支持快手站内广告位,不支持联盟广告位。
- Celebrity *Celebrity `json:"celebrity,omitempty"`
- //media long[] 选填 媒体定向包 若选择使用定向行业优质流量包(media_source_type = 1),此处单选:1 - 超休闲游戏;2 - 重度游戏;4 - 直营电商;5 - 平台电商;若选择使用广告主自定义媒体包(media_source_type = 2),此处多选,填写媒体包 id【仅联盟广告位生效】
- Media []uint64 `json:"media,omitempty"`
- //exclude_media long[] 选填 媒体定向排除包 media 和 exclude_media 只可选其一,若选择使用排除行业优质流量包(media_source_type = 1),此处单选:1 - 超休闲游戏;2 - 重度游戏;4 - 直营电商;5 - 平台电商;若选择使用广告主自定义媒体包(media_source_type = 2),此处多选,填写媒体包 id;【仅联盟广告位生效】
- ExcludeMedia []uint64 `json:"exclude_media,omitempty"`
- //media_source_type int 选填 媒体包来源 默认为 0,0-不限,未指定,1-行业优质流量包,2-广告主自定义
- MediaSourceType int `json:"media_source_type,omitempty"`
-}
-
-type Age struct {
- // min int 必填 年龄最小限制 年龄区间最小为 18 岁
- Min int `json:"min"`
- // max int 必填 年龄最大限制 年龄区间最大为 55 岁,且年龄最大限制须大于等于年龄最小限制
- Max int `json:"max"`
-}
-
-type BehaviorInterest struct {
- //behavior struct 必填 行为定向 behavior 与 interest 同时不传,则清空行为兴趣定向
- Behavior *Behavior `json:"behavior,omitempty"`
- // interest struct 选填 兴趣定向 behavior 与 interest 同时不传,则清空行为兴趣定向
- Interest *Interest `json:"interest,omitempty"`
-}
-
-type Behavior struct {
- //keyword struct[] 选填 行为定向关键词 根据/rest/openapi/v1/tool/keyword/query 接口获取
- Keyword []*Keyword `json:"keyword,omitempty"`
- //label string[] 选填 行为定向 类目词 根据/rest/openapi/v1/tool/label/behavior_interest 接口获取。将行为类目 id 从最高层类目 id 开始,以“-”连接起来,假如有一个类目 id 为 80202,父类目 id 为 802,最高层类目 id 为 8,则此时应该写"8-802-80202";如果想全选最高层类目"8"底下的所有子类目,填"8"
- Label []string `json:"label,omitempty"`
- //time_type int 必填 在多少天内发生行为的用户 0:7 天;1:15 天;2:30 天;3:90 天;4:180 天
- TimeType int `json:"time_type"`
- //strength_type int 必填 行为强度 0:不限;1:高强度
- StrengthType int `json:"strength_type"`
- //scene_type int[] 必填 行为场景 1:社区;2:APP;3:电商;4:推广
- SceneType []int `json:"scene_type"`
-}
-type Interest struct {
- //label string[] 选填 兴趣定向类目词 根据/rest/openapi/v1/tool/label/behavior_interest 接口获取。将兴趣类目 id 从最高层类目 id 开始,以“-”连接起来,假如有一个类目 id 为 80202,父类目 id 为 802,最高层类目 id 为 8,则此时应该写"8-802-80202";如果想全选最高层类目"8"底下的所有子类目,填"8"
- Label []string `json:"label,omitempty"`
- //strength_type int 必填 兴趣标签强度 0:不限 1:高强度
- StrengthType int `json:"strength_type"`
-}
type DpaUnitParam struct {
//dpa_unit_sub_type int 选填 商品广告类型 商品广告必填:1-DPA,2-SDPA,3-动态商品卡(2/3在提升应用安装、提升应用活跃、收集营销线索、小程序推广营销目标下可用)
DpaUnitSubType int `json:"dpa_unit_sub_type,omitempty"`
@@ -228,40 +137,6 @@ type DpaUnitParam struct {
DpaCategoryIds string `json:"dpa_category_ids,omitempty"`
}
-type CustomMiniAppData struct {
- //mini_app_id_platform string 选填 小程序APPID 计划 campaignType=19 推广快手小程序时必填,不能超过30个字符。 注:当账户加了小游戏推广白名单时,不需要填写。
- MiniAppIdPlatform string `json:"mini_app_id_platform,omitempty"`
- //bootstrap_page string 选填 小程序启动页面 跳转小程序时将直接进入该页面,计划 campaignType=19 小程序推广时必填。例:page/app/index。注:当账户加了小游戏推广白名单时,必填。
- BootstrapPage string `json:"bootstrap_page,omitempty"`
- //bootstrap_params string 选填 小程序启动参数 启动参数可以追踪页面来源,计划 campaignType=19 小程序推广时选填。例:name=lilei&age=18。注:当账户加了小游戏推广白名单时,不需要填写。
- BootstrapParams string `json:"bootstrap_params,omitempty"`
-}
-
-type Keyword struct {
- //id long 必填 关键词 id id 与 name 需互相匹配
- Id int64 `json:"id"`
- //name string 必填 关键词名称 id 与 name 需互相匹配
- Name string `json:"name"`
-}
-
-type Celebrity struct {
- //behaviors int[] 必填 行为类型 该字段为平台对应快手网红功能中的行为类型,可多选,但不可不选,不选会导致快手网红定向失效,定义如下 0:关注、1:视频互动、2:直播互动
- Behaviors []int `json:"behaviors"`
- //fans_stars fans_star[] 必填 网红内容 该字段包括平台对应快手网红功能中的网红分类和快手网红两项,数据保证录入顺序,可从【快手网红-网红分类】和【快手网红-搜索快手网红】接口获取对应数据
- FansStars []FansStar `json:"fans_stars"`
-}
-
-type FansStar struct {
- //id string 如使用该功能则必填此项,该字段有两种含义 1、当是网红分类,即type= 1时,该字段传入对应网红分类对应的父ID与当前ID的拼接字符串,如传入"33-177"表示一级网红分类"游戏"下的二级网红分类"沙盒游戏",如选中的是一级网红分类,则直接传入当前ID如"33" 2、当是快手网红,即type = 2时,该字段传入对应快手网红的author_id,如传入"1151465119"表示快手网红小脑斧来自N次元
- Id string `json:"id"`
- //type int 如使用该功能则必填此项 该字段为平台对应快手网红功能中的网红分类和快手网红两项,可从【快手网红-网红分类】和【快手网红-搜索快手网红】接口获取对应数据 1:网红分类、2:快手网红
- Type int `json:"type"`
- //name string 如使用该功能则必填此项,该字段有两种含义 1、当是网红分类,即type = 1时,该字段传入对应网红分类对应的父name与当前name的拼接字符串,如传入"游戏-沙盒游戏"表示一级网红分类"游戏"下的二级网红分类"沙盒游戏",如选中的是一级网红分类,则直接传入当前ID如"游戏",保证传入的值与传入id对应网红标签name(拼接)一致 2、当是快手网红,即type = 2时,该字段传入对应快手网红的kwai_id,如传入"小脑斧来自N次元"表示快手网红小脑斧来自N次元,保证传入的值与传入id对应的快手网红的kwai_id保持一致
- Name string `json:"name"`
- //category int[] 当是快手网红,即type= 2时,该字段传值有效,对应当前快手网红的分类,格式为first_label_id,second_label_id,如果second_label_id不存在,则只传入first_label_id,如传入32, 241表示当前快手网红属于影视-影视分类二级网红分类
- Category []int `json:"category"`
-}
-
// Url implement PostRequest interface
func (r CreateRequest) Url() string {
return "gw/dsp/unit/create"
diff --git a/model/v2.2/unit/list_request.go b/model/v2.2/unit/list_request.go
new file mode 100644
index 0000000..9c3f4e2
--- /dev/null
+++ b/model/v2.2/unit/list_request.go
@@ -0,0 +1,30 @@
+package unit
+
+import "encoding/json"
+
+type ListRequest struct {
+ AdvertiserID uint64 `json:"advertiser_id,omitempty"` // 必填,广告主 ID,在获取 access_token 的时候返回
+ CampaignID uint64 `json:"campaign_id,omitempty"` // 选填,广告计划 ID,过滤筛选条件,若不传或传空则视为无限制条件
+ UnitID uint64 `json:"unit_id,omitempty"` // 选填,广告组 ID,过滤筛选条件,若不传或传空则视为无限制条件
+ UnitName string `json:"unit_name,omitempty"` // 选填,广告组名称,过滤筛选条件,支持模糊搜索&精确查询
+ UnitIDs []uint64 `json:"unit_ids,omitempty"` // 选填,广告组 ID 集,不超过 100 个
+ Status int `json:"status,omitempty"` // 选填,广告组状态,过滤筛选条件;-2:不限(已删除);10:广告组已删除;40:广告创意已删除.所有不包含已删除 其他值无效
+ StartDate string `json:"start_date,omitempty"` // 选填,开始时间,与 end_date 同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应 update_time 信息
+ EndDate string `json:"end_date,omitempty"` // 选填,结束时间,与 start_date 同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应 update_time 信息
+ TimeFilterType int `json:"time_filter_type,omitempty"` // 选填,按创建时间或者更新时间进行筛选;1.如传入此字段时不传"start_date",与"end_date"字段,则不根据时间筛选。2.传入"start_date",与"end_date"字段,且此字段为 1 时,按照创建时间进行筛选。3.传入"start_date",与"end_date"字段,此字段不传,或传值为 0 时,则按照更新时间进行筛选
+ Page int `json:"page,omitempty"` // 选填,请求的页码数,默认为 1
+ PageSize int `json:"page_size,omitempty"` // 选填,请求的每页行数,默认为 20
+ ReviewStatusList []int `json:"review_status_list,omitempty"` // 选填,单元审核状态筛选;1:待审核;2:审核通过;3:审核失败;7:待送审
+ PutStatusList []int `json:"put_status_list,omitempty"` // 选填,单元投放状态筛选;1:投放;2:暂停;3:删除
+}
+
+// Url implement PostRequest interface
+func (r ListRequest) Url() string {
+ return "gw/dsp/unit/list"
+}
+
+// Encode implement PostRequest interface
+func (r ListRequest) Encode() []byte {
+ ret, _ := json.Marshal(r)
+ return ret
+}
diff --git a/model/v2.2/unit/list_response.go b/model/v2.2/unit/list_response.go
new file mode 100644
index 0000000..afdea47
--- /dev/null
+++ b/model/v2.2/unit/list_response.go
@@ -0,0 +1,8 @@
+package unit
+
+type ListResponse struct {
+ // TotalCount 数据总数
+ TotalCount int `json:"total_count,omitempty"`
+ // Details 返回值详情
+ Details []Unit `json:"details,omitempty"`
+}
diff --git a/model/v2.2/unit/target.go b/model/v2.2/unit/target.go
new file mode 100644
index 0000000..70e717d
--- /dev/null
+++ b/model/v2.2/unit/target.go
@@ -0,0 +1,119 @@
+package unit
+
+type Target struct {
+ //region long[] 选填 地域 传值为[]表示不限;传递上一级 ID 时,childrenID 可以不传;不允许同时传 parentID 和 childrenID;地域信息可通过地域接口获取;仅计划的 campaign_type 为 5 时,支持设置三级地域(例:山西-大同-左云,左云是三级地域)
+ Region []uint64 `json:"region,omitempty"`
+ //district_ids long[] 选填 商圈定向 与 region 字段不能同时传、白名单控制,最多选 100 个。可以通过/rest/openapi/v1/region/district/list 接口获取商圈信息。该定向仅支持快手站内广告位,不支持联盟广告位。
+ DistrictIds []uint64 `json:"district_ids,omitempty"`
+ //user_type int 选填 用户类型 0:实时;1:常驻;2:不限
+ UserType int `json:"user_type,omitempty"`
+ //age struct 选填 自定义年龄段 不传值表示不限,传值具体见下方表格;与 ages_range 不能同时传
+ Age *Age `json:"age,omitempty"`
+ //ages_range int[] 选填 固定年龄段 与 age 不能同时传;【18:表示 18-23 岁】;【24:表示 24-30 岁】;【31:表示 31-40 岁】;【41:表示 41-49 岁】;【50:表示 50-100 岁】
+ AgesRange []int `json:"ages_range,omitempty"`
+ //gender int 选填 性别 1:女性, 2:男性,0 表示不限
+ Gender int `json:"gender"`
+ //platform_os int 选填 操作系统 1:Android,2:iOS,0 表示不限;当计划类型为 2(提升应用安装)时该字段可忽略
+ PlatformOs int `json:"platform_os,omitempty"`
+ //android_osv int 选填 Android 版本 3:不限,4:4.x+,5:5.x+,6:6.x+,7:7.x+,8:8.x+,9:9.x+,10:10.x+;当计划类型为 2(提升应用安装)时,仅当 app_id 表示的是 Android 应用可使用此字段传递版本
+ AndroidOsv int `json:"android_osv,omitempty"`
+ //ios_osv int 选填 iOS 版本 6:不限,7:7.x+,8:8.x+,9:9.x+,10:10.x+;11:11.x+;12:12.x+;13:13.x+;当计划类型为 2(提升应用安装)时,仅当 appId 表示的是 iOS 应用可使用此字段传递版本
+ IosOsv int `json:"ios_osv,omitempty"`
+ //network int 选填 网络环境 1:Wi-Fi,2:移动网络,0:表示不限
+ Network int `json:"network,omitempty"`
+ //device_brand_ids long[] 选填 设备品牌ID列表 传值为[]表示不限;当 platform为iOS定向时,没有设备品牌定向;1:苹果(platform字段为空时选填);2:VIVO;3:OPPO;4:华为;5:小米;6:荣耀;7:三星;8:魅族;9:金立;10:HTC;11:联想;12:酷派;13:酷比;14:中兴;15:乐视;16:LG;17:中国移动;18:360;19:百度;20:努比亚;21:一加;22:海信;23:朵唯;24:美图;25:锤子;26:谷歌;27:小辣椒;28:诺基亚;29:康佳
+ DeviceBrandIds []uint64 `json:"device_brand_ids,omitempty"`
+ //device_price int[] 选填 设备价格 1:1,500 元以下(近期下线), 新增:11:1000以下,12:1001~1500,请直接使用新枚举值; 2:1,501~2,000; 3:2,001~2,500;4:2,501~3,000;5、3,001~3,500; 6:3,501~4,000;7:4,001~4,500; 8:4,501~5,000;9:5,001~5,500; 10:5,500 元以上;传值为 [] 表示不限;
+ DevicePrice []int `json:"device_price,omitempty"`
+ //app_interest_ids long[] 选填 APP 行为-按分类 id 不能重复且必须准确,具体 id 可通过下方标签接口获取;仅包含安卓数据,若操作系统定向 IOS 则无效;不能同时选择 app_ids(新标签体系字段,替换 app_interest,与 app_interest 同时传递,app_interest 字段失效)。该定向仅支持快手站内广告位,不支持联盟广告位。
+ AppInterestIds []uint64 `json:"app_interest_ids,omitempty"`
+ //app_ids long[] 选填 APP 行为-按 APP 名称 id 不能重复且必须准确,具体 id 可通过下方应用接口获取,建议不超过 10 个,否则可能出现报错;仅包含安卓数据,若操作系统定向 IOS 则无效;不能同时选择 app_interest。该定向仅支持快手站内广告位,不支持联盟广告位。
+ AppIds []uint64 `json:"app_ids,omitempty"`
+ //filter_converted_level int 选填 过滤已转化人群纬度 搜索广告、联盟广告、小店通不支持。优化目标不支持【封面曝光数】和【封面点击数】非应用下载类推广不支持过滤【APP】纬度。0(默认):不限;1:广告组 2:广告计划;3:本账户;4:公司主体;5:APP;6:运营自定义产品名
+ FilterConvertedLevel int `json:"filter_converted_level,omitempty"`
+ //population long[] 选填 人群包定向 /rest/openapi/v1/dmp/population/list 获取人群包 id。population 不能重复,与 exclude_population 不能有交集,不能传付费人群包,付费人群包标识字段:population_type=7
+ Population []uint64 `json:"population,omitempty"`
+ //exclude_population long[] 选填 人群包排除 /rest/openapi/v1/dmp/population/list 获取人群包 id。exclude_population 不能重复,不能传付费人群包,付费人群包标识字段:population_type=7
+ ExcludePopulation []uint64 `json:"exclude_population,omitempty"`
+ //paid_audience long[] 选填 付费人群包 id /rest/openapi/v1/dmp/population/list 获取人群包 id。1、不能重复,只能传付费人群包,且 third_platform_code 要一样,2、如果传了【population 或 exclude_population】,报错;修改时要也要保证【population 或 exclude_population】不能同时传。3、创建时若已经有了【population 或 exclude_population】修改时只传 paid_audience 也会报错,这时需要把 population 或 exclude_population】设为[]才行,反之也一样。总之,【population 或 exclude_population】与【paid_audience】不能同时存在。该定向仅支持快手站内广告位,不支持联盟广告位。
+ PaidAudience []uint64 `json:"paid_audience,omitempty"`
+ //seed_population long[] 选填 种子人群包 当账户开通种子人群包功能后方可使用此功能。该定向仅支持快手站内广告位,不支持联盟广告位。
+ SeedPopulation []uint64 `json:"seed_population,omitempty"`
+ //intelli_extend_option int 选填 智能定向开关 0:智能定向关闭;1:智能定向开启【计划层级开启智能调控时,只能传1】;当计划层级开启了自动调控功能,不传默认智能定向开启状态,其他清空默认智能定向关闭。
+ IntelliExtendOption int `json:"intelli_extend_option,omitempty"`
+ //behavior_type int 选填 行为兴趣类型 0:默认;1:自定义行为意向;2:行为意向系统优选。联盟广告位不支持后者。
+ BehaviorType int `json:"behavior_type,omitempty"`
+ //behavior_interest struct 选填 行为兴趣定向 behavior.keyword 、behavior.label、interest.lable 其中一个必传,具体传值下方表格;仅在 behavior_type = 1 时生效。联盟广告位不支持interest。
+ BehaviorInterest *BehaviorInterest `json:"behavior_interest,omitempty"`
+ //disable_installed_app_switch int 选填 过滤已安装人群维度 0:过滤(默认),1:不限
+ DisableInstalledAppSwitch int `json:"disable_installed_app_switch,omitempty"`
+ //filter_time_range int 选填 用户的转化时间范围 0:30天;1:60天;2:90天。该定向仅支持快手站内广告位,不支持联盟广告位。
+ FilterTimeRange int `json:"filter_time_range,omitempty"`
+ //celebrity struct 选填 快手网红 behaviors、fans_star两个字段必填充。该定向仅支持快手站内广告位,不支持联盟广告位。
+ Celebrity *Celebrity `json:"celebrity,omitempty"`
+ //media long[] 选填 媒体定向包 若选择使用定向行业优质流量包(media_source_type = 1),此处单选:1 - 超休闲游戏;2 - 重度游戏;4 - 直营电商;5 - 平台电商;若选择使用广告主自定义媒体包(media_source_type = 2),此处多选,填写媒体包 id【仅联盟广告位生效】
+ Media []uint64 `json:"media,omitempty"`
+ //exclude_media long[] 选填 媒体定向排除包 media 和 exclude_media 只可选其一,若选择使用排除行业优质流量包(media_source_type = 1),此处单选:1 - 超休闲游戏;2 - 重度游戏;4 - 直营电商;5 - 平台电商;若选择使用广告主自定义媒体包(media_source_type = 2),此处多选,填写媒体包 id;【仅联盟广告位生效】
+ ExcludeMedia []uint64 `json:"exclude_media,omitempty"`
+ //media_source_type int 选填 媒体包来源 默认为 0,0-不限,未指定,1-行业优质流量包,2-广告主自定义
+ MediaSourceType int `json:"media_source_type,omitempty"`
+}
+
+type Age struct {
+ // min int 必填 年龄最小限制 年龄区间最小为 18 岁
+ Min int `json:"min"`
+ // max int 必填 年龄最大限制 年龄区间最大为 55 岁,且年龄最大限制须大于等于年龄最小限制
+ Max int `json:"max"`
+}
+
+type BehaviorInterest struct {
+ //behavior struct 必填 行为定向 behavior 与 interest 同时不传,则清空行为兴趣定向
+ Behavior *Behavior `json:"behavior,omitempty"`
+ // interest struct 选填 兴趣定向 behavior 与 interest 同时不传,则清空行为兴趣定向
+ Interest *Interest `json:"interest,omitempty"`
+}
+
+type Behavior struct {
+ //keyword struct[] 选填 行为定向关键词 根据/rest/openapi/v1/tool/keyword/query 接口获取
+ Keyword []*Keyword `json:"keyword,omitempty"`
+ //label string[] 选填 行为定向 类目词 根据/rest/openapi/v1/tool/label/behavior_interest 接口获取。将行为类目 id 从最高层类目 id 开始,以“-”连接起来,假如有一个类目 id 为 80202,父类目 id 为 802,最高层类目 id 为 8,则此时应该写"8-802-80202";如果想全选最高层类目"8"底下的所有子类目,填"8"
+ Label []string `json:"label,omitempty"`
+ //time_type int 必填 在多少天内发生行为的用户 0:7 天;1:15 天;2:30 天;3:90 天;4:180 天
+ TimeType int `json:"time_type"`
+ //strength_type int 必填 行为强度 0:不限;1:高强度
+ StrengthType int `json:"strength_type"`
+ //scene_type int[] 必填 行为场景 1:社区;2:APP;3:电商;4:推广
+ SceneType []int `json:"scene_type"`
+}
+
+type Interest struct {
+ //label string[] 选填 兴趣定向类目词 根据/rest/openapi/v1/tool/label/behavior_interest 接口获取。将兴趣类目 id 从最高层类目 id 开始,以“-”连接起来,假如有一个类目 id 为 80202,父类目 id 为 802,最高层类目 id 为 8,则此时应该写"8-802-80202";如果想全选最高层类目"8"底下的所有子类目,填"8"
+ Label []string `json:"label,omitempty"`
+ //strength_type int 必填 兴趣标签强度 0:不限 1:高强度
+ StrengthType int `json:"strength_type"`
+}
+
+type Keyword struct {
+ //id long 必填 关键词 id id 与 name 需互相匹配
+ Id int64 `json:"id"`
+ //name string 必填 关键词名称 id 与 name 需互相匹配
+ Name string `json:"name"`
+}
+
+type Celebrity struct {
+ //behaviors int[] 必填 行为类型 该字段为平台对应快手网红功能中的行为类型,可多选,但不可不选,不选会导致快手网红定向失效,定义如下 0:关注、1:视频互动、2:直播互动
+ Behaviors []int `json:"behaviors"`
+ //fans_stars fans_star[] 必填 网红内容 该字段包括平台对应快手网红功能中的网红分类和快手网红两项,数据保证录入顺序,可从【快手网红-网红分类】和【快手网红-搜索快手网红】接口获取对应数据
+ FansStars []FansStar `json:"fans_stars"`
+}
+
+type FansStar struct {
+ //id string 如使用该功能则必填此项,该字段有两种含义 1、当是网红分类,即type= 1时,该字段传入对应网红分类对应的父ID与当前ID的拼接字符串,如传入"33-177"表示一级网红分类"游戏"下的二级网红分类"沙盒游戏",如选中的是一级网红分类,则直接传入当前ID如"33" 2、当是快手网红,即type = 2时,该字段传入对应快手网红的author_id,如传入"1151465119"表示快手网红小脑斧来自N次元
+ Id string `json:"id"`
+ //type int 如使用该功能则必填此项 该字段为平台对应快手网红功能中的网红分类和快手网红两项,可从【快手网红-网红分类】和【快手网红-搜索快手网红】接口获取对应数据 1:网红分类、2:快手网红
+ Type int `json:"type"`
+ //name string 如使用该功能则必填此项,该字段有两种含义 1、当是网红分类,即type = 1时,该字段传入对应网红分类对应的父name与当前name的拼接字符串,如传入"游戏-沙盒游戏"表示一级网红分类"游戏"下的二级网红分类"沙盒游戏",如选中的是一级网红分类,则直接传入当前ID如"游戏",保证传入的值与传入id对应网红标签name(拼接)一致 2、当是快手网红,即type = 2时,该字段传入对应快手网红的kwai_id,如传入"小脑斧来自N次元"表示快手网红小脑斧来自N次元,保证传入的值与传入id对应的快手网红的kwai_id保持一致
+ Name string `json:"name"`
+ //category int[] 当是快手网红,即type= 2时,该字段传值有效,对应当前快手网红的分类,格式为first_label_id,second_label_id,如果second_label_id不存在,则只传入first_label_id,如传入32, 241表示当前快手网红属于影视-影视分类二级网红分类
+ Category []int `json:"category"`
+}
diff --git a/model/v2.2/unit/uint.go b/model/v2.2/unit/uint.go
new file mode 100644
index 0000000..8742c13
--- /dev/null
+++ b/model/v2.2/unit/uint.go
@@ -0,0 +1,110 @@
+package unit
+
+import "encoding/json"
+
+type Unit struct {
+ CampaignID uint64 `json:"campaign_id"` // 广告计划 ID
+ UnitID uint64 `json:"unit_id"` // 广告组 ID
+ UnitName string `json:"unit_name"` // 广告组名称
+ PutStatus int `json:"put_status"` // 投放状态(操作结果) 1:投放中;2:暂停 3:删除
+ Status int `json:"status"` // 广告组状态(优先看看这个状态,计算结果) -1:不限,1:计划已暂停,3:计划超预算,6:余额不足,,11:审核中,12:审核未通过,14:已结束,15:已暂停,17:组超预算,19:未达投放时间,20:有效,22:不在投放时段
+ ReviewDetail string `json:"review_detail"` // 审核拒绝理由
+ StudyStatus int `json:"study_status"` // 学习期 1:学习中,2:学习成功,3:学习失败
+ CompensateStatus int `json:"compensate_status"` // 赔付状态 0=不需要赔付(不需要展示赔付标志),1=成本保障生效中,2=成本保证确认中,3=已赔付完成,4=已失效
+ BidType int `json:"bid_type"` // 出价类型 1:CPM,2:CPC,6:OCPC(使用 OCPC 代表 OCPX),10:OCPM,20:eCPC
+ Bid int64 `json:"bid"` // 出价 单位:厘
+ CPABid int64 `json:"cpa_bid"` // OCPC 出价 单位:厘
+ OCPXActionType int `json:"ocpx_action_type"` // 优化目标 0:未知,2:点击转化链接,10:曝光,11:点击,31:下载完成,53:提交线索,109:电话卡激活,137:量房,180:激活,190: 付费,191:首日 ROI,348:有效线索,383: 授信,384: 完件 715:微信复制;739:7 日付费次数;774:7 日ROI;810:激活付费
+ DeepConversionType int `json:"deep_conversion_type"` // 深度转化目标 3:付费,7:次日留存,10:完件, 11:授信;13:添加购物车;14:提交订单;15:购买;44:有效线索;92:付费 roi;181:激活后24H次日留存;0:无;
+ DeepConversionBid int64 `json:"deep_conversion_bid"` //深度转化目标出价
+ EnhanceConversionType int `json:"enhance_conversion_type"` // 增强目标
+ ROIRatio float64 `json:"roi_ratio"` // 付费 ROI 系数,优化目标为「首日 ROI」时必填:ROI 系数取值范围 ( 0,100 ] 最多支持到三位小数(如:0.066)
+ SceneID []int `json:"scene_id"` // 广告位,1:优选广告位;2:按场景选择广告位-信息流广告(旧广告位,包含上下滑大屏广告)6:上下滑大屏广告;7:信息流广告(不包含上下滑大屏广告)24:激励视频;11:快看点场景
+ UnitType int `json:"unit_type"` // 创意制作方式,4: 自定义; 7:程序化创意 2.0
+ BeginTime string `json:"begin_time"` // 投放开始时间,格式:yyyy-MM-dd
+ EndTime *string `json:"end_time,omitempty"` // 投放结束时间,格式:yyyy-MM-dd, 排期不限为 null
+ Schedule interface{} `json:"schedule,omitempty"`
+ DayBudget int64 `json:"day_budget"` // 单日预算,单位:厘
+ DayBudgetSchedule []int64 `json:"day_budget_schedule"` // 分日预算,单位:厘,单日预算和分日预算同时存在时,以分日预算为准,优先级高于day_budget
+ ConvertID int `json:"convert_id"` // 转化目标
+ URLType int `json:"url_type"` // url 类型,当计划类型为 3 时(获取电商下单)时有返回。1:淘宝商品短链 2:淘宝商品 itemID
+ WebURIType int `json:"web_uri_type"` // url 类型,当计划类型为 5(收集销售线索)&使用建站时有返回:需使用魔力建站 不传默认 1,2:落地页
+ URL string `json:"url"` // 落地页链接,计划类型是 2(提升应用安装):返回应用下载地址;计划类型是 3(获取电商下单):根据 url_type 返回相应信息;计划类型是 4(推广品牌活动):返回落地页 url;计划类型是 5(收集销售线索):返回落地页 url;计划类型是 5(收集销售线索):建站 id
+ SiteID int64 `json:"site_id"` // 建站ID/下载中间页ID,当 web_uri_type = 2 时表示建站 ID,必须为数字,通过「/rest/openapi/v2/lp/page/list」获取。计划类型是2(提升应用安装)且关联应用为安卓时,表示安卓下载中间页ID,通过「/rest/openapi/v2/lp/page/list」获取 "view_comps = 7" 的建站ID。
+ GroupID int64 `json:"group_id"` // 程序化落地页ID,web_uri_type = 3 时表示程序化落地页ID,必须为数字,通过「/rest/openapi/gw/magicsite/v1/group/list」获取;
+ PageGroup PageGroup `json:"page_group_detail"` // 程序化落地页信息,广告组ID绑定的程序化落地页组信息
+ SchemaURI string `json:"schema_uri"` // 调起链接,提升应用活跃营销目标的调起链接
+ SchemaID string `json:"schema_id"` // 微信小程序外部调起链接,目前只有收集营销线索计划下的联盟广告位该字段才有效
+ AppID int64 `json:"app_id"` // 应用 ID
+ AppDownloadType int `json:"app_download_type"` // 应用下载方式 0:直接下载 1:落地页下载(仅在提升应用安装计划下生效)
+ UseAppMarket int `json:"use_app_market,omitempty"` // 优先从系统应用商店下载 0:未设置 1:优先从系统应用商店下载使用
+ AppStore []string `json:"app_store,omitempty"` // 应用商店列表
+ DiverseData DiverseData `json:"diverse_data"` // 应用信息,详情见下方
+ ShowMode int `json:"show_mode"` // 创意展现方式 0:未知 1:轮播 2:优选
+ SiteType int `json:"site_type,omitempty"` // 预约广告 1:IOS 预约 缺省为不传或传 0
+ SmartCover bool `json:"smart_cover"` // 程序化创意 2.0 智能抽帧 是否开启智能抽帧
+ AssetMining bool `json:"asset_mining"` // 程序化创意 2.0 素材挖掘 是否开启历史素材挖掘
+ ConsultID int64 `json:"consult_id"` // 是否使用了咨询组件 0=未使用 1=使用;注,咨询组件仅在收集销售线索计划(campaign_type=5)下可用,且使用了咨询组件后,可用的行动号召按钮限于接口返回内容
+ AdvCardOption int `json:"adv_card_option"` // 高级创意开关 0:关闭 1:开启
+ AdvCardList []interface{} `json:"adv_card_list,omitempty"` // 高级创意列表
+ PlayableID int64 `json:"playable_id"` // 试玩 ID 可选字段,开启试玩时存在,否则不存在。当用户上传试玩素材成功时返回,用于之后对于广告组中试玩创意的编辑操作。
+ PlayButton string `json:"play_button"` // 试玩按钮文字内容 开启试玩时存在,否则不存在,示例按钮内容如下:1:立即试玩;2:试玩一下;3:立即体验;4:免装试玩;5:免装体验。启用试玩时:默认“立即试玩”,未启用试玩时:内容为空。
+ PlayableOrientation int `json:"playable_orientation"` // 试玩素材的横竖适配 默认值为-1;0:横竖均可;1:竖屏;2:横屏
+ PlayableFileName string `json:"playable_file_name"` // 试玩广告的文件名
+ DpaUnitSubType int `json:"dpa_unit_sub_type"` // 商品广告类型:1-DPA,2-SDPA,3-动态商品卡
+ LibraryID int `json:"library_id"` // 商品库ID
+ OuterID string `json:"outer_id"` // 商品第三方ID
+ DpaOuterIDs []string `json:"dpa_outer_ids"` // DPA商品ID集合
+ DpaCategoryIDs []string `json:"dpa_category_ids"` // DPA商品类目集合
+ ProductName string `json:"product_name"` // 商品名称
+ ProductPrice float64 `json:"product_price"` // 商品价格,单位:元
+ ProductImage string `json:"product_image"` // 商品主图
+ JingleBellID int64 `json:"jingle_bell_id"` // 小铃铛组件ID
+ LiveUserID int64 `json:"live_user_id"` // 主播ID
+ ExtendSearch bool `json:"extend_search"` // 智能扩词开启状态,false:关闭,true:开启
+ CustomMiniAppData CustomMiniAppData `json:"custom_mini_app_data"` // 广小程序营销目标小程序信息 推广快手小程序时必填
+ Target Target `json:"target"` // 定向数据
+ TemplateID int64 `json:"template_id"` // 定向模板ID
+ OuterLoopNative int `json:"outer_loop_native,omitempty"` // 是否开启原生
+ QuickSearch int `json:"quick_search,omitempty"` // 是否开启快投
+ TargetExplore int `json:"target_explore,omitempty"` // 是否开启搜索人群探索
+ NegativeWord AdMarketNegativeWordParam `json:"negative_word,omitempty"` // 搜索广告否词
+ BackflowForecast json.RawMessage `json:"backflow_forecast,omitempty"` // 回流预估数据
+ AdType int `json:"ad_type,omitempty"` // 广告计划类型
+ UnitSource int `json:"unit_source,omitempty"` // 广告组来源
+ UpdateTime string `json:"update_time,omitempty"` // 最后修改时间
+ PackageID int64 `json:"package_id,omitempty"` // 应用包ID
+}
+
+type PageReviewDetail struct {
+ PageId int64 `json:"page_id"` // 页面 ID
+ ReviewStatus string `json:"review_status"` // 落地页审核状态, 1-审核中 2-审核通过 3-审核拒绝
+ Url string `json:"url"` // 落地页URL信息
+ ReviewDetail string `json:"review_detail"` // 落地页的审核拒绝理由
+}
+
+type PageGroup struct {
+ GroupId int64 `json:"group_id"` // 程序化落地页组 ID
+ GroupName string `json:"group_name"` // 程序化落地页组名称
+ PageReviewDetail []PageReviewDetail `json:"page_review_detail"` // 程序化落地页组下的页面信息
+}
+
+type DiverseData struct {
+ AppName string `json:"app_name"` // 应用名称
+ AppPackageName string `json:"app_package_name"` // 应用包名
+ DeviceOSType int `json:"device_os_type"` // 应用操作系统类型,0:未知,1:ANDROID,2:IOS
+}
+
+type AdMarketNegativeWordParam struct {
+ ExactWords []string `json:"exact_words"` // 精确否定词,搜索广告新增
+ PhraseWords []string `json:"phrase_words"` // 短语否定词,搜索广告新增
+}
+
+type CustomMiniAppData struct {
+ //mini_app_id_platform string 选填 小程序APPID 计划 campaignType=19 推广快手小程序时必填,不能超过30个字符。 注:当账户加了小游戏推广白名单时,不需要填写。
+ MiniAppIdPlatform string `json:"mini_app_id_platform,omitempty"`
+ //bootstrap_page string 选填 小程序启动页面 跳转小程序时将直接进入该页面,计划 campaignType=19 小程序推广时必填。例:page/app/index。注:当账户加了小游戏推广白名单时,必填。
+ BootstrapPage string `json:"bootstrap_page,omitempty"`
+ //bootstrap_params string 选填 小程序启动参数 启动参数可以追踪页面来源,计划 campaignType=19 小程序推广时选填。例:name=lilei&age=18。注:当账户加了小游戏推广白名单时,不需要填写。
+ BootstrapParams string `json:"bootstrap_params,omitempty"`
+}