![]() |
| カレッヂ |
質問者 へたれ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裏技 |