load->model('PageSpeedData_model'); } public function index() { $this->permission->is_admin(); $data = array(); $data['score_data'] = $this->PageSpeedData_model->score_chart($this->config->item('site_code')); $this->load->view('bootstrap3/header', $data); $this->load->view('welcome'); $this->load->view('bootstrap3/footer'); } //根据分数段来查询页面 public function search_score() { $this->permission->is_admin(); $data = array(); $device = $this->input->post('device'); $start_score = $this->input->post('start_score'); $end_score = $this->input->post('end_score'); $data['score_data_list'] = $this->PageSpeedData_model->search_score_list($start_score, $end_score, $this->config->item('site_code'), $device); if (empty($data['score_data_list'])) { echo json_encode('没有找到数据'); } else { echo json_encode($this->load->view('search', $data, true)); } } //自动抓取分数和排名 public function auto($sitecode = 'cht') { //添加数据,信息平台中发布的,并且当前数据库没有的 $this->PageSpeedData_model->insert_list($sitecode); $update_list = $this->PageSpeedData_model->get_update_list($sitecode, 2); if (empty($update_list)) { echo'all done!'; return; } foreach ($update_list as $item) { $this->run($item->psd_URL, $item-> psd_SiteCode); } } public function show_score() { $psd_URL = $this->input->get_post('psd_URL'); $psd_SiteCode = $this->input->get_post('psd_SiteCode'); if (empty($psd_URL) || empty($psd_SiteCode)) { echo json_encode(array('result' => 'error', 'data' => 'url或站点为空')); return false; } $pagespeed_data = $this->PageSpeedData_model->detail($psd_URL, $psd_SiteCode); if (!empty($pagespeed_data)) { echo json_encode(array('result' => 'ok', 'data' => 'M:' . $pagespeed_data->psd_MobileScore . ',D:' . $pagespeed_data-> psd_DesktopScore)); } } public function run($psd_URL = false, $psd_SiteCode = false) { if (empty($psd_URL) || empty($psd_SiteCode)) { $psd_URL = $this->input->get_post('psd_URL'); $psd_SiteCode = $this->input->get_post('psd_SiteCode'); if (empty($psd_URL) || empty($psd_SiteCode)) { echo json_encode(array('result' => 'error', 'data' => 'url或站点为空')); return false; } } $sites = $this->config->item('site'); if (empty($sites[$psd_SiteCode])) { echo json_encode(array('result' => 'error', 'data' => '找不到站点')); return false; } $site_url = rtrim($sites[$psd_SiteCode]['site_url'], '/'); //删除/,因为URL已经含有了 $run_URL = urlencode(trim($site_url . $psd_URL)); $pagespeed_data = $this->PageSpeedData_model->detail($psd_URL, $psd_SiteCode); $PageSpeedData = new StdClass; $desktop_url = "https://www.googleapis.com/pagespeedonline/v2/runPagespeed?strategy=desktop&locale=zh_CN&url=$run_URL"; //$desktop_url = "http://pagespeed.mycht.cn/pagespeedonline/v2/runPagespeed?strategy=desktop&locale=zh_CN&url=$run_URL"; $mobile_url = "https://www.googleapis.com/pagespeedonline/v2/runPagespeed?strategy=mobile&locale=zh_CN&url=$run_URL"; //$mobile_url = "http://pagespeed.mycht.cn/pagespeedonline/v2/runPagespeed?strategy=mobile&locale=zh_CN&url=$run_URL"; //echo $desktop_url;die(); $desktop_data = GET_HTTP($desktop_url); $mobile_data = GET_HTTP($mobile_url); if (empty($desktop_data) || empty($mobile_data)) { echo json_encode(array('result' => 'error', 'data' => 'API不返回数据')); return false; } $desktop_object = json_decode($desktop_data); $mobile_object = json_decode($mobile_data); if (isset($desktop_object->error) || isset($mobile_object->error)) { $this->PageSpeedData_model->update_error($pagespeed_data->psd_id); echo json_encode(array('result' => 'error', 'data' => 'API返回错误')); log_message('error ', 'pagespeed_error:' . json_encode($desktop_object) . ' ' . json_encode($mobile_object)); return false; } if ($desktop_object->responseCode !== 200 || $mobile_object->responseCode !== 200) { $this->PageSpeedData_model->update_error($pagespeed_data->psd_id); echo json_encode(array('result' => 'error', 'data' => 'API返回错误,网页打不开')); log_message('error ', 'pagespeed_error:' . json_encode($desktop_object) . ' ' . json_encode($mobile_object)); return FALSE; } $PageSpeedData->psd_DesktopScore = $desktop_object->ruleGroups->SPEED->score; $PageSpeedData->psd_MobileScore = $mobile_object->ruleGroups->SPEED->score; $PageSpeedData->psd_DesktopData = $desktop_data; $PageSpeedData->psd_MobileData = $mobile_data; $PageSpeedData->psd_URL = $psd_URL; $PageSpeedData->psd_Datetime = date('Y-m-d H:i:s', time()); $PageSpeedData->psd_SiteCode = $psd_SiteCode; $PageSpeedData->psd_ErrorCount = 0; if (empty($pagespeed_data)) { $psd_id = $this->PageSpeedData_model->add('PageSpeedData', $PageSpeedData); } else { $where = array('psd_id' => $pagespeed_data->psd_id); $this->PageSpeedData_model->update('PageSpeedData', $PageSpeedData, $where); } echo json_encode(array('result' => 'ok', 'data' => 'M:' . $PageSpeedData->psd_MobileScore . ',D:' . $PageSpeedData->psd_DesktopScore)); } }