getAdvertiserMap($this->mediaId); // 循环执行 foreach ($advertiserList as $account) { $accessToken = $account['access_token'] ?? ""; if(!$accessToken) continue; // 获取消耗 $dataList = (new GdtAdapter())->getVideoCost($account['advertiser_id'], $accessToken, $this->date); // 数据加工,获取素材信息 if($dataList){ $videoMap = $this->getGdtVideoNameMap($account['advertiser_id'], $accessToken, $dataList); // 整理数据入库 $this->organizeDataList($account, $dataList, $videoMap); } } } protected function getGdtVideoNameMap($advertiserId, $accessToken, $dataList) { if(!$dataList) return $dataList; $videoMaterialIds = array_column($dataList, "video_id"); // 判断是否超过100条,切割处理 $videoIdList = array_chunk($videoMaterialIds, 100); $videoList = []; foreach ($videoIdList as $videoIds) { $videos = (new GdtAdapter())->getVideo($advertiserId, $accessToken, $videoIds); $videoList = array_merge($videoList, $videos); } $videoData = []; if($videoList) { foreach ($videoList as $val){ $videoData[$val['video_id']] = $val; } } return $videoData; } // 整理入库数据列表 protected function organizeDataList($account, $dataList, $videoMap): void { if(!$dataList) return; $db = Db::connect('db_advert'); // 返点率 $fandianRate = ($account['son_fandian']>1) ? (1/$account['son_fandian']) : $account['son_fandian']; foreach ($dataList as $val) { $cost = $val['cost']/100; if($cost==0) continue; $adId = $val['adgroup_id']; $adName = $val['adgroup_name']; $materialId = $val['video_id']; $materialName = $videoMap[$materialId]["description"] ?? ""; $materialUrl = $videoMap[$materialId]["preview_url"] ?? ""; $materialImg = $videoMap[$materialId]['key_frame_image_url'] ?? ""; // Todo 从素材名称中获取归属人 $authorId = $this->getAuthorId($materialName); // Todo 从广告名称中拆分归因数据 $siteInfo = $this->getSiteInfo($adName); if(!$siteInfo['game_id'] || empty($this->siteMap[$siteInfo['site_id']])) continue; $materialData = [ 'ad_id' => $adId, 'game_id' => $siteInfo['game_id'], 'agent_id'=> $siteInfo['agent_id'], 'site_id' => $siteInfo['site_id'], 'media_id' => $this->siteMap[$siteInfo['site_id']]['media_id'] ?? 0, 'auth_id' => $this->siteMap[$siteInfo['site_id']]['auth_id'] ?? 0, 'material_name' => $materialName, 'material_url' => $materialUrl, 'material_img' => $materialImg, 'ori_money' => $cost, 'money' => $cost*$fandianRate, 'ad_show' => $val['view_count'], 'click' => $val['valid_click_count'], 'total_play' => $val['video_outer_play_count'], 'valid_play' => $val['video_outer_play100_count'], 'download' => $val['download_count'], 'active' => $val['activated_count'], 'pay_count' => $val['first_pay_count'], 'author_id' => $authorId ]; $where = [ 'tdate' => $this->date, 'ad_id' => $adId, 'material_id' => $materialId, 'advertiser_id' => $account['advertiser_id'], ]; $findId= $db->table($this->materialTable)->where($where)->value("id"); if($findId) { $materialData['id'] = $findId; } // 保存数据 $db->table($this->materialTable)->save(array_merge($materialData, $where)); } } }