function.keyword.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. if(!defined('IN_DISCUZ')) {
  3. exit('Access Denied');
  4. }
  5. function get_rank_data($keyword, $view_num = 100, $update = 0){
  6. global $_G;
  7. $daytime = date('Ymd');
  8. $cache_key = md5($keyword);
  9. $keyword_set = tool_common_get('keyword');
  10. $st_cache_data = $keyword_set['rank_data'];
  11. $cache_keyword_data = $st_cache_data['data'];
  12. if($st_cache_data['daytime'] != $daytime) {
  13. unset($st_cache_data);
  14. save_syscache('milu_seotool_keyword_data', array());
  15. }
  16. if(!$st_cache_data || $update == 1 || !$st_cache_data['data'][$cache_key]){
  17. $keyword = st_addslashes($keyword);
  18. $base_sql = "SELECT k.*,r.* FROM ".DB::table('milu_seotool_keyword')." as k Inner Join ".DB::table('milu_seotool_keyword_rank')." as r ON r.kid=k.kid WHERE name='$keyword' AND ";
  19. $info = DB::fetch_first($base_sql."r.daytime='$daytime'");
  20. if($info){
  21. $rank_arr = explode(',', $info['rank']);
  22. }else{
  23. $rank_arr = get_ranking($keyword, $view_num);
  24. $keyword_info = DB::fetch_first("SELECT kid FROM ".DB::table('milu_seotool_keyword')." WHERE name='$keyword'");
  25. if(!$keyword_info){
  26. $kid = DB::insert('milu_seotool_keyword', array('name' => $keyword), TRUE);
  27. }else{
  28. $kid = $keyword_info['kid'];
  29. }
  30. $set['kid'] = $kid;
  31. $set['daytime'] = $daytime;
  32. $set['rank'] = implode(',', $rank_arr);
  33. DB::insert('milu_seotool_keyword_rank', $set, TRUE);
  34. }
  35. //查询排名上升还是下降
  36. $last_info = DB::fetch_first($base_sql."r.daytime<'$daytime' ORDER BY daytime DESC LIMIT 1");
  37. $now_rank = min($rank_arr);
  38. $last_rank = min(explode(',', $last_info['rank']));
  39. $keyword_trend = $last_rank - $now_rank;
  40. if(!$last_rank && $now_rank) $keyword_trend = '+';
  41. if($last_rank && !$now_rank) $keyword_trend = '-';
  42. $keyword_data = array('keyword' => $keyword, 'rank' => $rank_arr, 'trend' => $keyword_trend);
  43. $cache_keyword_data[$cache_key] = $keyword_data;
  44. $st_cache_data['daytime'] = $daytime;
  45. $st_cache_data['data'] = $cache_keyword_data;
  46. tool_common_set('keyword', array('rank_data' => $st_cache_data));
  47. }else{//缓存
  48. $keyword_data = $cache_keyword_data[$cache_key];
  49. }
  50. return $keyword_data;
  51. }
  52. // $rn每页数量 pn目前的数量
  53. function get_ranking($keyword,$view_num = 100, $pn = 0, $data_arr = array()){
  54. global $_G;
  55. $siteurl = $_G['siteurl'];
  56. $url_info = st_get_host_info($siteurl);
  57. $host = $url_info['host'];
  58. $rn = 100;
  59. $search_url = 'http://www.baidu.com/s?wd='.$keyword.'&pn='.$pn.'&rn='.$rn.'';
  60. $content = st_get_contents($search_url.$host, array('cache' => 3600));
  61. preg_match_all('/<div class="f13"><span class="g">(.*?)<\/span>/i',$content,$arr);
  62. foreach($arr[1] as $k => $v){
  63. $v = st_striptext($v);
  64. $v_arr = explode('>', $v);
  65. $match_url = $v_arr[0];
  66. if(strexists($match_url, $host)) $data_arr[] = $pn + $k+1;
  67. }
  68. $pn += $rn;
  69. if($pn < $view_num) return get_ranking($keyword, $view_num, $pn, $data_arr);
  70. return $data_arr;
  71. }
  72. ?>