CGI-BBS > CGI > Perl > HTTP_REFERERから取得したアドレスからキーワードを抽出したい


カレッヂ
カレッヂ


質問者 へたれSE  投稿日 2010/6/14(月) 14:12:10  [削除] (返信・回答が付いた後にこの質問の削除はできません)
只今、自己流のアクセス解析プログラムを作成中です。

$ENV{'HTTP_REFERER'}を使って、検索サイトからのURLをエンコードして日本語表記に直すところまで出来ました。

その後、そのURLの検索キーワード部分を抽出したいのですが出来なくて困っています。

それに、検索エンジンごとに”検索キーの設定(Yahooなら「p」、グーグルなら「q」)”が異なるため、検索サイト別に検索キーを設定して抽出しなければなりません。

あまりプログラム改造に慣れていないので「わかりやすく教えていただける方」募集しています。

最終的に・・・
$se:検索エンジン名
$keyword:検索ワード
が抽出出来ればいいのですが。


現状では、下記のように「=」と「&」で分割して”何番目”にキーワードがあるかで抽出しています。
本来あるべき「検索キー」による抽出を目指しています。

# ---------------------
# 検索エンジン・検索キーワード抽出
# ---------------------

# 初期化
$se ="";

$url = $ENV{'HTTP_REFERER'};

#デコード
$url =~ m/%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}/;
$url =~ tr/+/ /;

	require $simag;
	if ( &simaguni'loadbook8($simag) ) {
		&simaguni'decode8(*url, 'euc');
		&simaguni'unloadbook8();
	} else {
		# URLデコード
		$url =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;

		require $jcode;
		jcode::convert(\$url, 'euc');
	}

if(($url =~ /search/)||($url =~ /cgi\.search\./)){
	if($url =~ /yahoo/){
		$se = "Yahoo";
		$kt = "=";
		$kf = "&";
		$keyposition = 1;
		$keymap = 0;
		$keymap = 0;
	}
	elsif($url =~ /google/){
		$se = "Google";
		$kt = "=";
		$kf = "&";
		$keyposition = 2;
		$keymap = 0;
	}
	elsif($url =~ /bing/){
		$se = "Bing";
		$kt = "=";
		$kf = "&";
		$keyposition = 1;
		$keymap = 0;
	}
	elsif($url =~ /goo/){
		$se = "Goo";
		$kt = "=";
		$kf = "&";
		$keyposition = 1;
		$keymap = 0;
	}
	elsif($url =~ /infoseek/){
		$se = "Infoseek";
		$kt = "=";
		$kf = "&";
		$keyposition = 1;
		$keymap = 0;
	}
	elsif($url =~ /biglobe/){
		$se = "Biglobe";
		$kt = "/";
		$kf = "=";
		$keyposition = 4;
		$keymap = 2;
	}
	elsif($url =~ /excite/){
		$se = "Exite";
		$kt = "=";
		$kf = "&";
		$keyposition = 1;
		$keymap = 0;
	}
	elsif($url =~ /lycos/){
		$se = "Lycos";
		$kt = "=";
		$kf = "&";
		$keyposition = 2;
		$keymap = 0;
	}
	elsif($url =~ /fresheye/){
		$se = "FreshEye";
		$kt = "=";
		$kf = "&";
		$keyposition = 1;
		$keymap = 0;
	}
	elsif($url =~ /nifty/){
		$se = "Nifty";
		$kt = "=";
		$kf = "&";
		$keyposition = 4;
		$keymap = 0;
	}
}

($keyword) = (split(/$kt/,$url))[$keyposition];
($keyword) = (split(/$kf/,$keyword))[$keymap];

jcode::convert(\$keyword, 'euc');
jcode::tr(\$keyword, ' ',' ');

【プロバイダ】lolipop
【習熟度】多少の改造ができる

返信(回答)する

 


Web裏技