//获取账户下的campaign数据 ———— 调用的地方
func handleAccountCampaigns(token, accountId string, app *app.App) {
requestMethod := "GET"url := BaseURL + accountId + "/campaigns?fields=account_id,id,name,objective,status,created_time,updated_time,daily_budget,lifetime_budget&access_token=" +token
camLst := []*model.CampaignFB{}//TODO 直接传入ret的地址!可以直接在ret中操作,将账户的Campaign数据写入camLst中!!!
GetAccountCampaigns(FBBaseRequestString, requestMethod, url, &camLst)//fmt.Println("len_ret>>> ", len(camLst))//存入数据库
for _, camObj :=range camLst {//Format一下
camObj.Format()//直接用Save方法 实现 insert或update
err :=app.SrvStore.Campaign().FBSave(camObj)if err !=nil {
mlog.Error("创建Campaign失败:" + (*camObj).Id)
}
}
}//获取某个账户下的所有AdSet 递归获取下一页数据
func GetAccountCampaigns(f func(requestMethod, url string) string, requestMethod, url string, c *[]*model.CampaignFB) {
strRet :=f(requestMethod, url)//fmt.Println("strRet>>> ", strRet)//json转结构体 Campaign
varresponse model.CampaignFBResponse
err := json.NewDecoder(strings.NewReader(strRet)).Decode(&response)if err !=nil {
fmt.Println("CampaignFB json转结构体出错>>>", err)
}else{//fmt.Println("response>>> ",response)
paging :=response.Paging
data :=response.Datafor _, camObj :=range data {//往成员变量中写入数据
*c = append(*c, camObj)
}//有下一页就递归获取 注意这里要加双重判断!!!
if paging != nil && paging.Next != ""{
nextStrUrl := (*paging).Next
nextStrUrlNew := strings.Replace(nextStrUrl, "https://graph.facebook.com/v8.0/", BaseURL, 1)//递归获取下一页数据
GetAccountCampaigns(f, requestMethod, nextStrUrlNew, c)
}
}
}//FB base//发HTTP请求并解析数据
func FBBaseRequestString(requestMethod, url string) string{
client := &http.Client{}
req, err :=http.NewRequest(requestMethod, url, nil)if err !=nil {
fmt.Println("err1 >>>>>", err)
}
resp, err :=client.Do(req)if err !=nil {
fmt.Println("err2 >>>>>", err)
}
returnStr, err :=parseResponseString(resp)//fmt.Println("returnStr>>> " + returnStr)//HTTP字节流转为str的结果
returnreturnStr
}//解析http请求返回的结果 ———— 转换为string
func parseResponseString(response *http.Response) (string, error) {
body, err :=ioutil.ReadAll(response.Body)return string(body), err //将io数据流转换为string
}