人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP

下記のスクリプト(class or function)を書いてください。

質問が長くなりましたので、 http://d.hatena.ne.jp/esecua/20100314 を御覧下さい。

●質問者: esecua
●カテゴリ:ウェブ制作
✍キーワード:Class PHP スクリプト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Soraneko
●0ポイント

すみません。

書き忘れていましたが、このコードはUTF-8の環境で動作確認しています。


2 ● Soraneko
●18ポイント

PHP始めたばかりで自身がありませんが、やってみました。

また、サンプルとしてのGoogle検索URLのキーワードは"は hatena は"です。


print_r(searchword("はてな,hatena,ハテナ"));

function searchword($keyword){

//googleのURLからqの要素を取り出し、デコードします。($googlekeywords)

$ref = "http://www.google.co.jp/search?num=50&hl=ja&safe=off&rlz=1T4ADBS...";

$googlekeywords = $match[preg_match("/q=(.*?)&/",$ref,$match)];

$googlekeywords = urldecode($googlekeywords);

//そして半角スペース区切りで配列を作ります。($searchedKeyWord)

$searchedKeyWord = explode(" ", $googlekeywords);

//キーワードは半角コンマ区切りで配列を作ります。($keywords)

$keywords = explode(",", $keyword);

for($i=0;count($keywords)>$i;$i++){

for($j=0;count($searchedKeyWord)>$j;$j++){

//用意したキーワードが検索されたキーワードに含まれているとtureを返します。

if(preg_match("/$keywords[$i]/",$searchedKeyWord[$j])){

return ture;

}

}

}

return false;

}


キーワードのマッチのところですが、"含む"ではなく完全一致を求めるのであれば


if(keywords[$i] == $searchedKeyWord[$j])

return ture;


としてください。


3 ● tobeoscontinue
●62ポイント
<?php
function strpull($target, $from, $to) {
// strposで検索する文字列が無いと処理が面倒になるので$targetの後ろに付加して(番兵)常に見つかるようにしている。
 $target = substr($target, strpos($target.$from,$from)+strlen($from));
 return substr($target, 0, strpos($target.$to, $to));
}

function searchword($keyword, $q='q') {
 $searchedKeyWord = urldecode(strpull($_SERVER["HTTP_REFERER"],$q.'=', '&'));
 echo "target=$searchedKeyWord\n";
 echo "keyword=$keyword\n";
 $keywords = explode(',', $keyword);
 foreach ($keywords as $word)
 if (stripos($searchedKeyWord, $word) !== FALSE)// strposなら大文字小文字を区別します
 return TRUE;
 return FALSE;
}

var_dump(searchword("はてな,Hatena,ハテナ"));

?>

strpullは$targetの文字列の中から$fromから$toで囲まれる部分の文字列を返します。

この場合は$targetは$_SERVER["HTTP_REFERER"]で$from、$toは"q=","&"になります。


$keywordはカンマで区切られているのでexplodeで配列にします。

$searchedKeyWordは配列に展開せずに文字列として、その中に$keywordの単語があるか毎回検索する方法です。

単純に文字列のまま処理することで+ や「%E3%80%80」などや検索オプションへの対応をしなくてすますためです。

◎質問者からの返答

good job

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ