You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/application/controllers/keyworlds.php

728 lines
32 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Keyworlds extends CI_Controller {
function __construct() {
parent::__construct();
$this->permission->is_admin(false);
$this->load->model('InfoKeywords_model', 'Keywords_model');
$this->load->model('InfoKeywordsrank_model', 'Keywordsrank_model');
$this->load->model('InfoKeywordsanalytics_model', 'analytics_model');
$this->load->model('InfoStructures_model');
}
public function index($kw_is_id = '') {
$this->load->library('Accesscheck');
$this->accesscheck->check_access();
$this->permission->is_admin();
//查询结构列表信息
$data['keyworldsList'] = $this->Keywords_model->get_structure_list();
if (empty($data['keyworldsList'])) {
$this->add(0, false);
redirect(site_url("Keyworlds/index"));
}
$root_key = false;
$data['keyworldsList'][0]->id == $kw_is_id ? $kw_is_id = '' : null;
if (empty($kw_is_id) || $kw_is_id == 'asc' || $kw_is_id == 'desc') {
$root_key = true;
$data['order'] = empty($kw_is_id) ? 'asc' : $kw_is_id;
$kw_is_id = $data['keyworldsList'][0]->id;
}
$today = date('Y-m-d', time());
$startdate = strtotime("$today -1 month");
$enddate = time();
if ($this->input->post('startdate') != '')
$startdate = strtotime($this->input->post('startdate'));
if ($this->input->post('enddate') != '')
$enddate = strtotime($this->input->post('enddate'));
//查询当前关键词的排名情况
$data['rank_json'] = '';
$data['current_keyworld'] = $this->Keywords_model->get_keyworld_bytreeid($kw_is_id);
//如果是根目录,则展示最新关键词排名变化情况
if ($root_key) {
$data['compare_rank'] = $this->Keywords_model->get_compare_rank($data['order']);
$this->load->view('bootstrap/header', $data);
$this->load->view('keyworlds/compare_rank');
$this->load->view('bootstrap/footer');
return;
}
$data['wordcount'] = 1;
if ($data['current_keyworld']) {
//获取当前节所有直接子节点
$is_id_string = $data['current_keyworld']->kw_id;
$i = 0;
foreach ($data['keyworldsList'] as $kw) {
if ($i > 9)
break;
if ($kw->pId == $kw_is_id) {
$is_id_string.=',' . $kw->kw_id;
$i++;
$data['wordcount'] = 2;
}
}
$data['rank_info'] = $this->Keywordsrank_model->get_rank_list($is_id_string, 30, $startdate, $enddate);
empty($data['rank_info']) && $data['rank_info'] = $this->Keywordsrank_model->get_rank_list($is_id_string, 30);
if (!empty($data['rank_info'])) {
$rank_info = $data['rank_info'];
asort($rank_info);
$data_time = array();
foreach ($rank_info as $key => $r) {
if (!in_array(date('Y-m-d', $r->kwr_datetime), $data_time))
$data_time[] = date('Y-m-d', $r->kwr_datetime);
$rank_json[$r->kwr_kw_id][date('Y-m-d', $r->kwr_datetime)] = $r;
$rank_json2[$r->kwr_kw_id][] = $r;
}
foreach ($data_time as $d) {
foreach ($rank_json as $kw_id => &$value) {
if (!isset($pre[$kw_id]))
$pre[$kw_id] = $rank_json2[$kw_id][0];
if (!isset($value[$d])) {
$value[$d] = $pre[$kw_id];
} else {
$pre[$kw_id] = $value[$d];
}
}
}
// 拼接highcharts数据格式
$data['rank_json'] = '[';
foreach ($rank_json as &$ra) {
ksort($ra);
// 每条线
$data['rank_json'] .='{"name":"' . $ra[$data_time[0]]->kw_keyworlds . '","data":[';
// 每个点
foreach ($ra as $v) {
$kwr_rank = $v->kwr_rank;
if ($v->kwr_rank == '>150') {
$kwr_rank = 100;
}
$data['rank_json'] .=$kwr_rank . ',';
}
$data['rank_json'] = substr($data['rank_json'], 0, -1);
$data['rank_json'] .=']},';
// 叶子节点 显示mobile记录
if ($data['wordcount'] == 1) {
$data['rank_json'] .='{"name":"' . $ra[$data_time[0]]->kw_keyworlds . '(mobile)","data":[';
foreach ($ra as $v) {
$kwr_mobile_rank = $v->kwr_mobile_rank ? $v->kwr_mobile_rank : 'null' ;
if ($v->kwr_mobile_rank == '>150') {
$kwr_mobile_rank = 100;
}
$data['rank_json'] .= $kwr_mobile_rank . ',';
}
$data['rank_json'] = substr($data['rank_json'], 0, -1);
$data['rank_json'] .=']},';
}
}
$data['rank_json'] = substr($data['rank_json'], 0, -1) . ']';
$data['data_time'] = json_encode($data_time);
$data['rank_info'] = '';
isset($rank_json[$data['current_keyworld']->kw_id]) && $data['rank_info'] = $rank_json[$data['current_keyworld']->kw_id];
if($data['wordcount'] == 1) {
arsort($data['rank_info']);
}
}
} else {
redirect(site_url("Keyworlds/index"));
}
$data['site_code'] = strtolower($this->config->item('site_code'));
$this->load->view('bootstrap/header', $data);
$this->load->view('keyworlds/index');
$this->load->view('bootstrap/footer');
}
//搜索关键词
public function search_keywords() {
$keyworlds = $this->input->post('keyworlds');
if (empty($keyworlds)) {
echo 0;
return;
}
$data['keyworld'] = $keyworlds;
$data['keyworld_info'] = $this->Keywords_model->get_keyworld_by_word($keyworlds);
$this->load->view('keyworlds/search', $data);
}
//添加关键词
public function add($is_parent_id, $is_ajax = true) {
$insert_id = $this->InfoStructures_model->Add($is_parent_id);
if ($insert_id && $kw_id = $this->Keywords_model->add_keyworlds('New Keywords', $this->config->item('site_code'), time(), $insert_id)) {
$data[] = array('name' => 'ok', 'value' => $this->Keywords_model->get_keyworld($kw_id));
} else {
$data[] = array('name' => 'no', 'value' => $this->lang->line('form_info_error'));
}
if ($is_ajax) {
echo json_encode($data);
return TRUE;
}
return $insert_id;
}
//编辑关键词
public function edit() {
$this->form_validation->set_rules('keyworlds', 'lang:kw_keyworlds', 'required');
$this->form_validation->set_rules('kw_id', 'lang:kw_id', 'required');
if ($this->form_validation->run() == FALSE) {
$data = array();
foreach ($this->form_validation->_error_array as $key => $value) {
$data[] = array('name' => $key, 'value' => $value);
}
echo json_encode($data);
} else {
$isupdate = $this->Keywords_model->edit_keyworlds($this->input->post('keyworlds'), $this->input->post('kw_id'), $this->input->post('status'));
if ($isupdate) {
$data[] = array('name' => 'ok', 'value' => $this->lang->line('form_keyworlds_success'));
echo json_encode($data);
} else {
$data[] = array('name' => 'no', 'value' => $this->lang->line('form_keyworlds_error'));
echo json_encode($data);
}
}
}
//删除某个排名
public function delete_one_rank($kwr_id) {
$this->Keywordsrank_model->delete_one_rank($kwr_id);
header("Location:" . $_SERVER['HTTP_REFERER']);
}
//删除关键词
public function delete_keyworlds() {
$this->form_validation->set_rules('kw_id', 'lang:kw_id', 'required');
$this->form_validation->set_rules('kw_is_id', 'lang:kw_is_id', 'required');
if ($this->form_validation->run() == FALSE) {
$data = array();
foreach ($this->form_validation->_error_array as $key => $value) {
$data[] = array('name' => $key, 'value' => $value);
}
echo json_encode($data);
} else {
$isdelete = $this->Keywords_model->delete($this->input->post('kw_id'));
if ($isdelete) {
$this->Keywordsrank_model->delete($this->input->post('kw_id'));
$this->InfoStructures_model->Delete($this->input->post('kw_is_id'));
$data[] = array('name' => 'ok', 'value' => site_url('keyworlds/index'));
echo json_encode($data);
} else {
$data[] = array('name' => 'no', 'value' => $this->lang->line('form_keyworlds_error'));
echo json_encode($data);
}
}
}
//移动关键词排序顺序
public function move() {
//网站会提交一个同级节点id列表字符串按照这个去排序
$parent_id = $this->input->post('pid');
$idsStr = $this->input->post('ids');
$idsArray = explode(',', $idsStr);
foreach ($idsArray as $key => $value) {
if ($value) {
//设置排序
$this->InfoStructures_model->set_sort($value, $key);
//设置path
$this->InfoStructures_model->set_path($parent_id, $value);
}
}
$data[] = array('name' => 'ok', 'value' => $this->lang->line('structures_success_move'));
echo json_encode($data);
return TRUE;
}
public function get_google_rank() {
$keyworlds = $this->input->post('keyworlds'); //搜索关键字
$kw_id = $this->input->post('kw_id');
$site_url = $this->config->item('site_url');
$engines = array(
'cht' => 'get_search_content_by_google',
'gm' => 'get_search_content_by_google',
'vc' => 'get_search_content_by_google',
'jp' => 'get_search_content_by_google',
'vac' => 'get_search_content_by_google',
'it' => 'get_search_content_by_google',
'ru' => 'get_search_content_by_google',
'tbt' => 'get_search_content_by_google',
'sht' => 'get_search_content_by_google',
'yz' => 'get_search_content_by_google',
'gl' => 'get_search_content_by_google',
'mbj' => 'get_search_content_by_google',
'ct' => 'get_search_content_by_google',
'mct' => 'get_search_content_by_google',
'dct' => 'get_search_content_by_google',
'ah' => 'get_search_content_by_google'
);
$site_code = $this->config->item('site_code');
$method = $engines[$site_code];
$today = strtotime(date('Y-m-d'));
$client_flag = 'PC';
$rank_flag = 'rank';
$source_flag = 'source';
$last_rank = $this->Keywordsrank_model->get_rank_list($kw_id, $top = 1);
if (isset($last_rank[0]->kwr_datetime) and ( time() - $last_rank[0]->kwr_datetime) < 180) {
$data[] = array('name' => 'rank', 'value' => '查询过于频繁,请等待三分钟!');
echo json_encode($data);
return TRUE;
}
if ((intval($last_rank[0]->kwr_mobile_rank) == 0 || !isset($last_rank[0]->kwr_mobile_rank)) &&
(intval($last_rank[0]->kwr_datetime) >= intval($today)) ) {
$client_flag = 'm';
$rank_flag = 'rank_m';
$source_flag = 'source_m';
}
$today_0 = strtotime(date('Ymd000000'));
$today_24 = strtotime(date('Ymd235959'));
$last_rank_today = $this->Keywordsrank_model->get_rank_list($kw_id,1,$today_0,$today_24);
$orignal = array();
//获取排名详细情况,排名超过150的停止搜索
for ($i = 1; $i <= 15; $i++) {
$j = $i;
$rank = $this->$method($client_flag, $keyworlds, $site_url, $j, $site_code);
$orignal[] = $rank['orignal'];
// 仅更新一个字段
if ($client_flag === 'm') {
$rank['rank'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_rank : null;
$rank['source'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_source : null;
} else {
$rank['rank_m'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_mobile_rank : null;
$rank['source_m'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_mobile_source : null;
}
if (intval($rank[$rank_flag]) != 0) {
if ($rank[$rank_flag] > 150)
$rank[$rank_flag] = '151';
break;
}elseif ($i == 15) {
$rank[$rank_flag] = '151';
break;
} elseif ($rank[$rank_flag] == -2) {
break;
}
}
$data[] = array(
'name' => 'rank',
'value' => ($rank['rank'] . " / " . $rank["rank_m"]),
'real' => $rank_flag . " : " . $rank[$rank_flag]
// ,'tmp' => intval($last_rank[0]->kwr_datetime) . "-" . intval($today) . $client_flag
// ,'orignal' => $orignal
// ,"site" => $site_url
);
if ($rank[$rank_flag] < 0) {
echo json_encode($data);
return false;
}
//保存排名数据
if ( isset($last_rank_today[0]) && ! empty($last_rank_today[0])) {
$this->Keywordsrank_model->update_rank($last_rank_today[0]->kwr_id, $rank['rank'], $rank['rank_m'], $rank['source'], $rank['source_m'], $rank['engines']);
$this->Keywords_model->update_time($kw_id);
} else {
$add = $this->Keywordsrank_model->add_rank($kw_id, $rank['rank'], $rank['rank_m'], $rank['source'], $rank['source_m'], $rank['engines']);
// rank 变化
if ($add && $client_flag === 'PC') {
$this->load->model('InfoSMS_model');
$last_rank_pc = isset($last_rank_pc[0]) ? $last_rank_pc[0]->kwr_rank : $rank['rank'];
$this->InfoSMS_model->readed_for_info($kw_id, 'keywords_rank');
$this->InfoSMS_model->add('keywords_rank', $kw_id, $rank['rank'], $last_rank_pc, (string) ($rank['rank'] - $last_rank_pc));
$this->Keywords_model->update_time($kw_id);
}
}
echo json_encode($data);
return TRUE;
}
//自动爬取排名
public function get_auto_rank($engines = '', $fix_site_code = '', $client='PC') {
set_time_limit(60);
$rank = array();
$orignal = array();
$worldsList = array();
$site_config = $this->config->item('site');
$engines = trim($engines);
//取出需要更新排名的关键词
// 先取时间最久没更新的
$today = strtotime(date('Y-m-d'));
$client_flag = $client ? $client : "PC";
$rank_flag = 'rank';
$source_flag = 'source';
if ($client_flag == 'PC') {
$worldsList = $this->Keywords_model->get_keyworld_list_old(1, $engines, $fix_site_code);
}
if (empty($worldsList) || $client_flag === 'm') {
$worldsList = $this->Keywords_model->get_keyworld_list(1, $engines, $fix_site_code);
//如果没有需要更新的则返回
if (empty($worldsList)) {
echo 'all done';
return;
}
$client_flag = "m";
$rank_flag = 'rank_m';
$source_flag = 'source_m';
$last_rank = $this->Keywordsrank_model->get_rank_list($worldsList[0]->kw_id);
}
$last_rank_pc = $this->Keywordsrank_model->get_rank_list($worldsList[0]->kw_id);
$today_0 = strtotime(date('Ymd000000'));
$today_24 = strtotime(date('Ymd235959'));
$last_rank_today = $this->Keywordsrank_model->get_rank_list($worldsList[0]->kw_id,1,$today_0,$today_24);
//获取排名并保存
foreach ($worldsList as $v) {
$site_config = $site_config[$v->kw_sitecode];
$site_url = $site_config['site_url'];
$site_code = $site_config['site_code'];
for ($i = 1; $i <= 15; $i++) {
if ($engines == '' || $engines == 'en' || $engines == 'eu') {//没有输入搜索引擎的时候根据站点自动分配获取排名的搜索引擎
$rank = $this->get_search_content_by_google($client_flag,$v->kw_keyworlds, $site_url, $i, $site_code);
} else if ($engines == 'yandex') {//俄语站的yangdex
$rank = $this->get_search_content_by_yandex($client_flag,$v->kw_keyworlds, $site_url, $i - 1);
}
$orignal[] = $rank['orignal'];
if ($client_flag === 'm') {
$rank['rank'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_rank : null;
$rank['source'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_source : null;
} else {
$rank['rank_m'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_mobile_rank : null;
$rank['source_m'] = isset($last_rank_today[0]) ? $last_rank_today[0]->kwr_mobile_source : null;
}
if ($rank[$rank_flag] != 0) {
if (intval($rank[$rank_flag]) > 150)
$rank[$rank_flag] = '151';
break;
}elseif ($i == 15) {
$rank[$rank_flag] = '151';
break;
} elseif ($rank[$rank_flag] == -2) {
break;
}
}
if ( $rank[$rank_flag] < 0 ) {
break;
}
if ( isset($last_rank_today[0]) && ! empty($last_rank_today[0])) {
$this->Keywordsrank_model->update_rank($last_rank_today[0]->kwr_id, $rank['rank'], $rank['rank_m'], $rank['source'], $rank['source_m'], $rank['engines']);
$this->Keywords_model->update_time($v->kw_id);
} else {
$add = $this->Keywordsrank_model->add_rank($v->kw_id, $rank['rank'], $rank['rank_m'], $rank['source'], $rank['source_m'], $rank['engines']);
// rank 变化
if ($add && $client_flag === 'PC') {
$this->load->model('InfoSMS_model');
$last_rank_pc = isset($last_rank_pc[0]) ? $last_rank_pc[0]->kwr_rank : $rank['rank'];
$this->InfoSMS_model->readed_for_info($v->kw_id, 'keywords_rank');
$this->InfoSMS_model->add('keywords_rank', $v->kw_id, $rank['rank'], $last_rank_pc, (string) ($rank['rank'] - $last_rank_pc));
if ($engines != 'yandex') {
$this->Keywords_model->update_time($v->kw_id);
}
}
}
}
var_dump("rank $client_flag " . $rank[$rank_flag]);
unset($rank['orignal']);
var_dump($worldsList[0]->kw_keyworlds, $rank, $orignal);
}
//计算关键词在google搜索引擎的排名
public function get_search_content_by_google($client_flag,$keyworlds, $site_url, $page, $site_code) {
$site_url .= "/";
$rank['rank'] = 0;
$rank['source'] = $site_url;
$rank['rank_m'] = 0;
$rank['source_m'] = $site_url;
$rank['engines'] = 'google';
$rank["orignal"] = '';
if ($page > 3) {
$rank['rank'] = 151;
$rank['rank_m'] = 151;
return $rank;
}
$search_worlds = urlencode($keyworlds);
//拼接搜索url链接
$start = ($page - 1) * 50;
$google_url = 'google.com';
$google_domain = array(
'gm' => 'google.de',
'vc' => 'google.fr',
'vac' => 'google.es',
'ru' => 'google.ru',
'it' => 'google.it',
'jp' => 'google.co.jp'
);
if (!empty($google_domain[$site_code]))
$google_url = $google_domain[$site_code];
//搜索使用的语种,默认是英语
$language = 'en';
$language_array = array('gm' => 'de', 'vc' => 'fr', 'vac' => 'es', 'ru' => 'ru', 'it' => 'it', 'jp' => 'jp');
if (!empty($language_array[$site_code]))
$language = $language_array[$site_code];
//抓取google搜索结果
$url = "https://www.$google_url/search?q=$search_worlds&start=$start&num=50&hl=$language";
$match_fun = '/<h3 class=\"r\">(.*)<\/h3>/smUi';
$rank_flag = 'rank';
$source_flag = 'source';
if ($client_flag == 'm') {
$match_fun = '/<a class=\"_Olt _bCp\"(.*)<div/smUi';
$rank_flag = 'rank_m';
$source_flag = 'source_m';
}
$response = $this->curl($url,$client_flag);
if ($response) {
//分析google搜索结果计算排名
if (false !== stripos($response, '<h1>302 Moved</h1>') ||
false !== stripos($response, 'recaptcha')) {
$rank['rank'] = -2;
$rank["orignal"] = $response;
} elseif (false !== stripos($response, $site_url)) {
preg_match_all($match_fun, $response, $store);
foreach ($store[1] as $k => $v) {
$ismatch = stripos($v, $site_url);
$ismatch = $ismatch ? $ismatch : stripos($v, addcslashes(addslashes($site_url), "/"));
if (false !== $ismatch) {
//计算排名
$rank[$rank_flag] = $start + $k + 1;
//抓取关键词来源
$end = strpos($v, '"', $ismatch);
$source = substr($v, $ismatch, $end);
$source = explode('"', $source);
$rank[$source_flag] = $source[0];
break;
}
}
} else {
$rank["orignal"] = $response;
// log_message('error','google search response not found CH');
}
} else {
$rank["orignal"] = $response;
$rank[$rank_flag] = -1;
}
return $rank;
}
public function test() {
// $ranks = $this->get_search_content_by_yandex('Путеводитель по городу гуйлинь', 'www.chinahighlights.ru');
// $ranks = $this->get_search_content_by_google('PC','travel china', 'https://www.chinahighlights.com',1,"en");
var_dump($ranks);
}
//计算关键词在yandex搜索引擎的排名
public function get_search_content_by_yandex($client_flag,$keyworlds, $site_url, $page = 0, $sitecode = false) {
$site_url .= "/";
$rank['rank'] = 0;
$rank['rank_m'] = 0;
$rank['source'] = $site_url;
$rank['source_m'] = $site_url;
$rank['engines'] = 'yandex';
if ($page > 3) {
$rank['rank'] = 151;
$rank['rank_m'] = 151;
return $rank;
}
$startrank = $page * 10;
$search_worlds = urlencode($keyworlds);
//抓取搜索结果数据
$url = "https://www.yandex.ru/yandsearch?p=$page&text=$search_worlds&lr=21436";
$refer = "https://www.yandex.ru/";
$match_fun = '/<a class=\"link link_theme_normal organic__url link_cropped_no i-bem\"(.*)class=/smUi';
$rank_flag = 'rank';
$source_flag = 'source';
if ($client_flag == 'm') {
$match_fun = '/<a class=\"link link_theme_normal organic__url i-bem\"(.*)class=/smUi';
$rank_flag = 'rank_m';
$source_flag = 'source_m';
}
$response = $this->curl($url,$client_flag,$refer);
if ($response) {
// 分析YANDEX搜索结果计算排名
if (false !== stripos($response, '<h1>302 Found</h1>') ||
false !== stripos($response, 'капчей') || false !== stripos($response, 'captcha')) {
$rank['rank'] = -2;
} elseif (false !== stripos($response, $site_url)) {
preg_match_all($match_fun, $response, $store);
foreach ($store[1] as $k => $v) {
$start_s = stripos($v, $site_url);
$start_s = $start_s ? $start_s : stripos($v, addcslashes(addslashes($site_url), "/"));
if (false !== $start_s) {
$rank[$rank_flag] = $startrank + $k + 1;
$end_s = stripos($v, '" ', $start_s);
$source = substr($v, $start_s, $end_s);
$sources = explode('" ', $source);
$rank[$source_flag] = $sources[0];
break;
}
}
} else {
// log_message('error','yandex not found CH');
}
} else {
$rank[$rank_flag] = -1;
}
return $rank;
}
//从cvs文件导入关键词
public function hand_add($parentid, $bookname) {
$row = 1; //第一行开始
$filename = APPPATH . $bookname . '.csv';
if (($handle = fopen($filename, "r")) !== false) {
while (($dataSrc = fgetcsv($handle)) !== false) {
$num = count($dataSrc);
for ($c = 0; $c < $num; $c++) {//列 column
if ($row === 1) {//第一行作为字段
$dataName[] = $dataSrc[$c]; //字段名称
} else {
foreach ($dataName as $k => $v) {
if ($k == $c) {//对应的字段
$dataRtn[$v] = @iconv('GBK', 'UTF-8', $dataSrc[$c]);
}
}
}
}
if (!empty($dataRtn)) {
$insert_id = $this->InfoStructures_model->Add($parentid);
if ($insert_id && $kw_id = $this->Keywords_model->add_keyworlds($dataRtn['keyword'], $dataRtn['site'], time() - 24 * 60 * 60, $insert_id, 1)) {
$datas[] = array('name' => 'ok', 'value' => $this->Keywords_model->get_keyworld($kw_id));
} else {
$datas[] = array('name' => 'no', 'value' => $this->lang->line('form_info_error'));
}
echo $insert_id;
$data[] = $dataRtn;
}
$row++;
}
fclose($handle);
var_dump($data);
echo 'ok';
}
}
//定时批量更新CDN
public function update_cdn() {
$this->load->model('Logs_model');
$last_update = $this->Logs_model->get_last_cdn_update_info();
if (empty($last_update)) {
$last_log = $this->Logs_model->get_last_log();
$this->Logs_model->write('update_cdn', $last_log->log_id);
$last_update->log_res_id = $last_log->log_id;
}
$last_update_id = $last_update->log_res_id;
$list = $this->Logs_model->get_uncdn_list($last_update_id);
if (empty($list)) {
echo 'updated';
die();
}
//设置需要更新的url路径
$site_path = array();
$path_array = array();
$site_array = array('vac', 'ru', 'it'); //需要更新的站点
foreach ($list as $v) {
if (in_array($v->is_sitecode, $site_array)) {
if (!isset($site_path[$v->is_sitecode])) {
$site_path[$v->is_sitecode] = '';
$path_array[$v->is_sitecode] = array();
}
if (!in_array($v->ic_url, $path_array[$v->is_sitecode])) {
$site_path[$v->is_sitecode].="&path=" . $v->ic_url;
$path_array[$v->is_sitecode][] = $v->ic_url;
}
}
}
//已经给是最新的了
if (empty($site_path)) {
echo 'updated.';
die();
}
//更新CDN缓存
$notice = array();
$flag = false;
$siteconfig = $this->config->item('site');
foreach ($site_path as $k => $cdn) {
$pad = str_replace('http://', '', $siteconfig[$k]['site_url']);
$result = file_get_contents('https://openapi.us.cdnetworks.com/purge/rest/doPurge?user=ycc@chinahighlights.com&pass=cXi2UbsTrw9Urv&pad=' . $pad . '&type=item' . $cdn . '&output=json');
$result = json_decode($result, true);
if ($result['resultCode'] != 200) {
$notice[] = $k . ':' . $result['notice'] . $result['details'];
} else {
$notice[] = $k . ':' . $result['resultCode'] . '<br>' . $cdn;
$flag = TRUE;
}
}
//修改最近更新的信息的log_id,方便下次更新读取数据
if ($flag) {
$lastinfo = end($list);
$this->Logs_model->update('update_cdn', $lastinfo->log_id);
}
var_dump($notice);
}
protected function curl($url, $useragent = 'PC', $referer = false) {
if ($useragent == 'PC') {
$useragent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22";
} else {
$useragent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Mobile Safari/537.36";
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_FAILONERROR, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
// curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
// curl_setopt($ch, CURLOPT_PROXY, "202.103.68.28:11111"); // 本地代理
if ($referer) {
curl_setopt($ch, CURLOPT_REFERER, $referer);
}
$headers = array('content-type: application/x-www-form-urlencoded;charset=UTF-8');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$reponse = curl_exec($ch);
if (curl_errno($ch)) {
log_message('error', "curl error code: ".curl_error($ch).";");
} else {
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (200 !== $httpStatusCode) {
log_message('error', "curl Request html Status Code: ".$httpStatusCode.";");
}
}
curl_close($ch);
return $reponse;
}
public function testrank($kw_is_id=0, $top=1)
{
$data['current_keyworld'] = $this->Keywords_model->get_keyworld_bytreeid($kw_is_id);
$is_id_string = $data['current_keyworld']->kw_id;
$rank_info = $this->Keywordsrank_model->get_rank_list($is_id_string, $top);
foreach ($rank_info as $key => &$value) {
$value['ddd'] = date('Y-m-d H:i:s', $value->kwr_datetime);
}
var_dump($rank_info);
}
}