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"` +}