spider.inc.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <?php
  2. if(!defined('IN_DISCUZ')) {
  3. exit('Access Denied');
  4. }
  5. require_once(DISCUZ_ROOT.'source/plugin/milu_seotool/config.inc.php');
  6. sload('F:spider,F:copyright');
  7. $header_arr = array('spider_set', 'spider_list', 'area_data_count', 'trend_data_count', 'spider_data_clear');
  8. if(!VIP) unset($header_arr[array_search('area_data_count', $header_arr)]);
  9. $args = array('default_ac' => 'spider_set');
  10. $spider_id_arr = $milu_seotool_config['spider_id_arr'];
  11. $spider_type_arr = $milu_seotool_config['spider_type_arr'];
  12. $spider_set = tool_common_get('spider');
  13. $spider_set['spider_type'] = dunserialize($spider_set['spider_type']);
  14. seo_tpl($args);
  15. function spider_set(){
  16. global $_G,$pluin_info,$spider_type_arr,$spider_set;
  17. if($_POST['editsubmit']){
  18. $set = $_POST['set'];
  19. $set['spider_type'] = st_serialize($_POST['spider_type']);
  20. tool_common_set('spider', $set);
  21. cpmsg(stlang('op_success'), PLUGIN_GO."spider", 'succeed');
  22. }else{
  23. $info = $spider_set;
  24. $show .= seoOutput::show_title(stlang('base_set'));
  25. $show .= seoOutput::show_tr(
  26. array(
  27. 'name' => stlang('spider_is_open'),
  28. 'desc' => '',
  29. 'arr' => array(
  30. 'name' => 'is_open_spider',
  31. 'info' => $info,
  32. 'int_val' => 2,
  33. 'lang_type' => 2,
  34. ),
  35. )
  36. ,'radio');
  37. $show .= seoOutput::show_tr(
  38. array(
  39. 'name' => stlang('spider_set_title'),
  40. 'desc' => stlang('spider_set_title_notice'),
  41. 'arr' => array(
  42. 'name' => 'spider_type',
  43. 'info' => $info,
  44. 'multiple' => TRUE,
  45. 'flag' => 2,
  46. 'option_arr' => $spider_type_arr,
  47. ),
  48. )
  49. ,'select');
  50. $info['show'] = $show;
  51. $info['tpl'] = 'common_set';
  52. return $info;
  53. }
  54. }
  55. function spider_list(){
  56. global $_G,$spider_id_arr,$spider_type_arr;
  57. $spider_type_arr = get_user_spider_type();
  58. $set = $_POST['set'];
  59. $set['title'] = $set['title'] ? $set['title'] : $_GET['title'];
  60. $set['spider_type'] = $_GET['spider_type'];
  61. $set['search_dateline_start'] = $set['search_dateline_start'] ? strtotime($set['search_dateline_start']) : '';
  62. $set['search_dateline_end'] = $set['search_dateline_end'] ? strtotime($set['search_dateline_end']) : '';
  63. $set['search_dateline_start'] = $set['search_dateline_start'] ? $set['search_dateline_start'] : $_GET['search_dateline_start'];
  64. $set['search_dateline_end'] = $set['search_dateline_end'] ? $set['search_dateline_end'] : $_GET['search_dateline_end'];
  65. if($set['search_dateline_start'] || $set['search_dateline_end']){
  66. $set['search_dateline_start'] = $set['search_dateline_start'] ? $set['search_dateline_start'] : $_G['timestamp'];
  67. $set['search_dateline_end'] = $set['search_dateline_end'] ? $set['search_dateline_end'] : $_G['timestamp'];
  68. }
  69. if($_GET['fast_search']) $set = array();
  70. $set['fast_search'] = $_GET['fast_search'];
  71. $search_info = $set;
  72. $spider_type_new_arr['all'] = stlang('all');
  73. $spider_type_new_arr = array_merge($spider_type_new_arr, $spider_type_arr);
  74. $search_show .= stlang('title_url_keyword').' '.seoOutput::input(
  75. array(
  76. 'name' => 'title',
  77. 'int_val' => '',
  78. ),$search_info);
  79. $search_show .= ' '.stlang('spider_type').' '.seoOutput::select(
  80. array('option_arr' => $spider_type_new_arr,
  81. 'name' => 'spider_type',
  82. 'int_val' => 'all',
  83. 'flag' => 2,
  84. ),$search_info);
  85. $search_show .= ' '.stlang('spider_date').' '.seoOutput::dateline(
  86. array('option_arr' => $spider_type_new_arr,
  87. 'name' => 'search_dateline',
  88. 'int_val' => 10,
  89. 'date_type' => 2,
  90. ), array('search_dateline_start' => $search_info['search_dateline_start'] ? date('Y-m-d', $search_info['search_dateline_start']) : $search_info['search_dateline_start'], 'search_dateline_end' => $search_info['search_dateline_end'] ? date('Y-m-d', $search_info['search_dateline_end']) : '' ));
  91. $fast_search_arr = array(1 => stlang('baidu_today_spider_log'), 2 =>stlang('dead_link'));
  92. if(!VIP) unset($fast_search_arr[2]);
  93. $fast_search = '';
  94. foreach($fast_search_arr as $k => $v){
  95. $current = isset($search_info['fast_search']) && $k == $search_info['fast_search'] ? 'class="current"' : '';
  96. $link = '?'.PLUGIN_GO.'spider&myac='.$_GET['myac'].'&page='.$page.'&data_type'.$search_info['data_type'].'&fast_search='.$k.'&search_dateline_start='.$set['search_dateline_start'].'&search_dateline_end='.$set['search_dateline_end'];
  97. $fast_search .= '<li '.$current.'><a href="'.$link.'">'.$v.'</a></li>';
  98. }
  99. $perpage = 25;
  100. $page = $_GET['page'] ? intval($_GET['page']) : 1;
  101. $start = ($page-1)*$perpage;
  102. $mpurl = get_args_str($search_info);
  103. $mpurl = '?'.PLUGIN_GO.'spider&myac='.$_GET['myac'].$mpurl;
  104. $where_sql = ' WHERE 1=1 ';
  105. $spider_id = $spider_id_arr[$set['spider_type']];
  106. if($spider_id){
  107. $where_sql .= " AND spider_type='".$spider_id."' ";
  108. }
  109. if($set['search_dateline_start'] && $set['search_dateline_start']){
  110. $where_sql .= " AND dateline>'$set[search_dateline_start]' AND dateline<'$set[search_dateline_end]' ";
  111. }
  112. if($set['title']){
  113. $where_sql .= " AND ( page_title like '%".$set['title']."%' OR page_url like '%".$set['title']."%')";
  114. }
  115. if($set['fast_search']){
  116. if($set['fast_search'] == 1){
  117. $dateline = strtotime(date('Y-m-d'));
  118. $where_sql = " WHERE spider_type='".$spider_id_arr['baiduspider']."' AND dateline>'$dateline' ";
  119. }
  120. if($set['fast_search'] == 2){
  121. $where_sql = " WHERE status='1' ";
  122. }
  123. }
  124. $count = DB::result(DB::query("SELECT COUNT(*) FROM ".DB::table('milu_seotool_spider')." $where_sql"), 0);
  125. $query = DB::query("SELECT * FROM ".DB::table('milu_seotool_spider')." $where_sql ORDER BY dateline DESC LIMIT $start,$perpage");
  126. $spider_id_arr = array_flip($spider_id_arr);
  127. $group_arr = $_G['cache']['milu_seotool']['config']['spider_group_rules'];
  128. if($count){
  129. while($rs = DB::fetch($query)) {
  130. $rs['parent_name'] = $group_arr[$rs['group_parent_id']]['name'];
  131. $rs['parent_name'] = $rs['parent_name'] ? $rs['parent_name'] : stlang('other');
  132. $rs['child_name'] = $group_arr[$rs['group_parent_id']]['child'][$rs['group_child_id']]['name'];
  133. $rs['parent_name'] = $rs['group_parent_id'] ? $rs['parent_name'] : stlang('other');
  134. $rs['child_name'] = $rs['group_child_id'] ? $rs['child_name'] : stlang('other');
  135. $rs['show_group'] = $rs['parent_name'].'-'.$rs['child_name'];
  136. if($rs['group_parent_id'] == 0 &&$rs['group_child_id'] == 0) $rs['show_group'] = stlang('other');
  137. $rs['show_status'] = $rs['status'] == 0 ? seoOutput::show_status('right').stlang('status_normal') : seoOutput::show_status('error').stlang('dead_link');
  138. $rs['dateline'] = $rs['dateline'] ? dgmdate($rs['dateline'], 'u') : '';
  139. $rs['spider_type'] = $spider_type_arr[$spider_id_arr[$rs['spider_type']]];
  140. $rs['show_title'] = cutstr(trim($rs['page_title']), 45);
  141. $rs['show_url'] = cutstr(trim($rs['page_url']), 65);
  142. $list[] = $rs;
  143. }
  144. }
  145. $info['count'] = $count;
  146. $info['list'] = $list;
  147. $info['multipage'] = multi($count, $perpage, $page, $mpurl);
  148. $info['show_title'] = stlang('spider_log_list');
  149. $info['fast_search'] = $fast_search;
  150. $info['search_show'] = dstripslashes($search_show);
  151. $info['tpl'] = 'spider_list';
  152. return $info;
  153. }
  154. //爬行区域统计
  155. function area_data_count(){
  156. global $_G,$view_types_arr,$view_search_type,$spider_id_arr,$spider_type_arr;
  157. $spider_type_arr = get_user_spider_type();
  158. $data_types_default = array_slice ($spider_type_arr, 0, 2);
  159. $view_info['data_types'] = $_POST['data_types'] ? $_POST['data_types'] : reset(array_keys($spider_type_arr));
  160. $view_info['start_dateline'] = $_POST['start_dateline'] ? strtotime($_POST['start_dateline']) : '';
  161. $view_info['end_dateline'] = $_POST['end_dateline'] ? strtotime($_POST['end_dateline']) : '';
  162. $view_info['start_dateline'] = $view_info['start_dateline'] ? $view_info['start_dateline'] : $_G['timestamp'] - 3600*24*7;
  163. $view_info['end_dateline'] = $view_info['end_dateline'] ? $view_info['end_dateline'] : $_G['timestamp'];
  164. $dateline_arr = st_dayRange($view_info['start_dateline'], $view_info['end_dateline']);
  165. $from = $dateline_arr[1]['from'];
  166. $end = $dateline_arr[count($dateline_arr)]['end'];
  167. $group_data = array();
  168. $group_arr = $_G['cache']['milu_seotool']['config']['spider_group_rules'];
  169. foreach($group_arr as $k => $v){
  170. foreach($v['child'] as $k2 => $v2){
  171. $group_data[$k.'_'.$k2]['name'] = $v['name'].'-'.$v2['name'];
  172. }
  173. }
  174. $title = date('Y-m-d', $from).' '.stlang('to_').' '.date('Y-m-d', $end). ' '.$spider_type_arr[$view_info['data_types']].stlang('spider_area_flash');
  175. $FC = get_flash_obj(array('flash_type' => 'Pie3D', 'caption_title' => $caption_title, 'title' => $title, 'width' => '850', 'height' => 500));
  176. $sql = " WHERE dateline<'$end' AND dateline>'$from'";
  177. $spider_id = $spider_id_arr[$view_info['data_types']];
  178. if($spider_id){
  179. $sql .= "AND spider_type='$spider_id'";
  180. }
  181. $query = DB::query("SELECT spider_type,dateline,id,group_child_id,group_parent_id FROM ".DB::table('milu_seotool_spider').$sql);
  182. while($rs = DB::fetch($query)) {
  183. $group_data[$rs['group_parent_id'].'_'.$rs['group_child_id']]['count']++;
  184. }
  185. $flag = '';
  186. foreach($group_data as $k1 => $v1){
  187. if(!$v1['count']) continue;
  188. if(!$v1['name']){
  189. $temp_arr = explode('_', $k1);
  190. $name = $group_arr[$temp_arr[0]]['name'];
  191. $v1['name'] = $name ? $name.'-'.stlang('other') : stlang('other');
  192. }
  193. $FC->addChartData($v1['count'], "name=".$v1['name']);
  194. }
  195. $info['chart_flash'] = $FC->renderChart("", false);
  196. $info['show'] = implode('', $show_arr);
  197. $info['view_show']['data_type'] = seoOutput::select( array('name' => 'data_types', 'option_arr' => $spider_type_arr, 'flag' => 2), $view_info);
  198. $info['start_dateline'] = date('Y-m-d', $view_info['start_dateline']);
  199. $info['end_dateline'] = date('Y-m-d', $view_info['end_dateline']);
  200. $info['tpl'] = 'spider_area_count';
  201. $info['show_title'] = stlang('area_data_count');
  202. return $info;
  203. }
  204. //数据趋势
  205. function trend_data_count(){
  206. global $_G,$view_types_arr,$view_search_type,$spider_id_arr;
  207. $spider_type_arr = get_user_spider_type();
  208. $data_types_default = array_slice ($spider_type_arr, 0, 2);
  209. $view_info['data_types'] = $_POST['data_types'] ? $_POST['data_types'] : array_keys($data_types_default);
  210. $view_info['start_dateline'] = $_POST['start_dateline'] ? strtotime($_POST['start_dateline']) : '';
  211. $view_info['end_dateline'] = $_POST['end_dateline'] ? strtotime($_POST['end_dateline']) : '';
  212. $view_info['start_dateline'] = $view_info['start_dateline'] ? $view_info['start_dateline'] : $_G['timestamp'] - 3600*24*7;
  213. $view_info['end_dateline'] = $view_info['end_dateline'] ? $view_info['end_dateline'] : $_G['timestamp'];
  214. $dateline_arr = st_dayRange($view_info['start_dateline'], $view_info['end_dateline']);
  215. $from = $dateline_arr[1]['from'];
  216. $end = $dateline_arr[count($dateline_arr)]['end'];
  217. $title = date('Y-m-d', $from).' '.stlang('to_').' '.date('Y-m-d', $end). ' '.stlang('spider_trend_flash');
  218. $FC = get_flash_obj(array('caption_title' => $caption_title, 'title' => $title, 'width' => '100%', 'height' => 400, 'yAxisName' => '次'));
  219. $sql = " WHERE dateline<'$end' AND dateline>'$from'";
  220. $spider_id_data_arr = get_spider_id($view_info['data_types']);
  221. if($spider_id_data_arr){
  222. $sql .= "AND spider_type IN(".dimplode($spider_id_data_arr).")" ;
  223. }
  224. $query = DB::query("SELECT spider_type,dateline,id FROM ".DB::table('milu_seotool_spider').$sql);
  225. while($rs = DB::fetch($query)) {
  226. foreach($dateline_arr as $k => $v){
  227. if($rs['dateline'] < $v['end'] && $rs['dateline'] > $v['from']){
  228. $dateline_arr[$k]['count'][$rs['spider_type']]++;
  229. }
  230. }
  231. }
  232. $flag = '';
  233. foreach($view_info['data_types'] as $k1 => $v1){
  234. $FC->addDataset($spider_type_arr[$v1]);
  235. $spider_id = $spider_id_arr[$v1];
  236. foreach($dateline_arr as $k => $v){
  237. $key_str = $v1.$k1;
  238. $flag = $flag ? $flag : $key_str;
  239. if($flag && $key_str == $flag) {
  240. $FC->addCategory($v['name']);
  241. }
  242. $FC->addChartData($v['count'][$spider_id]);
  243. }
  244. }
  245. $info['chart_flash'] = $FC->renderChart("", false);
  246. $info['show'] = implode('', $show_arr);
  247. $info['view_show']['data_type'] = seoOutput::checkbox( array('name' => 'data_types', 'option_arr' => $spider_type_arr), $view_info);
  248. $info['start_dateline'] = date('Y-m-d', $view_info['start_dateline']);
  249. $info['end_dateline'] = date('Y-m-d', $view_info['end_dateline']);
  250. $info['tpl'] = 'spider_count_trend';
  251. return $info;
  252. }
  253. //数据清理
  254. function spider_data_clear(){
  255. global $_G;
  256. if($_POST['editsubmit']){
  257. $time_data_clear = intval($_POST['time_data_clear']);
  258. $dateline = 0;
  259. if($time_data_clear == 1){//一个月前
  260. $dateline = $_G['timestamp'] - 3600*24*30;
  261. }else if($time_data_clear == 2){//三个月前
  262. $dateline = $_G['timestamp'] - 3600*24*30*3;
  263. }else if($time_data_clear == 3){//全部
  264. $dateline = $_G['timestamp'];
  265. }else{//一周前
  266. $dateline = $_G['timestamp'] - 3600*24*7;
  267. }
  268. DB::query('DELETE FROM '.DB::table('milu_seotool_spider')." WHERE dateline<'$dateline'");
  269. cpmsg(stlang('op_success'), PLUGIN_GO."spider&myac=spider_data_clear", 'succeed');
  270. }else{
  271. $show .= seoOutput::show_title(stlang('spider_data_clear'));
  272. $show .= seoOutput::show_tr(
  273. array(
  274. 'name' => stlang('time_data_clear'),
  275. 'desc' => '',
  276. 'arr' => array(
  277. 'name' => 'time_data_clear',
  278. 'info' => array(),
  279. 'flag' => 2,
  280. 'option_arr' => array('1'.stlang('pre_week'), '1'.stlang('pre_month'), '3'.stlang('pre_month'), stlang('all')),
  281. ),
  282. )
  283. ,'select');
  284. $info['show'] = $show;
  285. $info['tpl'] = 'common_set';
  286. return $info;
  287. }
  288. }
  289. function get_spider_id($data){
  290. global $spider_id_arr;
  291. foreach((array)$data as $k => $v){
  292. $data[$k] = $spider_id_arr[$v];
  293. }
  294. return $data;
  295. }
  296. ?>