検索サービスで順位を調べる仕組みができないかと思いYahoo! デベロッパーネットワークで遊んでみる。あるようで無かったなぁって感じの仕組みが作れるかも。
↓
検索結果がXMLで送られてくる
↓
phpで解析して表にする
まだ日本語処理は後にして適当な検索語(とりあえず「wii」で)でクエリーを送ってみる。
さて、phpでxmlを解析するにはどうすれば?
ここ(http://www.it-top.biz/yjws/doc/yjws3/)を参考にしてみるがウチの環境では「xmldom」が入っていないので使えない?!phpを再コンパイルするはめに?めんどくせぇなぁ。何か簡単な方法ないかなぁ...。
なのでxmlをphpで解析することのみを調べてみる。すると「xml_parse_into_struct()」って便利な関数があるじゃないですか。ここ(http://www.phpoo.net/index.php?p=function.xml-parse-into-struct.html)を参考に見様見まねでスクリプトを組んでみる。
$url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?
appid=$id&results=10&query=".$query;//実際は改行なし
//xmlを取得
if(!($content = file_get_contents($url))){
print "失敗";exit;
}
// XMLデータを配列に格納
$xml_parser=xml_parser_create();
xml_parse_into_struct($xml_parser,$content,$vals,$index);
xml_parser_free($xml_parser);
print_r($index);
print_r($vals);
結果の抜粋。
$indexの値
(
[TITLE] => Array
(
[0] => 2
[1] => 18
[2] => 34
)
)
$valsの値
(
[2] => Array
(
[tag] => TITLE
[type] => complete
[level] => 3
[value] => Wii [ウィー]
)
※3-18番目の要素は省略
[18] => Array
(
[tag] => TITLE
[type] => complete
[level] => 3
[value] => Wii.com
)
※19-34番目の要素は省略
[34] => Array
(
[tag] => TITLE
[type] => complete
[level] => 3
[value] => 任天堂「Wii」のニュース、ソフト発売予定、本体スペック・機能紹介など ~ N-Wii.net ~
)
※最後の要素まで
)
なるほど、配列$index[$index['TITLE']]の0番目の値が「2」だから配列$valsの2番目の配列が検索結果の2番目を指すということか。
$vals[$index['TITLE'][0]]['value']]が「Wii [ウィー]」、$vals[$index['TITLE'][1]]['value']]が「Wii.com」、$vals[$index['TITLE'][2]]['value']]が「任天堂「Wii」のニュース、ソフト発売予定、本体スペック・機能紹介など ~ N-Wii.net ~」ということですね。配列$indexから配列$valsを参照して何とか値がとれそうだ。
さしあたって欲しい値は検索結果のタイトルとURLでいいや。
foreach ($index as $key=>$val) {
if($key == 'TITLE' || $key == 'URL'){
foreach ($val as $tmpkey=>$tmpval) {
$result[$tmpkey][$key]=$vals[$tmpval]['value'];
}
}
}として、$resultに格納する。
おかしい。URLがずれている...。1個飛びにずれている。
<Title>Wii.com</Title>
<Summary>
任天堂 , 製品とサービス任天堂 , Nintendo (以下省略)
</Summary>
<Url>http://wii.com/</Url>
<ClickUrl>
http://wrs.search.yahoo.co.jp/l=WS1/R=2/IPC=jp/SHE=0/H=1/;_ylt=A8vY(以下省略)
</ClickUrl>
<ModificationDate>1168527600</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>
http://wrs.search.yahoo.co.jp/l=WS5/R=2/;_ylt=A8vY5mfA1L(以下省略)
</Url>
<Size>1875</Size>
</Cache>
</Result>
$j=0;
for($i=0;$i<count($index['URL']);$i+=2){
$index['TMPURL'][$j]=$index['URL'][$i];
$vals['TMPURL'][$j]=$vals[$index['URL'][$i]]['value'];
$j++;
}参考URL:
http://kosugi-houseidori.net/log/eid172.html
http://www.ip-network.org/2005/12/yahoo.html
http://netcal.blog7.fc2.com/blog-entry-270.html
http://buzei.blog33.fc2.com/blog-entry-4.html
http://d.hatena.ne.jp/rytich/20061012/1160659088
http://www.nnistar.com/archives/200512180135.php
Ogawa::Memoranda
深追い.com
一語で検索