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