java调用结构体next_利用递归的方式获取restful风格有nextUrl接口返回的数据

//获取账户下的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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值