Webユーザの興味を捕捉するPHPクラス [開発途中/under development]

リファラの内容からユーザの興味があるであろうキーワードをとらえるPHPクラスを書いてみました。

単純にリファラしか見ていませんので、未完成ですが、ランディング時にCookieを吐き出しといて、後でUAからそのCookieをもらって、キーワードに従って表示内容を変える…とかやると、使い道がありそう。誰かよかったら続きを書いてくださいw

使い方

$u = new userInfo(array(
 'keywords'	=>array('ピザ','パスタ','サンドイッチ'),
 'regularize_list'=>array(
  'pizza'	=>'ピザ',
  'ピッツァ'	=>'ピザ',
  'pasta'	=>'パスタ',
  'スパゲッティ'	=>'パスタ',
  'spaghetti'	=>'パスタ',
  'マカロニ'	=>'パスタ',
  'サンドウィッチ'=>'サンドイッチ',
  'sandwich'	=>'サンドイッチ',
  'sand-witch'	=>'サンドイッチ', //lol
 )
));

print_r($u->is_intended('ピッツァ')); // echos 1

パラメタ’keyword’には捉えたいターゲットキーワードのリスト。

‘regularize_list’には、表記の違いなどを吸収するために、

'[ありがちな単語]'=>'[ターゲットキーワード]'

の組み合わせをマッピングする連想配列を渡します。

 class userInfo {
var $search_engines = array(
 'www.google.co.jp'		 => array('key' => 'q'),
 'search.yahoo.co.jp'		 => array('key' => 'p'),
 'www.excite.co.jp'		 => array('key' => 'search'),
 'www.bing.com'			 => array('key' => 'q'),
 'search.goo.ne.jp'		 => array('key' => 'MT'),
 'cgi.search.biglobe.ne.jp'	 => array('key' => 'q'),
 'search.nifty.com'		 => array('key' => 'q'),
 'search.yahoo.com'		 => array('key' => 'p'),
);
var $intended = array();
var $args = array();

function __construct($args=null) {
 $this->args = $this->parse_args(array(
  'referer' => $_SERVER['HTTP_HTTP_REFERER'],
  'keywords' => array(),
  'regularize_list' => array(),
 ), $args);
 foreach ($this->args['keywords'] as $k) {
  $this->args['regularize_list'][$k] = $k;
 }
 $this->parse_referer();
}

function parse_referer($referer = null) {
 if (empty($referer)) $referer = $this->args['referer'];
 if (empty($referer)) return;
 else $this->args['referer'] = $referer;

 $r = parse_url($referer);
 $keyword_string = '';
 parse_str($r['query'], $get);

 if (array_key_exists($r['host'], $this->search_engines)) {
  $keyword_string = $get[$this->search_engines[$r['host']]['key']];
  $this->parse_words($keyword_string);
 }
 $this->parse_words(array_merge((array)$r['path'], array_values($get)));
}

function parse_args($defaults, $args) {
 $a = array();
 $defaults = (array) $defaults;
 foreach ($defaults as $k => $v) {
  $a[$k] = isset($args[$k]) ? $args[$k] : $defaults[$k];
 }
 return $a;
}

function is_intended($keyword) {
 return in_array($keyword, $this->intended);
}

function parse_words($phrases, $keywords=array()) {
 $phrases = (array) $phrases;
 if (empty($phrases)) return;

 if (empty($keywords)) $keywords = array_keys($this->args['regularize_list']);
 foreach ($phrases as $p) {
  foreach ($keywords as $kw) {
   $re = sprintf('/%s/',str_replace('/','\x2f',$kw));
   if (preg_match($re, $p)) {
    if (!in_array($kw=$this->args['regularize_list'][$kw], $this->intended)) $this->intended[] = $kw;
   }
  }
 }

}

function regularize_keyword($keyword) {
 return $this->args['regularize_list'][$keyword];
}

} // END OF CLASS USERINFO.

免責

このスクリプトを使用することによって何らかの不利益を被ったとしても私は何ら感知いたしません。

Leave a Reply