作者:上村崇 フリーランスのIT系エンジニア
twitter:@uemera facebook:uemura

【連載】Webサービス制作日記#05 HTMLパーサを使う


順位検索ツールの処理フロー

スポンサードサーチ順位検索ツールは、以下のようなデータのやりとりをすることになります。
 
201009292147.jpg
 
ユーザからのリクエストをWebサーバで受けたら、それをトリガにしてYahooに検索に行きます。
WebサーバはYahooからの応答受け取ったあと、それを加工して、ユーザに返します。
 
Yahooへの問い合わせは以下のような応答を想定しています。
 
入力:
検索したいキーワード名
検索順位を調べたいサイトのURL(ドメイン名)
 
出力:
順位
 
自然検索(通常の検索)の場合はこういう入出力を提供してくれるAPIがYahooデベロッパーネットワークで提供されていて、それを使うことで上記の結果を受け取れます。
スポンサードサーチを含む、リスティング広告のAPIもリスティング広告のサイトを見ると存在するみたいなのですが、使用するためには法人登録をしなければならず、かつYahooの審査を経てテクノロジーソリューションパートナーというのにならないとダメみたいです。
ということで個人には敷居が高いのでこのAPIを使うのはあきらめようと思います。
 
 

HTMLパーサを使う

そこで仕方が無いので、APIを使わず
1.人が普通にYahoo検索するようにHTTPリクエストを送信して、
2.Yahooから結果をHTMLで受け取って
3.そのHTMLコンテンツの中から欲しい情報を抜き出す
という方法でデータを取ってくることにします。
 
つまり、以下のようにYahooに普通にHTTPリクエストを送信した結果をHTMLで受け取って、自分が必要なデータだけ切り取って加工するというものです。
「スポンサードサーチ」というキーワードで検索すれば、その下にスポンサーのリストが<li>タグで並んでいるということが分かります。
この必要な部分だけを抜き出す、という作業はプログラムでやることができます。
 
201009282202.jpg
 
文字列操作関数で泥臭くやることもできますが、ここでHTMLパーサを使えばもう少しスマートにできます。
パーサとは「解析する」と訳せばいいでしょうか。
HTMLを構文解析してくれるので、これを使えば簡単な指定で欲しい情報を抜き出すことができます。
 
パーサとは【parser】(パーザ) – 意味/解説/説明/定義 : IT用語辞典
http://e-words.jp/w/E38391E383BCE382B5.html
 
今回はこれを使いました。
PHP Simple HTML DOM Parser
http://simplehtmldom.sourceforge.net/
 
探せば他にもいろいろなパーサがあります。
もちろん、今回はPHPで作るのでPHPから組み込めるパーサでなければなりません。
Perlで作ってるならPerl対応のHTMLパーサを使う必要があります。
これを使えば、たとえば<li>の中の文字列だって簡単に取ってこれます。
 
まず、yahooにリクエストを送信して結果を$htmlに入れたあと、
[php]
$html = file_get_html("http://yahoo.co.jp/…");
[/php]
 
こんな風に繰り返し処理で使うと<ul>と<li>を探してリストの中身をとってくることができます。
[php]
foreach( $html->find(‘ul’) as $ul )
{
foreach( $ul->find(‘li’) as $li )
{
// $li には<li>と</li>で囲まれた部分の文字列が入っている.
}
}
[/php]
 
こうやってWebサーバで抽出した文字列を適当に加工したり、順位を計算したりしてユーザにHTMLデータとして返せばいいわけです。
 
 
 
過去のエントリ
【連載】Webサービス制作日記#04 データベースを使う
【連載】Webサービス制作日記#03 プラットフォームを決める
【連載】Webサービス制作日記#02 要件を決める
【連載】Webサービス制作日記#01 何を作ろうとしているか

関連記事


【連載】Webサービス制作日記#09 CakePHPのデータベースアクセスは便利
CakePHPは、PHPの開発でよく使う機能や方法論をフレームワークという形であらかじめ用意してくれていますので、1からPHPでコードを書く必要が無いことが多いです。 データベースへのアクセスは通常はSQLを使いますが、 …

【連載】Webサービス制作日記#08 グラフ描画ツールを使う
グラフ描画ツールとして、jqPlotを使うことにします。 jqPlotは、jQueryのプラグインとして動作します。     javascriptのグラフ描画ツールは最近かなり充実してきている感じがします。jQueryは …

【連載】Webサービス制作日記#07 cronでスケジュール実行
スポンサードサーチ検索ツールには、リアルタイムに検索できる機能だけではなくて、過去のデータを遡って表示したり時系列グラフ表示する機能をつけます。 そのためには、過去の順位情報を残しておかなければなりません。 毎日定期的に …

【連載】Webサービス制作日記#06 jQueryでAjaxする
スポンサードサーチ検索ツールは、一度に複数の検索を実行出来るようにしています。 ユーザがあらかじめ設定しておいた複数のキーワードごとに、一度に検索を実行して現在順位をYahooからとってきて一度に表示します。 しかしここ …

【連載】Webサービス制作日記#03 プラットフォームを決める
どのツールを使って作るかを決めます。 一度使うと決めたツールは、あとから変えたいと思ってもなかなか変えられないことが多いので、ここはよく考える必要があります。   どの言語を使うか? プラットフォームは? 例えばプログラ …

2 Replies to “【連載】Webサービス制作日記#05 HTMLパーサを使う”

  1. 記事として簡潔で分かりやすいですね。
    ただ、前回登場したDBが省略されちゃってて「あれ?」って感じかな。
    今回の画だけ見ると、リアルタイムでの検索しかできないような気がして・・

    きっと、次回以降で説明がある、ということですな!

  2. あっそうですね。DBのテーブルの説明は全部やってませんね。
    あまり細かくやると終わらなくなっちゃうし、書くのもメンドイので、なるべくエッセンスだけにしようと思っています。
    それと、そのときの気分で書いているので、あまり前後の脈絡はないかもです。すみません!
    フィードバックあれば、その都度反映させていこうと思います。
    もちろんリアルタイム検索だけじゃないので、ほかの機能はまた次回以降に。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です