返回顶部

收藏

搜索引擎来源关键字分析程序

更多
<?php
/**
 * 分析搜索引擎到来的关键字
 * 
 * 
 * @author zhangjun
 * @charset utf-8
 */
class searchTerms {
    public static $banUrl = array('qq.com','localhost'); //不解析的referer 有利于加快程序处理速度

    public static $parseHost = array('baidu','google','360','soso');  //能解析的referer

    /**
     * 主方法
     * @return boolean || array
     */
    public static function keyword(){
        if(!isset($_SERVER['HTTP_REFERER']))
            return false;
        $referer = trim($_SERVER['HTTP_REFERER']);
        $refererArr = parse_url($referer);

        //判断refer是否来至不需要分析的地址。
        if(self::inBanUrl($refererArr['host'])) 
            return false;

        $hasParseFun = false;
        foreach(self::$parseHost as $host) {
            if(strpos ($refererArr['host'],$host) !== false) { 
                $hasParseFun = true;
                break;
            }   
        }

        if(!$hasParseFun)
            return false;

        $queryVars = array();
        parse_str($refererArr['query'], $queryVars);
        //调用每个搜索引擎的单独处理方法
        $method = 'parse'.ucfirst($host);
        return self::$method($queryVars);
    }
    /* 已取消使用正则的方式。
    public static function buldPattern($rule) {
        $host = str_replace('.', '\\.', $rule['host']);
        $patterns = array();
        foreach ($rule['key'] as $key) {
            $patterns[] = $host . '.+?'.$key.'=';
        } 
        return "/(?:" . implode('|', $patterns).')([^&]*)/';
    }*/
    public static function inBanUrl($referer) {
        foreach(self::$banUrl as $url) {
            if(strpos($url, $referer) !== false) 
                return true;
        }
        return false;
    }

    public static function parseBaidu($params)
    {
        $searchTerms = '';
        if(isset($params['kw'])) {
            $searchTerms = $params['kw'];
        } else if(isset ($params['wd'])) {
            $searchTerms = $params['wd'];
        } else if(isset ($params['word'])) {
            $searchTerms = $params['word'];
        }

        return isset($params['ie']) && (strtolower($params['ie']) == 'utf-8') ? $searchTerms : iconv('gbk', 'utf-8', $searchTerms);
    }

    public static function parseGoogle($params)
    {
        $searchTerms = '';
        if(isset($params['q'])) {
            $searchTerms = $params['q'];
        }
        return isset($params['ie']) && ($params['ie'] == "GB") ? iconv('gbk', 'utf-8', $searchTerms) : $params['q'];
    }

    public static function parse360($params)
    {
        $searchTerms = '';
        if(isset($params['q'])) {
            $searchTerms = $params['q'];
        }
        return $searchTerms;
    }

    public static function parseSoso($params)
    {
        $searchTerms = '';
        if(isset($params['w'])) {
            $searchTerms = $params['w'];
        }
        return iconv('gbk', 'utf-8', $searchTerms);
    }
}
//该片段来自于http://outofmemory.cn

标签:php,网络

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. 持续的思考 发表 2012-09-05 08:43:57 php异步i/o非阻塞网络编程
  2. lucifer 发表 2011-10-25 11:33:44 ubuntu10.10下配置Apache+MySQL+PHP【结合网络文章】
  3. 郑永 发表 2013-09-14 16:50:26 介绍一款优秀的php小偷程序
  4. 郑永 发表 2013-09-20 00:34:38 手机搭建php+mysql完美运行wordpress
  5. 老高 发表 2016-12-19 06:38:00 PHP判断网络连通
  6. 中國壹石頭 发表 2012-10-09 08:45:28 virtualbox中freebsd的网络配置
  7. Qing 发表 2014-12-04 15:43:48 PHP 安全与优化杂记
  8. kaixinfelix 发表 2015-01-23 03:21:18 如何设计自己的Php框架——要点总结
  9. admin 发表 2015-04-24 00:44:06 php中实现后台执行的方法
  10. alex 发表 2014-04-23 03:03:12 中国天气网城市代码
  11. admin 发表 2014-12-18 11:16:42 PHP 5.5.19的php-fpm参考配置文件
  12. Hiro 发表 2009-12-11 07:15:58 PHP:pathinfo()获得文件的路径、名称等信息

发表评论