setName('fish_live') ->setDescription('Automatically update flying fish live clues'); } protected function execute(Input $input, Output $output) { Log::close(NULL); //查找存在配置的公司 $list = Company::where("channel_setting_wh <> 'null'") ->field('root_id,channel_setting_wh') // ->where('root_id',$root_id) ->limit(50) ->select()->toArray(); if (isset($list) && $list) { $appid = config('app.fish_clue_appid_wh'); $secret = config('app.fish_clue_secret_wh'); $fish = new clueFish($appid, $secret); foreach ($list as $val) { if(isset($val['channel_setting_wh']) && $val['channel_setting_wh']){ $root_id = $val['root_id']; $tmp_data = json_decode($val['channel_setting_wh'], true); $tmp_data = $this->refreshToken($fish, $tmp_data, $root_id); $start_date = '2023-06-01 00:00:00'; $end_date = date('Y-m-d H:i:s'); $advertiser_id = explode(',', $tmp_data['fish_adv']); foreach ($advertiser_id as $va) { $data = $fish->getLiveAttribute( $tmp_data['fish_access_token'], [ 'advertiser_id' => $va, 'start_date' => $start_date, 'end_date' => $end_date, 'page' => 1 ]); // dump($data);die; if ($data['code'] == 0) { //如果广告组数据存在多页 $page = $data['data']['page_info']['total_page']; $this->update_fish_live_data($data['data']['list'], $fish, $tmp_data, $root_id, $start_date, $va); if ($page > 1) { for ($i = 1; $i < $page; $i++) { $page_data = $fish->getLiveAttribute($tmp_data['fish_access_token'], ['advertiser_id' => $va, 'start_date' => $start_date, 'end_date' => $start_date, 'page' => $i + 1]); if ($page_data['code'] == 0) { $this->update_fish_live_data($page_data['data']['list'], $fish, $tmp_data, $root_id, $start_date, $va); } } } } } $fields = [ 'live_watch_count', 'live_watch_ucount', 'click_product_ucount', 'live_form_submit_count', 'live_card_icon_component_show_count', 'live_avg_watch_duration', 'live_comment_count', 'live_follow_count', 'live_share_count', 'live_count', ]; foreach ($advertiser_id as $va) { $data = $fish->getAnalysisLiveList( $tmp_data['fish_access_token'], [ 'advertiser_id' => $va, 'start_date' => $start_date, 'end_date' => $end_date, 'page' => 1, 'fields' => $fields ]); // dump($data);die; if ($data['code'] == 0) { //如果广告组数据存在多页 $page = $data['data']['page_info']['total_page']; $this->update_fish_live_data($data['data']['list'], $fish, $tmp_data, $root_id, $start_date, $va); if ($page > 1) { for ($i = 1; $i < $page; $i++) { $page_data = $fish->getAnalysisLiveList( $tmp_data['fish_access_token'], [ 'advertiser_id' => $va, 'start_date' => $start_date, 'end_date' => $start_date, 'page' => $i + 1, 'fields' => $fields ]); if ($page_data['code'] == 0) { $this->update_fish_live_data($page_data['data']['list'], $fish, $tmp_data, $root_id, $start_date, $va); } } } } } } } } $output->writeln("同步完成"); } /** * 更新直播数据 */ protected function update_fish_live_data($list, $fish, $tmp_data, $root_id, $data_time, $advertiser_id) { $data_time = date('Y-m-d',strtotime($data_time)); Db::startTrans(); try { foreach ($list as $val) { //先删除昨日数据后插入数据 $info = FishLive::where(['root_id' => $root_id, 'data_time' => $data_time, 'advertiser_id' => $advertiser_id,'room_id'=>$val['room_id']])->find(); $param = [ 'root_id' => $root_id, 'room_id' => $val['room_id'], 'data_time' => $data_time, 'advertiser_id' => $advertiser_id, 'room_title' => $val['room_title']?$val['room_title']:'', 'live_watch_count' => $val['fields']['live_watch_count']?$val['fields']['live_watch_count']:0, 'live_watch_ucount' => $val['fields']['live_watch_ucount']?$val['fields']['live_watch_ucount']:0, 'live_card_icon_component_show_count' => $val['fields']['live_card_icon_component_show_count']?$val['fields']['live_card_icon_component_show_count']:0, 'click_product_ucount' => $val['fields']['click_product_ucount']?$val['fields']['click_product_ucount']:0, 'live_form_submit_count' => $val['fields']['live_form_submit_count']?$val['fields']['live_form_submit_count']:0, 'room_status' => $val['room_status'], 'type' => 1, 'room_create_time' => !empty($val['room_create_time'])?date('Y-m-d H:i:s',strtotime($val['room_create_time'])):'', 'room_finish_time' => !empty($val['room_finish_time'])?date('Y-m-d H:i:s',strtotime($val['room_finish_time'])):'', 'anchor_id' => $val['anchor_id']?$val['anchor_id']:'', 'anchor_nick' => $val['anchor_nick']?$val['anchor_nick']:'', 'data_create' => date('Y-m-d',strtotime($val['room_create_time'])), 'live_avg_watch_duration' => $val['fields']['live_avg_watch_duration']?$val['fields']['live_avg_watch_duration']:0, 'live_comment_count' => $val['fields']['live_comment_count']?$val['fields']['live_comment_count']:0, 'live_follow_count' => $val['fields']['live_follow_count']?$val['fields']['live_follow_count']:0, 'live_share_count' => $val['fields']['live_share_count']?$val['fields']['live_share_count']:0, 'live_count' => $val['fields']['live_count']?$val['fields']['live_count']:0, ]; $where = [ 'root_id' => $root_id, 'room_id' => $val['room_id'], 'data_time' => $data_time, 'advertiser_id' => $advertiser_id, ]; if ($info){ FishLive::where($where)->update($param); }else{ FishLive::where($where)->insert($param); } } Db::commit(); } catch (\Exception $e) { // file_put_contents(dirname(app()->getRuntimePath()) . DIRECTORY_SEPARATOR.'log'.'/update_fish_live_data.txt', date('Y-m-d H:i:s') ."\n"."更新直播数据:".$e->getMessage()."\r\n", FILE_APPEND); Db::rollback(); } } /** * 刷新token */ public function refreshToken($fish, $tmp_data, $root_id) { $fish_refresh_time = $tmp_data['fish_refresh_time']; //上次token更新时间 if ($fish_refresh_time + 80000 < time()) { $token = $fish->getRefreshToken($tmp_data['fish_refresh_token']); if ($token['code'] == 0) { $tmp_data['fish_access_token'] = $token['data']['access_token']; $tmp_data['fish_refresh_token'] = $token['data']['refresh_token']; $tmp_data['fish_refresh_time'] = time(); Company::where(['root_id' => $root_id])->update(['channel_setting_wh' => json_encode($tmp_data)]); } else { $tmp_data['fish_access_token'] = ''; $tmp_data['fish_refresh_token'] = ''; Company::where(['root_id' => $root_id])->update(['channel_setting_wh' => json_encode($tmp_data)]); } } return $tmp_data; } }