From 65e13e11d3ca4b7c5638419c284d5d85f320bdd5 Mon Sep 17 00:00:00 2001 From: Syd Xu Date: Fri, 30 Jul 2021 13:29:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E6=8A=95=E6=94=BE-=E8=8E=B7=E5=8F=96=E5=90=84=E5=B1=82?= =?UTF-8?q?=E7=BA=A7=E4=BF=A1=E6=81=AF=E7=9B=B8=E5=85=B3API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++ api/campaign/doc.go | 2 + api/campaign/list.go | 16 +++ api/creative/advanced_program_list.go | 16 +++ .../advanced_program_review_detail.go | 16 +++ api/creative/doc.go | 2 + api/creative/list.go | 16 +++ api/tool/audience_predict.go | 16 +++ api/tool/doc.go | 2 + api/tool/operation_record_list.go | 16 +++ api/unit/doc.go | 2 + api/unit/list.go | 16 +++ model/campaign/doc.go | 2 + model/campaign/list_request.go | 40 ++++++ model/campaign/list_response.go | 7 + model/creative/advanced_program_creative.go | 41 ++++++ .../creative/advanced_program_list_request.go | 36 +++++ .../advanced_program_list_response.go | 9 ++ .../advanced_program_review_detail.go | 11 ++ .../advanced_program_review_detail_request.go | 29 ++++ model/creative/combine_detail_reviews.go | 19 +++ model/creative/creative.go | 73 ++++++++++ model/creative/display_info.go | 9 ++ model/creative/doc.go | 2 + model/creative/list_request.go | 44 ++++++ model/creative/list_response.go | 9 ++ model/creative/material.go | 13 ++ .../creative/programmed_creative_material.go | 13 ++ model/tool/audienc_predict_request.go | 54 +++++++ model/tool/audience_predict_response.go | 7 + model/tool/content_log.go | 11 ++ model/tool/doc.go | 2 + model/tool/operation_record.go | 19 +++ model/tool/operation_record_list_request.go | 34 +++++ model/tool/operation_record_list_response.go | 9 ++ model/unit/adv_card.go | 19 +++ model/unit/age.go | 9 ++ model/unit/backflow_forecast.go | 10 ++ model/unit/behavior_interest.go | 15 ++ model/unit/diverse_data.go | 11 ++ model/unit/doc.go | 2 + model/unit/gift_data.go | 9 ++ model/unit/intelli_extend.go | 13 ++ model/unit/keyword.go | 9 ++ model/unit/list_request.go | 44 ++++++ model/unit/list_response.go | 9 ++ model/unit/schedule.go | 19 +++ model/unit/target.go | 57 ++++++++ model/unit/unit.go | 135 ++++++++++++++++++ 49 files changed, 982 insertions(+) create mode 100644 api/campaign/doc.go create mode 100644 api/campaign/list.go create mode 100644 api/creative/advanced_program_list.go create mode 100644 api/creative/advanced_program_review_detail.go create mode 100644 api/creative/doc.go create mode 100644 api/creative/list.go create mode 100644 api/tool/audience_predict.go create mode 100644 api/tool/doc.go create mode 100644 api/tool/operation_record_list.go create mode 100644 api/unit/doc.go create mode 100644 api/unit/list.go create mode 100644 model/campaign/doc.go create mode 100644 model/campaign/list_request.go create mode 100644 model/campaign/list_response.go create mode 100644 model/creative/advanced_program_creative.go create mode 100644 model/creative/advanced_program_list_request.go create mode 100644 model/creative/advanced_program_list_response.go create mode 100644 model/creative/advanced_program_review_detail.go create mode 100644 model/creative/advanced_program_review_detail_request.go create mode 100644 model/creative/combine_detail_reviews.go create mode 100644 model/creative/creative.go create mode 100644 model/creative/display_info.go create mode 100644 model/creative/doc.go create mode 100644 model/creative/list_request.go create mode 100644 model/creative/list_response.go create mode 100644 model/creative/material.go create mode 100644 model/creative/programmed_creative_material.go create mode 100644 model/tool/audienc_predict_request.go create mode 100644 model/tool/audience_predict_response.go create mode 100644 model/tool/content_log.go create mode 100644 model/tool/doc.go create mode 100644 model/tool/operation_record.go create mode 100644 model/tool/operation_record_list_request.go create mode 100644 model/tool/operation_record_list_response.go create mode 100644 model/unit/adv_card.go create mode 100644 model/unit/age.go create mode 100644 model/unit/backflow_forecast.go create mode 100644 model/unit/behavior_interest.go create mode 100644 model/unit/diverse_data.go create mode 100644 model/unit/doc.go create mode 100644 model/unit/gift_data.go create mode 100644 model/unit/intelli_extend.go create mode 100644 model/unit/keyword.go create mode 100644 model/unit/list_request.go create mode 100644 model/unit/list_response.go create mode 100644 model/unit/schedule.go create mode 100644 model/unit/target.go create mode 100644 model/unit/unit.go diff --git a/README.md b/README.md index ea49661..95a2cd0 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,14 @@ - 获取广告账户余额信息 [ FundGet(clt *core.SDKClient, accessToken string, advertiserID int64) (float64, error) ] - 获取广告主账户流水信息 [ FundDailyFlows(clt *core.SDK, accessToken string, req *advertiser.FundDailyFlowsRequest) (*advertiser.FundDailyFlowsResponse, error) ] - 广告投放 + - 获取各层级信息 + - 获取广告计划信息 [ campaign.List(clt *core.SDKClient, accessToken string, req *campaign.ListRequest) (*campaign.ListResponse, error) ] + - 获取广告组信息 [ unit.List(clt *core.SDKClient, accessToken string, req *unit.ListRequest) (*unit.ListResponse, error) ] + - 获取广告创意信息 [ creative.List(clt *core.SDKClient, accessToken string, req *creative.ListRequest) (*creative.ListResponse, error) ] + - 获取程序化创意2.0信息 [ creative.AdvancedProgramList(clt *core.SDKClient, accessToken string, req *creative.AdvancedProgramListRequest) (*creative.AdvancedProgramListResponse, error) ] + - 获取程序化创意2.0审核信息 [ creative.AdvancedProgramReviewDetail(clt *core.SDKClient, accessToken string, req *creative.AdvancedProgramReviewDetailRequest) (*creative.AdvancedProgramReviewDetail, error) ] + - 账户操作记录信息查询 [ tool.OperationRecordList(clt *core.SDKClient, accessToken string, req *tool.OperationRecordListRequest) (*tool.OperationRecordListResponse, error) ] + - 定向人群预估查询 [ tool.AudiencePredict(clt *core.SDKClient, accessToken string, req *tool.AudiencePredictRequest) (int64, error) ] - 账户层级 - 账户日预算查询 [ advertiser.BudgetGet(clt *core.SDKClient, accessToken string, advertiserID int64) (*advertiser.Budget, error) ] - 修改账户预算 [ advertiser.UpdateBudget(clt *core.SDKClient, accessToken string, req *advertiser.UpdateBudgetRequest) error ] diff --git a/api/campaign/doc.go b/api/campaign/doc.go new file mode 100644 index 0000000..8a4289c --- /dev/null +++ b/api/campaign/doc.go @@ -0,0 +1,2 @@ +// Package campaign 广告计划相关API +package campaign diff --git a/api/campaign/list.go b/api/campaign/list.go new file mode 100644 index 0000000..75e5e31 --- /dev/null +++ b/api/campaign/list.go @@ -0,0 +1,16 @@ +package campaign + +import ( + "github.com/bububa/kwai-marketing-api/core" + "github.com/bububa/kwai-marketing-api/model/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/creative/advanced_program_list.go b/api/creative/advanced_program_list.go new file mode 100644 index 0000000..90471bf --- /dev/null +++ b/api/creative/advanced_program_list.go @@ -0,0 +1,16 @@ +package creative + +import ( + "github.com/bububa/kwai-marketing-api/core" + "github.com/bububa/kwai-marketing-api/model/creative" +) + +// AdvancedProgramList 获取程序化创意2.0信息 +func AdvancedProgramList(clt *core.SDKClient, accessToken string, req *creative.AdvancedProgramListRequest) (*creative.AdvancedProgramListResponse, error) { + var resp creative.AdvancedProgramListResponse + err := clt.Post(accessToken, req, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/creative/advanced_program_review_detail.go b/api/creative/advanced_program_review_detail.go new file mode 100644 index 0000000..fea444d --- /dev/null +++ b/api/creative/advanced_program_review_detail.go @@ -0,0 +1,16 @@ +package creative + +import ( + "github.com/bububa/kwai-marketing-api/core" + "github.com/bububa/kwai-marketing-api/model/creative" +) + +// AdvancedProgramReviewDetail 获取程序化创意2.0审核信息 +func AdvancedProgramReviewDetail(clt *core.SDKClient, accessToken string, req *creative.AdvancedProgramReviewDetailRequest) (*creative.AdvancedProgramReviewDetail, error) { + var resp creative.AdvancedProgramReviewDetail + err := clt.Get(accessToken, req, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/creative/doc.go b/api/creative/doc.go new file mode 100644 index 0000000..508340d --- /dev/null +++ b/api/creative/doc.go @@ -0,0 +1,2 @@ +// Package creative 广告创意相关API +package creative diff --git a/api/creative/list.go b/api/creative/list.go new file mode 100644 index 0000000..66cc96d --- /dev/null +++ b/api/creative/list.go @@ -0,0 +1,16 @@ +package creative + +import ( + "github.com/bububa/kwai-marketing-api/core" + "github.com/bububa/kwai-marketing-api/model/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/tool/audience_predict.go b/api/tool/audience_predict.go new file mode 100644 index 0000000..d5d8c2c --- /dev/null +++ b/api/tool/audience_predict.go @@ -0,0 +1,16 @@ +package tool + +import ( + "github.com/bububa/kwai-marketing-api/core" + "github.com/bububa/kwai-marketing-api/model/tool" +) + +// AudiencePredict 定向人群预估查询 +func AudiencePredict(clt *core.SDKClient, accessToken string, req *tool.AudiencePredictRequest) (int64, error) { + var resp tool.AudiencePredictResponse + err := clt.Post(accessToken, req, &resp) + if err != nil { + return 0, err + } + return resp.AudiencePredictNum, nil +} diff --git a/api/tool/doc.go b/api/tool/doc.go new file mode 100644 index 0000000..a21996f --- /dev/null +++ b/api/tool/doc.go @@ -0,0 +1,2 @@ +// Package tool 工具类API +package tool diff --git a/api/tool/operation_record_list.go b/api/tool/operation_record_list.go new file mode 100644 index 0000000..fd43f8c --- /dev/null +++ b/api/tool/operation_record_list.go @@ -0,0 +1,16 @@ +package tool + +import ( + "github.com/bububa/kwai-marketing-api/core" + "github.com/bububa/kwai-marketing-api/model/tool" +) + +// OperationRecordList 账户操作记录信息查询 +func OperationRecordList(clt *core.SDKClient, accessToken string, req *tool.OperationRecordListRequest) (*tool.OperationRecordListResponse, error) { + var resp tool.OperationRecordListResponse + err := clt.Post(accessToken, req, &resp) + if err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/unit/doc.go b/api/unit/doc.go new file mode 100644 index 0000000..5a39b44 --- /dev/null +++ b/api/unit/doc.go @@ -0,0 +1,2 @@ +// Package unit 广告组相关API +package unit diff --git a/api/unit/list.go b/api/unit/list.go new file mode 100644 index 0000000..89dbf86 --- /dev/null +++ b/api/unit/list.go @@ -0,0 +1,16 @@ +package unit + +import ( + "github.com/bububa/kwai-marketing-api/core" + "github.com/bububa/kwai-marketing-api/model/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/campaign/doc.go b/model/campaign/doc.go new file mode 100644 index 0000000..8a4289c --- /dev/null +++ b/model/campaign/doc.go @@ -0,0 +1,2 @@ +// Package campaign 广告计划相关API +package campaign diff --git a/model/campaign/list_request.go b/model/campaign/list_request.go new file mode 100644 index 0000000..5fae8d5 --- /dev/null +++ b/model/campaign/list_request.go @@ -0,0 +1,40 @@ +package campaign + +import "encoding/json" + +// ListRequest 获取广告计划信息 API Request +type ListRequest struct { + // AdvertiserID 广告主ID + AdvertiserID int64 `json:"advertiser_id,omitempty"` + // CampaignID 广告计划ID; 过滤筛选条件,若不传或传空则视为无限制条件 + CampaignID int64 `json:"campaign_id,omitempty"` + // UnitID 广告组ID; 过滤筛选条件,若不传或传空则视为无限制条件 + UnitID int64 `json:"unit_id,omitempty"` + // UnitName 广告组名称 + UnitName string `json:"unit_name,omitempty"` + // UnitIDs 广告组ID集 + UnitIDs []int64 `json:"unit_ids,omitempty"` + // Status 广告组状态;过滤筛选条件;-2:所有包含已删除 10:只包含已删除 不传:所有不包含已删除 其他值无效 + Status int `json:"status,omitempty"` + // StartDate 开始时间;与end_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + StartDate string `json:"start_date,omitempty"` + // EndDate 结束时间; 与start_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + EndDate string `json:"end_date,omitempty"` + // TimeFilterType 按创建时间,还是更新时间进行筛选; 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 请求的页码数 默认为1 + Page int `json:"page,omitempty"` + // PageSize 请求的每页行数; 默认为20 + PageSize int `json:"page_size,omitempty"` +} + +// Url implement PostRequest interface +func (r ListRequest) Url() string { + return "v1/campaign/list" +} + +// Encode implement PostRequest interface +func (r ListRequest) Encode() []byte { + ret, _ := json.Marshal(r) + return ret +} diff --git a/model/campaign/list_response.go b/model/campaign/list_response.go new file mode 100644 index 0000000..7c89137 --- /dev/null +++ b/model/campaign/list_response.go @@ -0,0 +1,7 @@ +package campaign + +// ListResponse 获取广告计划信息 API Response +type ListResponse struct { + // CampaignSubType 计划子类型; 4:DPA,5:SDPA + CampaignSubType int `json:"campaign_sub_type,omitempty"` +} diff --git a/model/creative/advanced_program_creative.go b/model/creative/advanced_program_creative.go new file mode 100644 index 0000000..8c12a4f --- /dev/null +++ b/model/creative/advanced_program_creative.go @@ -0,0 +1,41 @@ +package creative + +// AdvancedProgramCreative 获取程序化创意2.0信息 +type AdvancedProgramCreative struct { + // UnitID 广告组ID + Unit int64 `json:"unit_id,omitempty"` + // PackageName 程序化创意包名称,1-100 字符, + PackageName string `json:"package_name,omitempty"` + // HorizontalPhotoIDs 横版视频 id list; 横版视频和竖版视频加起来只能 1-5 个 + HorizontalPhotoIDs []string `json:"horizontal_photo_ids,omitempty"` + // VerticalPhotoIDs 竖版视频 id list + VerticalPhotoIDs []string `json:"vertical_photo_ids,omitempty"` + // CoverImageTokens 封面 image_token;只能是 1-4 个 + CoverImageTokens []string `json:"cover_image_tokens,omitempty"` + // CoverImageUrls 封面链接地址 + CoverImageUrls []string `json:"cover_image_urls,omitempty"` + // SiteID 建站 id + SiteID int64 `json:"site_id,omitempty"` + // StickerStyles 封面贴纸 + StickerStyles []int `json:"sticker_styles,omitempty"` + // CoverSlogans 封面广告语 + CoverSlogans []string `json:"cover_slogans,omitempty"` + // ActionBar 行动号召按钮 + ActionBar string `json:"action_bar,omitempty"` + // Captions 作品广告语; 只能是 1-3 个 + Captions []string `json:"captions,omitempty"` + // ClickUrl 第三方点击检测链接 + ClickUrl string `json:"click_url,omitempty"` + // ActionbarClickUrl 第三方ActionBar点击监控链接 + ActionbarClickUrl string `json:"actionbar_click_url,omitempty"` + // PutStatus 程序化创意操作状态,1:投放,2:暂停,3:删除 + PutStatus int `json:"put_status,omitempty"` + // ViewStatus 程序化创意状态; -1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:组审核中,12:组审核未通过,14:已结束,15:组已暂停,17:组超预算,19:未达投放时间,40:创意已删除,41:审核中,42:审核未通过,46:已暂停,52:投放中,53:作品异常,55:部分素材审核通过 + ViewStatus int `json:"view_status,omitempty"` + // ViewStatusReason 程序化创意状态描述 + ViewStatusReason string `json:"view_status_reason,omitempty"` + // CreateTime 创建时间 + CreateTime string `json:"create_time,omitempty"` + // UpdateTime 最后修改时间 + UpdateTime string `json:"update_time,omitempty"` +} diff --git a/model/creative/advanced_program_list_request.go b/model/creative/advanced_program_list_request.go new file mode 100644 index 0000000..ac70998 --- /dev/null +++ b/model/creative/advanced_program_list_request.go @@ -0,0 +1,36 @@ +package creative + +import "encoding/json" + +// AdvancedProgramListRequest 获取程序化创意2.0信息 API Request +type AdvancedProgramListRequest struct { + // AdvertiserID 广告主ID + AdvertiserID int64 `json:"advertiser_id,omitempty"` + // UnitIDs 广告组ID;不超过一百个,当unit_ids参数不为空时,返回值total_count为0 + UnitIDs []int64 `json:"unit_ids,omitempty"` + // PackageName 程序化创意包名称; 非空,0到100字符 + PackageName string `json:"package_name,omitempty"` + // Status 程序化创意状态; -2:所有(包含已删除)、40:只包含已删除 不传:所有(不包含已删除) + Status int `json:"status,omitempty"` + // StartDate 开始时间;与end_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + StartDate string `json:"start_date,omitempty"` + // EndDate 结束时间; 与start_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + EndDate string `json:"end_date,omitempty"` + // TimeFilterType 按创建时间,还是更新时间进行筛选; 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 请求的页码数 默认为1 + Page int `json:"page,omitempty"` + // PageSize 请求的每页行数; 默认为20 + PageSize int `json:"page_size,omitempty"` +} + +// Url implement PostRequest interface +func (r AdvancedProgramListRequest) Url() string { + return "v2/creative/advanced/program/list" +} + +// Encode implement PostRequest interface +func (r AdvancedProgramListRequest) Encode() []byte { + ret, _ := json.Marshal(r) + return ret +} diff --git a/model/creative/advanced_program_list_response.go b/model/creative/advanced_program_list_response.go new file mode 100644 index 0000000..a844c67 --- /dev/null +++ b/model/creative/advanced_program_list_response.go @@ -0,0 +1,9 @@ +package creative + +// AdvancedProgramListResponse 获取程序化创意2.0信息 API Response +type AdvancedProgramListResponse struct { + // TotalCount 数据总数 + TotalCount int `json:"total_count,omitempty"` + // Details 返回值详情 + Details []AdvancedProgramCreative `json:"details,omitempty"` +} diff --git a/model/creative/advanced_program_review_detail.go b/model/creative/advanced_program_review_detail.go new file mode 100644 index 0000000..9b5ef7c --- /dev/null +++ b/model/creative/advanced_program_review_detail.go @@ -0,0 +1,11 @@ +package creative + +// AdvancedProgramReviewDetail 获取程序化创意2.0审核信息 +type AdvancedProgramReviewDetail struct { + // UnitID 当前的程序化创意的广告组id + UnitID int64 `json:"unit_id,omitempty"` + // Slogans 审核不通过的封面广告语 + Slogans []string `json:"slogans,omitempty"` + // CombineDetailViews 审核不通过和正在审核的创意组合 + CombineDetailViews []CombineDetailView `json:"combine_detail_views,omitempty"` +} diff --git a/model/creative/advanced_program_review_detail_request.go b/model/creative/advanced_program_review_detail_request.go new file mode 100644 index 0000000..01f6d90 --- /dev/null +++ b/model/creative/advanced_program_review_detail_request.go @@ -0,0 +1,29 @@ +package creative + +import ( + "encoding/json" + "net/url" + "strconv" +) + +// AdvancedProgramReviewDetailRequest 获取程序化创意2.0审核信息 +type AdvancedProgramReviewDetailRequest struct { + // AdvertiserID 广告主ID + AdvertiserID int64 `json:"advertiser_id,omitempty"` + // UnitIDs 广告组ID;数量小于等于20个 + UnitIDs []int64 `json:"unit_ids,omitempty"` +} + +// Url implement GetRequest interface +func (r AdvancedProgramReviewDetailRequest) Url() string { + return "v2/creative/advanced/program/review_detail" +} + +// Encode implement GetRequest interface +func (r AdvancedProgramReviewDetailRequest) Encode() string { + values := &url.Values{} + values.Set("advertiser_id", strconv.FormatInt(r.AdvertiserID, 10)) + unitIds, _ := json.Marshal(r.UnitIDs) + values.Set("unit_ids", string(unitIds)) + return values.Encode() +} diff --git a/model/creative/combine_detail_reviews.go b/model/creative/combine_detail_reviews.go new file mode 100644 index 0000000..bceccb3 --- /dev/null +++ b/model/creative/combine_detail_reviews.go @@ -0,0 +1,19 @@ +package creative + +// CombineDetailView 审核不通过和正在审核的创意组合 +type CombineDetailView struct { + // ID 创意id + ID int64 `json:"id,omitempty"` + // PhotoID 视频id; 已加密 + PhotoID int64 `json:"photo_id,omitempty"` + // CoverUrl 封面url + CoverUrl string `json:"cover_url,omitempty"` + // Caption 作品广告语 + Caption string `json:"caption,omitempty"` + // ReviewStatus 审核状态;1:审核中2:审核通过3:不通过 + ReviewStatus int `json:"review_status,omitempty"` + // ReviewDetail 审核信息;里面是一个String类型数据,是审核信息 + ReviewDetail []string `json:"review_detail,omitempty"` + // PutStatus 程序化创意审核状态; 程序化创意操作状态,1:投放,2:暂停,3:删除 + PutStatus int `json:"put_status,omitempty"` +} diff --git a/model/creative/creative.go b/model/creative/creative.go new file mode 100644 index 0000000..8eef0be --- /dev/null +++ b/model/creative/creative.go @@ -0,0 +1,73 @@ +package creative + +// Creative 广告创意 +type Creative struct { + // CampaignID 广告计划ID + CampaignID int64 `json:"campaign_id,omitempty"` + // UnitID 广告组ID + Unit int64 `json:"unit_id,omitempty"` + // CreativeID 广告创意ID + CreativeID int64 `json:"creative_id,omitempty"` + // CreativeName 广告创意名称 + CreativeName string `json:"creative_name,omitempty"` + // CreativeMaterialType 素材类型; 0:历史创意未作区分 1:竖版视频2:横版视频3:后贴片单图图片创意(历史类型,已下线)4:便利贴单图图片创意 + CreativeMaterialType int `json:"creative_material_type,omitempty"` + // PhotoID 视频作品ID + PhotoID string `json:"photo_id,omitempty"` + // MaterialUrl 单图创意url + MaterialUrl []string `json:"material_url,omitempty"` + // ImageTokens 单图创意image_token + ImageTokens []string `json:"image_tokens,omitempty"` + // Status 广告创意状态(优先先看这个状态,计算结果);-1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:组审核中,12:组审核未通过,14:已结束,15:组已暂停,17:组超预算,19:未达投放时间,40:已删除,41:审核中,42:审核未通过,46:已暂停,52:投放中,53:作品异常,54:视频审核通过可投放滑滑场景,55:部分素材审核失败 + Status int `json:"status,omitempty"` + // PutStatus 投放状态(操作结果);1:投放中;2:暂停 3:删除 + PutStatus int `json:"put_status,omitempty"` + // CreateChannel 创建渠道; 0:投放后台创建;1:Marketing API创建 + CreateChannel int `json:"create_channel,omitempty"` + // ReviewDetail 审核拒绝理由; + ReviewDetail string `json:"review_detail,omitempty"` + // RejectVideoSnapshot 审核拒绝图片 + RejectVideoSnapshot []string `json:"reject_video_snapshot,omitempty"` + // CoverUrl 封面URL + CoverUrl string `json:"cover_url,omitempty"` + // ImageToken 视频封面token; 若创意使用系统自动生成的首帧图片作为封面,该token无法复用 + ImageToken string `json:"image_token,omitempty"` + // FirstFrameType 视频封面来源; 1:首帧,0:非首帧 + FirstFrameType int `json:"first_frame_type,omitempty"` + // CoverWidth 封面图宽度 + CoverWidth int64 `json:"cover_width,omitempty"` + // CoverHeight 封面图高度 + CoverHeight int64 `json:"cover_height,omitempty"` + // OverlayBgUrl 动态词包原始封面图片URL + OverlayBgUrl string `json:"overlay_bg_url,omitempty"` + // OverlayBgImageToken 动态词包原始封面图片token + OverlayBgImageToken string `json:"overlay_bg_image_token,omitempty"` + // StickerTitle 封面广告语标题 + StickerTitle string `json:"sticker_title,omitempty"` + // OverlayType 贴纸样式类型 + OverlayType string `json:"overlay_type,omitempty"` + // DisplayInfo 广告展示信息 + DisplayInfo *DisplayInfo `json:"display_info,omitempty"` + // ShortSlogan 便利贴创意短广告语 + ShortSlogan string `json:"short_slogan,omitempty"` + // ExposeTag 广告标签 + ExposeTag string `json:"expose_tag,omitempty"` + // NewExposeTag 广告标签2期 + NewExposeTag []string `json:"new_expose_tag,omitempty"` + // SiteID 安卓下载中间页ID + SiteID int64 `json:"site_id,omitempty"` + // ClickTrackUrl 点击监测链接; 若出现与后台显示不一致,以文档为准即可 + ClickTrackUrl string `json:"click_track_url,omitempty"` + // ImpressionUrl 第三方开始播放监测链接; 若出现与后台显示不一致,以文档为准即可 + ImpressionUrl string `json:"impression_url,omitempty"` + // AdPhotoPlayedT3sUrl 第三方有效播放监测链接; 仅历史个别账户使用 + AdPhotoPlayedT3sUrl string `json:"ad_photo_played_t3s_url,omitempty"` + // ProgrammedCreativeMaterial 程序化创意物料 + ProgrammedCreativeMaterial *ProgrammedCreativeMaterial `json:"programmed_creative_material,omitempty"` + // CreativeStatusType 否为僵尸创意; 1:僵尸 0:非僵尸 + CreativeStatusType int `json:"creative_status_type,omitempty"` + // CreateTime 创建时间 + CreateTime string `json:"create_time,omitempty"` + // UpdateTime 最后修改时间 + UpdateTime string `json:"update_time,omitempty"` +} diff --git a/model/creative/display_info.go b/model/creative/display_info.go new file mode 100644 index 0000000..33c572c --- /dev/null +++ b/model/creative/display_info.go @@ -0,0 +1,9 @@ +package creative + +// DisplayInfo 广告展示信息 +type DisplayInfo struct { + // Description 广告语 + Description string `json:"description,omitempty"` + // ActionBarText 行动号召按钮文案 + ActionBarText string `json:"action_bar_text,omitempty"` +} diff --git a/model/creative/doc.go b/model/creative/doc.go new file mode 100644 index 0000000..36c26b8 --- /dev/null +++ b/model/creative/doc.go @@ -0,0 +1,2 @@ +// Package creative广告创意相关API models +package creative diff --git a/model/creative/list_request.go b/model/creative/list_request.go new file mode 100644 index 0000000..1b98fe0 --- /dev/null +++ b/model/creative/list_request.go @@ -0,0 +1,44 @@ +package creative + +import "encoding/json" + +// ListRequest 获取广告创意信息 API Request +type ListRequest struct { + // AdvertiserID 广告主ID + AdvertiserID int64 `json:"advertiser_id,omitempty"` + // CampaignID 广告计划ID; 过滤筛选条件,若不传或传空则视为无限制条件 + CampaignID int64 `json:"campaign_id,omitempty"` + // UnitID 广告组ID; 过滤筛选条件,若不传或传空则视为无限制条件 + UnitID int64 `json:"unit_id,omitempty"` + // CreativeID 广告创意ID; 过滤筛选条件,若不传或传空则视为无限制条件 + CreativeID string `json:"creative_id,omitempty"` + // CreativeName 广告创意名称 + CreativeName string `json:"creative_name,omitempty"` + // CreativeIDs 广告创意ID集 + CreativeIDs []int64 `json:"creative_ids,omitempty"` + // Status 广告创意状态; 过滤筛选条件;-1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:组审核中,12:组审核未通过,14:已结束,15:组已暂停,17:组超预算,19:未达投放时间,22:不在投放时段。41:审核中,42:审核未通过,46:已暂停,52:投放中,53:作品异常 -2:所有包含已删除 40:只包含已删除不传:所有不包含已删除 其他值无效 + Status int `json:"status,omitempty"` + // StartDate 开始时间;与end_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + StartDate string `json:"start_date,omitempty"` + // EndDate 结束时间; 与start_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + EndDate string `json:"end_date,omitempty"` + // TimeFilterType 按创建时间,还是更新时间进行筛选; 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 请求的页码数 默认为1 + Page int `json:"page,omitempty"` + // PageSize 请求的每页行数; 默认为20 + PageSize int `json:"page_size,omitempty"` + // ActionbarClickUrl 第三方点击按钮监测链接 + ActionbarClickUrl string `json:"actionbar_click_url,omitempty"` +} + +// Url implement PostRequest interface +func (r ListRequest) Url() string { + return "v1/creative/list" +} + +// Encode implement PostRequest interface +func (r ListRequest) Encode() []byte { + ret, _ := json.Marshal(r) + return ret +} diff --git a/model/creative/list_response.go b/model/creative/list_response.go new file mode 100644 index 0000000..baa7e38 --- /dev/null +++ b/model/creative/list_response.go @@ -0,0 +1,9 @@ +package creative + +// ListResponse 获取广告创意信息 API Response +type ListResponse struct { + // TotalCount 数据总数 + TotalCount int `json:"total_count,omitempty"` + // Details 返回值详情 + Details []Creative `json:"details,omitempty"` +} diff --git a/model/creative/material.go b/model/creative/material.go new file mode 100644 index 0000000..1587603 --- /dev/null +++ b/model/creative/material.go @@ -0,0 +1,13 @@ +package creative + +// Material 物料信息 +type Material struct { + // PhotoID 视频ID + PhotoID string `json:"photo_id,omitempty"` + // ImageTokens 封面图片token + ImageTokens []string `json:"image_tokens,omitempty"` + // CreativeMaterialType 素材类型 + CreativeMaterialType int `json:"creative_material_type,omitempty"` + // StickerTitles 封面广告语 + StickerTitles []string `json:"sticker_titles,omitempty"` +} diff --git a/model/creative/programmed_creative_material.go b/model/creative/programmed_creative_material.go new file mode 100644 index 0000000..c226a19 --- /dev/null +++ b/model/creative/programmed_creative_material.go @@ -0,0 +1,13 @@ +package creative + +// ProgrammedCreativeMaterial 程序化创意物料 +type ProgrammedCreativeMaterial struct { + // Materials 物料信息 + Materials []Material `json:"materials,omitempty"` + // StickerStyleIDs 封面贴纸类型ID + StickerStyleIDs []int `json:"sticker_style_ids,omitempty"` + // DescriptionTItles 广告语 + DescriptionTItles []string `json:"description_titles,omitempty"` + // StickerTitles 封面广告语 + StickerTitles []string `json:"sticker_titles,omitempty"` +} diff --git a/model/tool/audienc_predict_request.go b/model/tool/audienc_predict_request.go new file mode 100644 index 0000000..910ec93 --- /dev/null +++ b/model/tool/audienc_predict_request.go @@ -0,0 +1,54 @@ +package tool + +import "encoding/json" + +// AudiencePredictRequest 定向人群预估查询 API Request +type AudiencePredictRequest struct { + // AdvertiserID 广告主ID + AdvertiserID int64 `json:"advertiser_id,omitempty"` + // Region 地域 + Region []int64 `json:"region,omitempty"` + // AgesRange 固定年龄段; 18:表示18-23岁】【24:表示24-30岁】【31:表示31-40岁】【41:表示41-49岁】【50:表示50-100岁】 + AgesRange []int `json:"ages_range,omitempty"` + // Gender 性别; 1:女性, 2:男性,0表示不限 + Gender int `json:"gender,omitempty"` + // PlatformOs 操作系统; 1:Android,2:iOS,0表示不限 + PlatformOs int `json:"platform_os,omitempty"` + // AndroidOsv Android版本; 3:不限,4:4.x+,5:5.x+,6:6.x+,7:7.x+,8:8.x+,9:9.x+,10:10.x+ + AndroidOsv int `json:"android_osv,omitempty"` + // IosOsv iOS版本; 6:不限,7:7.x+,8:8.x+,9:9.x+,10:10.x+; + IosOsv int `json:"ios_osv,omitempty"` + // Network 网络环境; 1:Wi-Fi,2:移动网络,0:表示不限 + Network int `json:"network,omitempty"` + // DeviceBrand 设备品牌; 1:OPPO,2:VIVO,3:华为,4:小米,5:荣耀,6:三星,7:金立,8:魅族,9:乐视,10:其他,11:苹果 + DeviceBrand []int `json:"device_brand,omitempty"` + // DevicePrice 设备价格; 1:1500元以下,2:1501~2000,3:2001~2500,4:2501~3000,5:3001~3500,6:3501~4000,7:4001~4500,8:4501~5000,9: 5001~5500,10:5500元以上 + DevicePrice []int `json:"device_price,omitempty"` + // BusinessInterestType 商业兴趣类型; 0:不限,1:智能推荐,2:按照兴趣标签; + BusinessInterestType int `json:"business_interest_type,omitempty"` + // BusinessInterest 商业兴趣 + BusinessInterest []int64 `json:"business_interest,omitempty"` + // FansStar 网红粉丝 + FansStar []int64 `json:"fans_star,omitempty"` + // InterestVideo 兴趣视频用户 + InterestVideo []int64 `json:"interest_video,omitempty"` + // AppInterest APP行为-按分类 + AppInterest []int64 `json:"app_interest,omitempty"` + // AppIDs APP行为-按APP名称 + AppIDs []int64 `json:"app_ids,omitempty"` + // Population 人群包定向 + Population []int64 `json:"population,omitempty"` + // ExcludePopulation 人群包排除 + ExcludePopulation []int64 `json:"exclude_population,omitempty"` +} + +// Url implement PostRequest interface +func (r AudiencePredictRequest) Url() string { + return "v1/tool/audience/prediction" +} + +// Encode implement PostRequest interface +func (r AudiencePredictRequest) Encode() []byte { + ret, _ := json.Marshal(r) + return ret +} diff --git a/model/tool/audience_predict_response.go b/model/tool/audience_predict_response.go new file mode 100644 index 0000000..b195fed --- /dev/null +++ b/model/tool/audience_predict_response.go @@ -0,0 +1,7 @@ +package tool + +// AudiencePredictResponse 定向人群预估查询 API Response +type AudiencePredictResponse struct { + // AudiencePredictNum 人群预估数量 + AudiencePredictNum int64 `json:"audience_prediction_num,omitempty"` +} diff --git a/model/tool/content_log.go b/model/tool/content_log.go new file mode 100644 index 0000000..6d323b7 --- /dev/null +++ b/model/tool/content_log.go @@ -0,0 +1,11 @@ +package tool + +// ContentLog 日志内容 +type ContentLog struct { + // FieldName 字段名称 + FieldName string `json:"field_name,omitempty"` + // OriginalData 原始数据 + OriginalData string `json:"original_data,omitempty"` + // UpdateData 修改数据 + UpdateData string `json:"update_data,omitempty"` +} diff --git a/model/tool/doc.go b/model/tool/doc.go new file mode 100644 index 0000000..8bdf881 --- /dev/null +++ b/model/tool/doc.go @@ -0,0 +1,2 @@ +// Package tool 工具类models +package tool diff --git a/model/tool/operation_record.go b/model/tool/operation_record.go new file mode 100644 index 0000000..805cde1 --- /dev/null +++ b/model/tool/operation_record.go @@ -0,0 +1,19 @@ +package tool + +// OperationRecord 账户操作记录 +type OperationRecord struct { + // ObjectID 操作对象ID + ObjectID string `json:"object_id,omitempty"` + // OperationType 操作类型; 1:新增 2:修改 + OperationType int `json:"operation_type,omitempty"` + // OperationTarget 操作目标类型; 1:账户2:计划3:广告组4:创意5:视频6:应用7:人群包 + OperationTarget int `json:"operation_target,omitempty"` + // RoleType 操作人; 1:广告主2:代理商3:系统4:管理员5:Market Api + RoleType int `json:"role_type,omitempty"` + // ObjectName 操作对象名称 + ObjectName string `json:"object_name,omitempty"` + // OperationTime 操作时间 + OperationTime string `json:"operation_time,omitempty"` + // ContentLog 日志内容 + ContentLog []ContentLog `json:"content_log,omitempty"` +} diff --git a/model/tool/operation_record_list_request.go b/model/tool/operation_record_list_request.go new file mode 100644 index 0000000..2e3b8d0 --- /dev/null +++ b/model/tool/operation_record_list_request.go @@ -0,0 +1,34 @@ +package tool + +import "encoding/json" + +// OperationRecordListRequest 账户操作记录信息查询 API Request +type OperationRecordListRequest struct { + // AdvertiserID 广告主ID + AdvertiserID int64 `json:"advertiser_id,omitempty"` + // OperationType 操作类型; 1:新增2:修改删除(可通过content_log: "update_data": "删除"查看) + OperationType int `json:"operation_type,omitempty"` + // OperationTarget 操作目标类型; 目前只支持:1:账户2:计划3:广告组4:创意5:视频6:app应用7:人群包 + OperationTarget int `json:"operation_target,omitempty"` + // RoleType 操作人; 1:广告主2:代理商3:系统4:管理员5:Market Api + RoleType int `json:"role_type,omitempty"` + // Page 页码数; 默认为1 + Page int `json:"page,omitempty"` + // PageSize 单页行数; 默认为20,不超过500 + PageSize int `json:"page_size,omitempty"` + // StartDate 开始时间; 最多查询最近6个月的操作记录 + StartDate string `json:"start_date,omitempty"` + // EndDate 结束时间 + EndDate string `json:"end_date,omitempty"` +} + +// Url implement PostRequest interface +func (r OperationRecordListRequest) Url() string { + return "v1/tool/operation_record/list" +} + +// Encode implement PostRequest interface +func (r OperationRecordListRequest) Encode() []byte { + ret, _ := json.Marshal(r) + return ret +} diff --git a/model/tool/operation_record_list_response.go b/model/tool/operation_record_list_response.go new file mode 100644 index 0000000..d78c8b5 --- /dev/null +++ b/model/tool/operation_record_list_response.go @@ -0,0 +1,9 @@ +package tool + +// OperationRecordListResponse 账户操作记录信息查询 +type OperationRecordListResponse struct { + // TotalCount 总数 + TotalCount int64 `json:"total_count,omitempty"` + // Details 操作记录 + Details []OperationRecord `json:"details,omitempty"` +} diff --git a/model/unit/adv_card.go b/model/unit/adv_card.go new file mode 100644 index 0000000..57abe62 --- /dev/null +++ b/model/unit/adv_card.go @@ -0,0 +1,19 @@ +package unit + +// AdvCard 高级创意 +type AdvCard struct { + // ID 卡片id + ID int64 `json:"adv_card_id,omitempty"` + // CardType 卡片类型; 100:图片卡片 101:多利益卡-图文 102:多利益卡-多标签 103:电商促销样式 + CardType int `json:"card_type,omitempty"` + // Url 图片url + Url string `json:"url,omitempty"` + // Title 标题 + Title string `json:"title,omitempty"` + // SubTitle 副标题 + SubTitle string `json:"sub_title,omitempty"` + // Price 原价格(单位:分) + Price int64 `json:"price,omitempty"` + // SalePrice 售卖价(单位:分) + SalePrice int64 `json:"sale_price,omitempty"` +} diff --git a/model/unit/age.go b/model/unit/age.go new file mode 100644 index 0000000..5e56f6e --- /dev/null +++ b/model/unit/age.go @@ -0,0 +1,9 @@ +package unit + +// Age 自定义年龄段 +type Age struct { + // Min 年龄最小限制 + Min int `json:"min,omitempty"` + // Max 年龄最大限制 + Max int `json:"max,omitempty"` +} diff --git a/model/unit/backflow_forecast.go b/model/unit/backflow_forecast.go new file mode 100644 index 0000000..edeb644 --- /dev/null +++ b/model/unit/backflow_forecast.go @@ -0,0 +1,10 @@ +package unit + +type BackflowForecast struct { + // CvLower 回流预估值的下限 + CvLower int64 `json:"backflow_cv_lower,omitempty"` + // CvUpper 回流预估值的上限 + CvUpper int64 `json:"backflow_cv_upper,omitempty"` + // Timestamp 本次回流预估数据的时间戳,13位毫秒时间戳 + Timestamp int64 `json:"backflow_timestamp,omitempty"` +} diff --git a/model/unit/behavior_interest.go b/model/unit/behavior_interest.go new file mode 100644 index 0000000..c958b52 --- /dev/null +++ b/model/unit/behavior_interest.go @@ -0,0 +1,15 @@ +package unit + +// BehaviorInterest 行为兴趣定向 +type BehaviorInterest struct { + // Keyword 行为定向关键词 + Keyword []Keyword `json:"keyword,omitempty"` + // Label 行为定向,类目词 + Label []string `json:"label,omitempty"` + // TimeType 在多少天内发生行为的用户; 0:7天 1:15天 2:30天 3:90天4:180天 + TimeType int `json:"time_type,omitempty"` + // StrengthType 行为强度; 0:不限 1:高强度 + StrengthType int `json:"strength_type,omitempty"` + // SceneType 行为场景; 1:社区 2:APP 4:推广 + SceneType int `json:"scene_type,omitempty"` +} diff --git a/model/unit/diverse_data.go b/model/unit/diverse_data.go new file mode 100644 index 0000000..3f5bb30 --- /dev/null +++ b/model/unit/diverse_data.go @@ -0,0 +1,11 @@ +package unit + +// DiverseData 应用信息 +type DiverseData struct { + // AppName 应用名称 + AppName string `json:"app_name,omitempty"` + // AppPackageName 应用包名 + AppPackageName string `json:"app_package_name,omitempty"` + // DeviceOsType 应用操作系统类型; 0:未知,1:ANDROID,2:IO + DeviceOsType int `json:"device_os_type,omitempty"` +} diff --git a/model/unit/doc.go b/model/unit/doc.go new file mode 100644 index 0000000..bf8c9fb --- /dev/null +++ b/model/unit/doc.go @@ -0,0 +1,2 @@ +// Package unit 广告组相关API models +package unit diff --git a/model/unit/gift_data.go b/model/unit/gift_data.go new file mode 100644 index 0000000..06c017d --- /dev/null +++ b/model/unit/gift_data.go @@ -0,0 +1,9 @@ +package unit + +// GiftData 游戏礼包码 +type GiftData struct { + // TargetActionType 发送时机; android:30: 开始下载后 31:下载完成后 32:安装完成后 ios:2:检测到用户行为 + TargetActionType int `json:"target_action_type,omitempty"` + // Code 礼包码; 最多20字符,只能字母+数字 + Code string `json:"code,omitempty"` +} diff --git a/model/unit/intelli_extend.go b/model/unit/intelli_extend.go new file mode 100644 index 0000000..b7c103e --- /dev/null +++ b/model/unit/intelli_extend.go @@ -0,0 +1,13 @@ +package unit + +// IntelliExtend 智能扩量 +type IntelliExtend struct { + // IsOpen 开启智能扩量;0:关闭智能扩量,1:打开智能扩量 + IsOpen int `json:"is_open"` + // NoAgeBreak 不可突破年龄;0:可突破/无需控制,1:不可突破 + NoAgeBreak int `json:"no_age_break"` + // NoGenderBreak 不可突破性别;0:可突破/无需控制,1:不可突破 + NoGenderBreak int `json:"no_gender_break"` + // NoAreaBreak 不可突破地域; 0:可突破/无需控制,1:不可突破 + NoAreaBreak int `json:"no_area_break"` +} diff --git a/model/unit/keyword.go b/model/unit/keyword.go new file mode 100644 index 0000000..f7b5cd5 --- /dev/null +++ b/model/unit/keyword.go @@ -0,0 +1,9 @@ +package unit + +// Keyword 行为定向关键词 +type Keyword struct { + // ID 关键词id + ID int64 `json:"id,omitempty"` + // Name 关键词名称 + Name string `json:"name,omitempty"` +} diff --git a/model/unit/list_request.go b/model/unit/list_request.go new file mode 100644 index 0000000..c4e882e --- /dev/null +++ b/model/unit/list_request.go @@ -0,0 +1,44 @@ +package unit + +import "encoding/json" + +// ListRequest 获取广告组信息 API Request +type ListRequest struct { + // AdvertiserID 广告主ID + AdvertiserID int64 `json:"advertiser_id,omitempty"` + // CampaignID 广告计划ID; 过滤筛选条件,若不传或传空则视为无限制条件 + CampaignID int64 `json:"campaign_id,omitempty"` + // CampaignType 广告计划类型;过滤筛选条件;2 - 提升应用安装;3 - 获取电商下单;4 - 推广品牌活动;5 - 收集销售线索; + CampaignType int `json:"campaign_type,omitempty"` + // UnitID 广告组ID; 过滤筛选条件,若不传或传空则视为无限制条件 + UnitID int64 `json:"unit_id,omitempty"` + // UnitName 广告组名称 + UnitName string `json:"unit_name,omitempty"` + // UnitIDs 广告组ID集 + UnitIDs []int64 `json:"unit_ids,omitempty"` + // Status 广告组状态;过滤筛选条件;-1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:审核中,12:审核未通过,14:已结束,15:已暂停,17:组超预算,19:未达投放时间,20:有效-2,22:不在投放时段。所有包含已删除10:只包含已删除不传:所有不包含已删除 其他值无效 + Status int `json:"status,omitempty"` + // AppName 应用名称; 过滤筛选条件,支持模糊搜索 + AppName string `json:"app_name,omitempty"` + // StartDate 开始时间;与end_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + StartDate string `json:"start_date,omitempty"` + // EndDate 结束时间; 与start_date同时传或同时不传;过滤筛选条件,格式为"yyyy-MM-dd",参数值对应update_time信息 + EndDate string `json:"end_date,omitempty"` + // TimeFilterType 按创建时间,还是更新时间进行筛选; 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 请求的页码数 默认为1 + Page int `json:"page,omitempty"` + // PageSize 请求的每页行数; 默认为20 + PageSize int `json:"page_size,omitempty"` +} + +// Url implement PostRequest interface +func (r ListRequest) Url() string { + return "v1/ad_unit/list" +} + +// Encode implement PostRequest interface +func (r ListRequest) Encode() []byte { + ret, _ := json.Marshal(r) + return ret +} diff --git a/model/unit/list_response.go b/model/unit/list_response.go new file mode 100644 index 0000000..225e650 --- /dev/null +++ b/model/unit/list_response.go @@ -0,0 +1,9 @@ +package unit + +// ListResponse 获取广告组信息 API Response +type ListResponse struct { + // TotalCount 数据总数 + TotalCount int `json:"total_count,omitempty"` + // Details 返回值详情 + Details []Unit `json:"details,omitempty"` +} diff --git a/model/unit/schedule.go b/model/unit/schedule.go new file mode 100644 index 0000000..3634669 --- /dev/null +++ b/model/unit/schedule.go @@ -0,0 +1,19 @@ +package unit + +// Schedule 投放时段 不投放的时段为null,详请见下方,历史字段,即将废弃 +type Schedule struct { + // Mon 周一时间段; 时间段范围0, 23 + Mon []int `json:"mon,omitempty"` + // Tues 周二时间段; 时间段范围0, 23 + Tues []int `json:"tues,omitempty"` + // Wed 周三时间段; 时间段范围0, 23 + Wed []int `json:"wed,omitempty"` + // Thur 周四时间段; 时间段范围0, 23 + Thur []int `json:"thur,omitempty"` + // Fri 周五时间段; 时间段范围0, 23 + Fir []int `json:"fir,omitempty"` + // Sat 周六时间段; 时间段范围0, 23 + Sat []int `json:"sat,omitempty"` + // Sun 周日时间段; 时间段范围0, 23 + Sun []int `json:"sun,omitempty"` +} diff --git a/model/unit/target.go b/model/unit/target.go new file mode 100644 index 0000000..11476dc --- /dev/null +++ b/model/unit/target.go @@ -0,0 +1,57 @@ +package unit + +// Target 定向数据 +type Target struct { + // Region 地域 + Region []int64 `json:"region,omitempty"` + // DistrictIDs 商圈定向 + DistrictIDs []int64 `json:"district_ids,omitempty"` + // Age 自定义年龄段 + Age *Age `json:"age,omitempty"` + // AgesRange 固定年龄段; 18:表示18-23岁】【24:表示24-30岁】【31:表示31-40岁】【41:表示41-49岁】【50:表示50-100岁】 + AgesRange []int `json:"ages_range,omitempty"` + // Gender 性别; 1:女性, 2:男性,0表示不限 + Gender int `json:"gender,omitempty"` + // PlatformOs 操作系统; 1:Android,2:iOS,0表示不限 + PlatformOs int `json:"platform_os,omitempty"` + // AndroidOsv Android版本; 3:不限,4:4.x+,5:5.x+,6:6.x+,7:7.x+,8:8.x+,9:9.x+,10:10.x+ + AndroidOsv int `json:"android_osv,omitempty"` + // IosOsv iOS版本; 6:不限,7:7.x+,8:8.x+,9:9.x+,10:10.x+; + IosOsv int `json:"ios_osv,omitempty"` + // Network 网络环境; 1:Wi-Fi,2:移动网络,0:表示不限 + Network int `json:"network,omitempty"` + // DeviceBrand 设备品牌; 1:OPPO,2:VIVO,3:华为,4:小米,5:荣耀,6:三星,7:金立,8:魅族,9:乐视,10:其他,11:苹果 + DeviceBrand []int `json:"device_brand,omitempty"` + // DevicePrice 设备价格; 1:1500元以下,2:1501~2000,3:2001~2500,4:2501~3000,5:3001~3500,6:3501~4000,7:4001~4500,8:4501~5000,9: 5001~5500,10:5500元以上 + DevicePrice []int `json:"device_price,omitempty"` + // BusinessInterestType 商业兴趣类型; 0:不限,1:智能推荐,2:按照兴趣标签; + BusinessInterestType int `json:"business_interest_type,omitempty"` + // BusinessInterest 商业兴趣 + BusinessInterest []int64 `json:"business_interest,omitempty"` + // FansStar 网红粉丝 + FansStar []int64 `json:"fans_star,omitempty"` + // InterestVideo 兴趣视频用户 + InterestVideo []int64 `json:"interest_video,omitempty"` + // AppInterest APP行为-按分类 + AppInterest []int64 `json:"app_interest,omitempty"` + // AppIDs APP行为-按APP名称 + AppIDs []int64 `json:"app_ids,omitempty"` + // AppNames app名称; 和app_ids对应,是app_id对应的名称 + AppNames []string `json:"app_name,omitempty"` + // FilterConvertedLevel 过滤已转化人群纬度; 0(默认):不限1:广告组2:广告计划3:本账户4:公司主体5:APP + FilterConvertedLevel int `json:"filter_converted_level,omitempty"` + // Population 人群包定向 + Population []int64 `json:"population,omitempty"` + // ExcludePopulation 人群包排除 + ExcludePopulation []int64 `json:"exclude_population,omitempty"` + // Media 媒体定向包 + Media []int64 `json:"media,omitempty"` + // ExcludeMedia 媒体定向排除包; media和exclude_media只可选其一 + ExcludeMedia []int64 `json:"exclude_media,omitempty"` + // MediaSourceType 媒体包来源; 默认为0,0-不限,未指定,1-行业优质流量包,2-广告主自定义 + MediaSourceType int `json:"media_source_type,omitempty"` + // IntelliExtend 智能扩量 + IntelliExtend *IntelliExtend `json:"intelli_extend,omitempty"` + // BehaviorInterest 行为兴趣定向 + BehaviorInterest *BehaviorInterest `json:"behavior_interest,omitempty"` +} diff --git a/model/unit/unit.go b/model/unit/unit.go new file mode 100644 index 0000000..922a2e7 --- /dev/null +++ b/model/unit/unit.go @@ -0,0 +1,135 @@ +package unit + +// Unit 广告组 +type Unit struct { + // CampaignID 广告计划ID + CampaignID int64 `json:"campaign_id,omitempty"` + // UnitID 广告组ID + Unit int64 `json:"unit_id,omitempty"` + // UnitName 广告组名称 + UnitName string `json:"unit_name,omitempty"` + // Status 广告组状态(优先看看这个状态,计算结果); -1:不限,1:计划已暂停,3:计划超预算,6:余额不足,,11:审核中,12:审核未通过,14:已结束,15:已暂停,17:组超预算,19:未达投放时间,20:有效 + Status int `json:"status,omitempty"` + // PutStatus 投放状态(操作结果);1:投放中;2:暂停 3:删除 + PutStatus int `json:"put_status,omitempty"` + // CreateChannel 创建渠道; 0:投放后台创建;1:Marketing API创建 + CreateChannel int `json:"create_channel,omitempty"` + // ReviewDetail 审核拒绝理由; + ReviewDetail string `json:"review_detail,omitempty"` + // StudyStatus 学习期;1:学习中,2:学习成功,3:学习失败 + StudyStatus int `json:"study_status,omitempty"` + // CompensateStatus 赔付状态; 0=不需要赔付(不需要展示赔付标志),1=成本保障生效中,2=成本保证确认中,3=已赔付完成,4=已失效 + CompensateStatus int `json:"compensate_status,omitempty"` + // BidType 出价类型; 1:CPM,2:CPC,6:OCPC(使用OCPC代表OCPX),10:OCPM,20:eCPC + BidType int `json:"bid_type,omitempty"` + // Bid 出价; 单位:厘 + Bid int64 `json:"bid,omitempty"` + // CpaBid OCPC出价; 单位:厘 + CpaBid int64 `json:"cpa_bid,omitempty"` + // SmartBid 优先低成本是否自动出价; 0:手动出价,1:自动出价 + SmartBid int `json:"smart_bid,omitempty"` + // OcpxActionType 优化目标; 0:未知,2:点击转化链接,10:曝光,11:点击,31:下载完成,53:提交线索,180:激活,190: 付费,191:首日ROI,348:有效线索,383: 授信,384: 完件 715:微信复制 + OcpxActionType int `json:"ocpx_action_type"` + // DeepConversionType 深度转化目标; 3: 付费,7: 次日留存,10: 完件, 11: 授信 ,0:无 + DeepConversionType int `json:"deep_conversion_type,omitempty"` + // DeepConversionBid 深度转化目标出价; 白名单功能,单位:厘 + DeepConversionBid int64 `json:"deep_conversion_bid,omitempty"` + // DayBudget 单日预算; 单位:厘 + DayBudget int64 `json:"day_budget,omitempty"` + // DayBudgetSchedule 分日预算; 单位:厘,单日预算和分日预算同时存在时,以分日预算为准 + DayBudgetSchedule []int64 `json:"day_budget_schedule,omitempty"` + // RoiRatio 付费ROI系数; 优化目标为「首日ROI」时必填:ROI系数取值范围 ( 0,100 ] 最多支持到三位小数(如:0.066) + RoiRatio float64 `json:"roi_ratio,omitempty"` + // Speed 投放方式; 0:未知,1:正常投放,2:平滑投放,3:优先低成本。 + Speed int `json:"speed,omitempty"` + // BeginTime 投放开始时间; 格式:yyyy-MM-dd + BeginTime string `json:"begin_time,omitempty"` + // EndTime 投放结束时间; 格式:yyyy-MM-dd,排期不限为null + EndTime string `json:"end_time,omitempty"` + // Schedule 投放时段 + Schedule *Schedule `json:"schedule,omitempty"` // 不投放的时段为null,详请见下方,历史字段,即将废弃 + // ScheduleTime 投放时段; 24*7的字符串,0为不投放,1为投放,例如:0010000000001....0000 + ScheduleTime string `json:"schedule_time,omitempty"` + // SceneID 广告位; 1:优选广告位;2:按场景选择广告位-信息流广告(旧广告位,包含上下滑大屏广告);3:视频播放页广告-便利贴广告;6:上下滑大屏广告;7:信息流广告(不包含上下滑大屏广告)10:激励视频;11:快看点场景 + SceneID []int `json:"scene_id,omitempty"` + // ShowMode 创意展现方式; 0:未知,1:轮播,2:优选 + ShowMode int `json:"show_mode,omitempty"` + // UnitType 创意制作方式; 4: 自定义;5:程序化创意 7:程序化创意2.0 + UnitType int `json:"unit_type,omitempty"` + // ConvertID 转化目标 + ConvertID int `json:"convert_id,omitempty"` + // UseAppMarket 优先从系统应用商店下载; 0:未设置 1:优先从系统应用商店下载使用 + UseAppMarket int `json:"use_app_market,omitempty"` + // AppStore 应用商店列表 + AppStore []string `json:"app_store,omitempty"` + // UrlType url类型; 当计划类型为3时(获取电商下单)时有返回。1:淘宝商品短链 2:淘宝商品itemID + UrlType int `json:"url_type,omitempty"` + // WebUriType url类型; 当计划类型为5(收集销售线索)&使用建站时有返回:需使用魔力建站 不传默认1,2:落地页 + WebUriType int `json:"web_uri_type,omitempty"` + // Url 落地页链接; 计划类型是 2(提升应用安装):返回应用下载地址;计划类型是 3(获取电商下单):根据url_type返回相应信息;计划类型是 4(推广品牌活动):返回落地页url计划类型是 5(收集销售线索):返回落地页url计划类型是5(收集销售线索):建站idl + Url string `json:"url,omitempty"` + // SchemaUrl 调起链接; 提升应用活跃营销目标的调起链接 + SchemaUrl string `json:"schema_url,omitempty"` + // AppID 应用ID + AppID int64 `json:"app_id,omitempty"` + // AppIconUrl APP图标存储地址 + AppIconUrl string `json:"app_icon_url,omitempty"` + // DiverseData 应用信息 + DiverseData *DiverseData `json:"diverse_data,omitempty"` + // Target 定向数据 + Target *Target `json:"target,omitempty"` + // SiteType 预约广告; 1:IOS预约 缺省为不传或传0 + SiteType int `json:"site_type,omitempty"` + // GiftData 游戏礼包码; 联盟广告暂不支持 + GiftData *GiftData `json:"gift_data,omitempty"` + // VideoLandingPage 是否使用落地页前置功能; true: 使用 false:不使用 + VideoLandingPage bool `json:"video_landing_page,omitempty"` + // AutoTarget 智能定向; 若开启智能定向,定向部分仅保留地域+年龄+性别+排除人群+系统纬度的定向,其他定向纬度暂不支持(报错处理)true表示开启,false表示未开启 + AutoTarget bool `json:"auto_target,omitempty"` + // SmartCover 程序化创意2.0智能抽帧; 是否开启智能抽帧 + SmartCover bool `json:"smart_cover,omitempty"` + // AssetMining 程序化创意2.0素材挖掘; 是否开启历史素材挖掘 + AssetMining bool `json:"asset_mining,omitempty"` + // AutoCreatePhoto 是否开启自动生成视频 + AutoCreatePhoto bool `json:"auto_create_photo,omitempty"` + // UpdateTime 最后修改时间 + UpdateTime string `json:"update_time,omitempty"` + // ItemID 电商关联Id (小店通); 1. merchantItemType为0时表示小店商品id; 2. merchantItemType为2时表示快手id + ItemID int64 `json:"item_id,omitempty"` + // FictionID 小说ID; 仅支持“提升应用安装”、“收集销售线索”以及“提高应用活跃”三种计划类型,且一旦绑定,不可修改。此参数仅是绑定小说,并非自动关联小说生成的落地页,如需推广小说生成的落地页,请使用小说ID获取其生成的建站落地页后将落地页ID一并传入即可(落地页ID传参与之前建站落地页ID字段一致) + FictionID int64 `json:"fiction_id,omitempty"` + // MerchantItemPutType 电商广告投放类型(小店通); 0: 商品; 2: 个人主页 + MerchantItemPutType int `json:"merchant_item_put_type,omitempty"` + // ConsultID 是否使用了咨询组件; 0=未使用,1=使用;注,咨询组件仅在收集销售线索计划(campaign_type=5)下可用,且使用了咨询组件后,可用的行动号召按钮限于接口返回内容 + ConsultID int `json:"consult_id,omitempty"` + // AdvCardOption 高级创意开关; 0:关闭 1:开启 + AdvCardOption int `json:"adv_card_option,omitempty"` + // AdvCardList 高级创意列表 + AdvCardList []AdvCard `json:"adv_card_list,omitempty"` + // BackflowForecast backflow_cv_lower:回流预估值的下限;backflow_cv_upper:回流预估值的上限;backflow_timestamp:本次回流预估数据的时间戳,13位毫秒时间戳 + BackflowForecast string `json:"backflow_forecast,omitempty"` + // MerchandiseID 商品ID,且一旦绑定,不可修改; 此参数用于绑定商品(绑定商品类型受merchandise_type字段控制),与 fiction_id 字段互斥。merchandise_type=2,merchandise_id 为课程ID,仅支持“收集销售线索”计划类型,且一旦绑定不可修改 + MerchandiseID int64 `json:"merchandise_id,omitempty"` + // MerchandiseType 课程类型; 与 merchandise_id 共同使用,merchandise_type=2,merchandise_id 为课程ID,仅支持“收集销售线索”计划类型,且一旦绑定不可修改 + MerchandiseType int `json:"merchandise_type,omitempty"` + // PlayableOrientation 试玩素材的横竖适配; 默认值为-1;0:横竖均可;1:竖屏;2:横屏 + PlayableOrientation int `json:"playable_orientation,omitempty"` + // PlayableUrl 试玩的url + PlayableUrl string `json:"playable_url,omitempty"` + // PlayableFileName 试玩广告的文件名 + PlayableFileName string `json:"playable_file_name,omitempty"` + // PlayableSwitch 试玩广告的开关; 默认值为0;1:关闭;2:开启 + PlayableSwitch int `json:"playable_switch,omitempty"` + // LibraryID 商品库ID; sdpa类型广告组才会存在 + LibraryID int64 `json:"library_id,omitempty"` + // OuterID 商品ID; sdpa类型广告组才会存在 + OuterID string `json:"outer_id,omitempty"` + // ProductName 商品名称; sdpa类型广告组才会存在 + ProductName string `json:"product_name,omitempty"` + // ProductPrice 商品价格; 单位:元,sdpa类型广告组才会存在 + ProductPrice float64 `json:"product_price,omitempty"` + // ProductImage 商品主图; sdpa类型广告组才会存在 + ProductImage string `json:"product_image,omitempty"` + // IntentionTarget 行为意向-系统优选; 行为意向是否开启系统优选,智能定向和行为意向系统优选不能同时开启 + IntentionTarget bool `json:"intention_target,omitempty"` +}