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

順位検索ツールの処理フロー スポンサードサーチ順位検索ツールは、以下のようなデータのやりとりをすることになります。     ユーザからのリクエストをWebサーバで受けたら、それをトリガにしてYahooに検索に行きます。 …

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

スポンサードサーチ順位検索ツールは、以下のようなデータのやりとりをすることになります。
 
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 何を作ろうとしているか


MicrosoftがWordPressと提携、WindowsLiveの標準ブログサービスに

MicrosoftのWindows Liveブログが、WordPressと提携し、WordPressを標準のブログシステムにするというアナウンスがありました。 3000万人ものブログユーザを擁するWindowsLiveで …

MicrosoftのWindows Liveブログが、WordPressと提携し、WordPressを標準のブログシステムにするというアナウンスがありました。
3000万人ものブログユーザを擁するWindowsLiveですから、これはきっとWordPressにとっても大きな飛躍になるんじゃないでしょうか。
Microsoftのサポートを受けて、進化が加速しそうですね。
Windows Live Writerという、クライアントPCにインストールするタイプの便利なブログ投稿ツールがあり、既にこのツールからWordPressへの投稿も出来るのですが、提携によりこのツールのWordPress親和性がますます良くなるかも知れません。
 
誠 Biz.ID:Microsoft、Windows Liveのブログを閉鎖へ——WordPressに移行
http://bizmakoto.jp/bizid/articles/1009/28/news031.html
 
201009282210.jpg
 
米マイクロソフトがWordpress.comと提携、WindowsLiveの標準ブログサービスに 【増田(@maskin)真樹】 : TechWave
http://techwave.jp/archives/51506825.html
 
Welcome Windows Live Spaces Bloggers — Blog — WordPress.com(英語)
http://en.blog.wordpress.com/2010/09/27/welcome-windows-live-spaces-bloggers/


しょうゆ顔のCMS、SoyCMS

昨日はWeb制作者さん関係の宴会に呼ばれて難波まで行ってきました。 毎回バラエティー豊かな方とお会いできる機会を設けていただきありがたい限りです。   今回、お近づきになれて嬉しかったのは、照明関係のネットショップの社長 …

昨日はWeb制作者さん関係の宴会に呼ばれて難波まで行ってきました。
毎回バラエティー豊かな方とお会いできる機会を設けていただきありがたい限りです。
 
今回、お近づきになれて嬉しかったのは、照明関係のネットショップの社長さんと、SoyCMSの中の人。
SoyCMSは去年京都で行われたオープンソースカンファレンスで受けたセミナーで紹介されていたので知っていました。
 
[過去の関連記事:自分にベストなCMSはどれ?]
https://toyao.net/wp/?p=2682
 
SoyCMSは株式会社日本情報化農業研究所が作っています。京大出身者が立ち上げた若さあふれるベンチャー企業です。
Smartyのようなテンプレートエンジンを使わず、HTMLの中に自然な感じでタグを入れていけるタイプのCMSのため、プログラミングの経験があまり無い方にもとっつきやすいそうです。
僕はまだ触ってみたことはありませんが、面白そうなのでそのうち触ってみたいとは思います。
 
CMSは国内、海外共にいろいろなものが出ている割には決め手になるものがなかなかない状況なので、SoyCMSにはぜひ頑張ってもらいたいですね。
 
 
SoyCMSシールをもらっちゃいました。
こんな風にパソコンに貼っちゃいたい衝動に駆られましたが、大事なパソコンが汚れるとあとで後悔しそうなので 貴重なシールなので大事にとっておこうと思います。
 
20100926IMG_6986.jpg
 
正直なところ、客先常駐で作業している現場の飲み会は新しい刺激もなく気をつかうばっかりでつまらないのですが、今日のような異業種交流や、IT業界でも自分のやっていることとはちょっと違う方々と接触できる飲み会というのはほんとに楽しいです。時間があっという間に過ぎました。幹事さんにも感謝ですが、こういう人脈は大事にしていきたいと思いました。


【連載】Webサービス制作日記#04 データベースを使う

なぜデータベース?どんなデータベース? 制作中の順位検索サイトは、以下の機能を持たせたいと思っています。 ・ユーザ管理のしくみ ・ユーザーが設定した検索キーワードや、ドメイン名を保存しておくしくみ ・Yahooから収集し …

なぜデータベース?どんなデータベース?

制作中の順位検索サイトは、以下の機能を持たせたいと思っています。
・ユーザ管理のしくみ
・ユーザーが設定した検索キーワードや、ドメイン名を保存しておくしくみ
・Yahooから収集したデータを履歴として蓄積するしくみ
 
これらのデータを保存する場所が必要になりますので、データベースを使うことにします。
もっと簡単なサイトなら、データベースを使わずにデータをテキストファイルやcsv形式のファイルにして保存しておく方法でもいいと思います。
掲示板のシステムなんかは投稿したデータをファイルに保存して管理しているものが多いですね。
データベースを使う利点は以下のまとめが参考になります。
 
Linux University :: 第3日目 データベースを使う利点は?
http://www.linux-u.com/modules/database/index.php?content_id=4
 
データベースも種類はいろいろありますが、MySQLが使われることが多いです。
よく使うツールの組み合わせから、LAMPという用語が存在します。
L:Linux
A:Apache
M:MySQL
P:PHPなど
ちなみにデータベースとしての他の選択肢は、PostgreSQLSQLite、有償のものならOracleDB2などがあります。
 

テーブルを作る

MySQLの操作はphpMyAdminからできます。
ユーザーテーブルはこんなイメージです。
 
201009251226.jpg
 
ユーザー名とパスワードが管理できればいいので、username,passwordの列があります。
id は通番、createdとmodifiedはそれぞれレコードの作成時刻と更新時刻です。
password欄はパスワード文字をそのまま保存するのではなく、暗号化して保存します。
 
データを保存するための表を用意するイメージですね。
そんな感じで必要な表をどんどん作っていけばいいわけです。
 
phpMyAdminの使い方は以下が参考になると思います。
 
phpMyAdminの使い方
http://www.dbonline.jp/phpmyadmin/
 
「phpMYAdmin」の使い方
http://kuppo.sakura.ne.jp/database/field.html
 
 
過去のエントリ
【連載】Webサービス制作日記#03 プラットフォームを決める
【連載】Webサービス制作日記#02 要件を決める
【連載】Webサービス制作日記#01 何を作ろうとしているか


世界で一番ダサい

マイミク秀昭氏の日記で吹いてしまいました。 いまさら感があるのかも知れないけど、紹介したい衝動に駆られたので日記に書いておきます。   まとめサイトとかあるんですね。   世界でいちばんダサいシリーズとは (セカイデイチ …

マイミク秀昭氏の日記で吹いてしまいました。
いまさら感があるのかも知れないけど、紹介したい衝動に駆られたので日記に書いておきます。
 
まとめサイトとかあるんですね。
 
世界でいちばんダサいシリーズとは (セカイデイチバンダサイシリーズとは) – ニコニコ大百科
http://dic.nicovideo.jp/a/%E4%B8%96%E7%95%8C%E3%81%A7%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%83%80%E3%82%B5%E3%81%84%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA
 
世界でいちばんダサイPVまとめサイト – 世界でいちばんダサイシリーズ
http://www11.atwiki.jp/sekadasa/pages/14.html
 
全部見てるほどヒマではありませんが、ちょっとつまみ食いした感じでは以下のPVがお気に入りです。
 
世界でいちばんダサいドリフのOP

 
【Perfume】世界でいちばんダサいチョコレイト・ディスコ


クーポンサイトKAUPONが関西に上陸している件

クーポンサイトって東京圏ばっかり相手にしてるイメージがありましたが、KAUPONが9月から関西圏でも利用出来るようになってたんですね。     でもこういうサイトって利用価値ほんとにあるのかなぁ? うまく利用しようと思う …

クーポンサイトって東京圏ばっかり相手にしてるイメージがありましたが、KAUPONが9月から関西圏でも利用出来るようになってたんですね。
 
201009212355.jpg
 
でもこういうサイトって利用価値ほんとにあるのかなぁ?
うまく利用しようと思うと、新しいイベント情報がないかサイトを逐一チェックしなければならないので、なんかそういう時間がかえってもったいないような。
今のところ飲食店だけというのもちょっと物足りないです。
僕だったら、たとえばクルマ関係(ガソリンとかオイル交換)とか、美容院とかのクーポンがあれば嬉しいなと思います。
共同購入型サイトはまだ流行り始めたばかりなのでこれからに期待したいですね!
 
ちなみにQ:podも関西圏の情報少しありますね。とりあえずRSSフィードに登録しておくか。


【連載】Webサービス制作日記#03 プラットフォームを決める

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

どのツールを使って作るかを決めます。
一度使うと決めたツールは、あとから変えたいと思ってもなかなか変えられないことが多いので、ここはよく考える必要があります。
 

どの言語を使うか? プラットフォームは?

例えばプログラミング言語というツール。
Webプログラミングに適した言語で代表的なものはPHP、Perl、Ruby、Pythonでしょう。
僕はPHPが得意なのでWebアプリケーションはPHPで作っています。
 
簡単にそれぞれの特徴を書くと、
・PHP
 Webプログラミング言語としておそらく最も使われている。初心者が取り組みやすい。
・Perl
 古くから使われている言語なので、歴史のあるWebサービスで使われていることが多い。
 mixiで使われている。
・Python
 歴史は意外と古いらしいが、あまり使われてこなかった。
 Googleが推してる言語なので将来性はあるんかも。YouTubeで使われている。
・Ruby
 国産言語なのでなにかと安心? 実力はあると思うがシェアはそんなに高くないと思う。クックパッドで使われている。
 

プラットフォームを決める

どちらかというと、言語を選択するよりプラットフォームを決める方が先かも知れません。
最近はゼロからガリガリ作り始めるのではなくて、ある程度決まった型(フレームワーク)をうまく利用して作るケースが多いです。
 
今回つくるサービスにはログイン認証機能を導入したいのです。
しかし、この機構をゼロから作るのは結構骨が折れます。
実はログインって、仕組みを考え出すといろいろめんどくさいです。

 
 

上記のように、通常のログインだけでなく以下の考慮が必要です。
・ログインに失敗したらログインできないようにする。
・新規ユーザが登録できるようにする
・パスワードを忘れた人のために、パスワード再発行機能を作る
 
でもこういう処理って、会員制サイトには必ず必要な機能なので、すぐ使える仕組みが用意されていればそれを使う方が便利です。
そういう理由から、すでにログイン機能などが標準で備わっているプラットフォームやフレームワークを使えば楽できるということが分かります。
 
1つの方法としては、ブログシステムのWordPressやCMS(コンテンツマネジメントシステム)のXOOPSを使うという方法。
これらのプラットフォームには既にログイン認証の仕組みは備わっています。
この上にプラグインモジュールとして自作のプログラムを載せれば、自分はログイン機能をわざわざ作らなくても済みます。
 
WordPressはPHPで作られていますし、XOOPSもPHPです。
PHPを使用言語として選ぶ利点は、これらプラットフォームの選択肢が多いという点にあります。
 
しかし、これらはいいことばかりではありません。
CMSやブログシステムは動作が重たくて、ユーザにとって快適ではないかも知れません。
 
そこで、僕の場合はフレームワークという別の手段を使うことにしました。
これはCMSのように完成された形で提供されてはいませんが、ゼロから作るよりは楽です。
お好み焼きで例えれば、
 
CMS、ブログシステム:お好み焼き屋で注文したお好み焼き
プログラミング言語:自宅で作るお好み焼き
フレームワーク:自分で焼く方式のお好み焼き屋
 
しつこく繰り返しますが、うどんで例えれば、
 
CMS、ブログシステム:普通のうどん屋
プログラミング言語:自宅で作るうどん
フレームワーク:セルフ方式のうどん屋
て感じでしょうか… 自分で作らないといけないので完成品をすぐ食べられるワケではありませんが、
自宅で作る場合に比べて皿洗いとか材料調達の手間は省けると。
 
具体的には、
・ログイン、認証の仕組み
・フォームの作成
・データベースへのアクセス
・Javascriptの生成
などが簡単に使える形であらかじめ用意されています。
 

このフレームワークにしても種類がたくさんありますが、僕はこのへんの特徴の違いをよく知らないのでとりあえず有名どころのCakePHPを使うことにしました。
 
言語やプラットフォーム以外にも決めるべきツールがあるので、それは次回に書きます。
 
過去のエントリ
【連載】Webサービス制作日記#02 要件を決める
【連載】Webサービス制作日記#01 何を作ろうとしているか


動物園きってのグルメ

今日もやられやく とあるホームページにあるQ&Aがカオスなんだが・・・ http://yunakiti.blog79.fc2.com/blog-entry-6455.html 悩み打ち明けちゃいなよ!   耳にかけるタイ …

今日もやられやく とあるホームページにあるQ&Aがカオスなんだが・・・
http://yunakiti.blog79.fc2.com/blog-entry-6455.html
悩み打ち明けちゃいなよ!
 
耳にかけるタイプの着用型ビデオカメラが登場–両手がほかのことをしてても撮影可能
http://jp.techcrunch.com/archives/20100914look-youtube-no-hands-looxcie-introduces-wearable-camcorder/
これすごいなー。こないだ買ったコードレスウォークマンはぜんぜん目じゃないな
 
あまりクロネコをなめない方がいい。:ぁゃιぃ(*゚ー゚)NEWS 2nd
http://ayacnews2nd.com/archives/51664642.html
 
動物園きってのグルメはあの人気者だった | web R25
http://r25.yahoo.co.jp/fushigi/wxr_detail/?id=20100413-00002013-r25
これは仕分けの対象になってもおかしくないレベル。
 

ちょっと前のまなめはうすで紹介されていたのですが、この岡田監督の記事すごい。とても勇気をもらいました。時間のある人は読んでみたらいいと思います。
Business Media 誠:岡田武史氏が語る、日本代表監督の仕事とは
http://bizmakoto.jp/makoto/articles/0912/14/news010.html

経営者でも「倒産や投獄、闘病や戦争を経験した経営者は強い」とよく言われるのですが、どん底に行った時に人間というのは「ポーンとスイッチが入る」という言い方をします。これを(生物学者の)村上和雄先生なんかは「遺伝子にスイッチが入る」とよく言います。我々は氷河期や飢餓期というものを超えてきた強い遺伝子をご先祖様から受け継いでいるんですよ。ところが、こんな便利で快適で安全な、のほほんとした社会で暮らしていると、その遺伝子にスイッチが入らないんです。強さが出てこないんですよね。ところがどん底に行った時に、ポーンとスイッチが入るんですよ。

勝負の鉄則に「無駄な考えや無駄な行動を省く」ということがあります。考えてもしょうがないことを考えてもしょうがない。負けたらどうしよう。負けてから考えろ。ミスしたらどうしよう。ミスしてから考えたらいい。「余計なことを考えて今できない、なんて冗談じゃない」と言います。できることは足元にある。今できること以外にない。それをやらないと、目標なんか達成できないんです。


ソーシャルの時代

アメリカでは、Google、Yahooの滞在時間よりFacebookのネット滞在時間が多くなったと報じられています。 いよいろソーシャルネットワークがインターネットを支配する時代がやってくるんでしょうか。 Faceboo …

アメリカでは、Google、Yahooの滞在時間よりFacebookのネット滞在時間が多くなったと報じられています。
いよいろソーシャルネットワークがインターネットを支配する時代がやってくるんでしょうか。
Facebookに費やす時間が多くなるということは、インターネット界におけるFacebookの影響力が大きくなるというだけではなく、Facebook経由で出す広告の価値の総量も大きくなるということですから、企業の経済力もより強力になるでしょう。
 
滞在時間でFacebookがGoogle、Yahooを抜き首位に【湯川】 : TechWave
http://techwave.jp/archives/51501060.html
 
201009182204.jpg
 
Googleは既に検索シェアが頭打ちになっているというレポートもあります。
CHART OF THE DAY: Google’s Search Share Flatlines(英語)
http://www.businessinsider.com/google-search-share?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+typepad%2Falleyinsider%2Fsilicon_alley_insider+%28Silicon+Alley+Insider%29
 
201009182218.jpg
 
検索の領域では、Bingがfacebookと提携してシェアをじりじり上げてきているそうです。
巨人Googleの栄華はいつまで続くか面白くなってきました。


【連載】Webサービス制作日記#02 要件を決める

順位検索ツールの仕様・要件について考えてみます。   スポンサードサーチ順位検索ツールで実現できたら嬉しい機能として、以下のような要望をいただいています。 ・広告を出している検索キーワードは複数あるので、1つ1つ手で順位 …

順位検索ツールの仕様・要件について考えてみます。
 
スポンサードサーチ順位検索ツールで実現できたら嬉しい機能として、以下のような要望をいただいています。
・広告を出している検索キーワードは複数あるので、1つ1つ手で順位をチェックするのはしんどい。
 各キーワードについて、自分のサイトが検索順位のどれくらいの位置にいるのかを簡単に確認したい。
・自サイトの順位の推移を時系列グラフで見たい。
・ライバルサイトと比べて自分のサイトの位置関係を把握したい。
 
これに加えて、
どうせ作るんだったら、ネットショップのオーナーなど同じ機能を欲しがっている人もいそうだから、
不特定多数に公開できる形で作ったらどうかと考えました。
 
そうすると必要になってくる機能は
・複数ユーザに対応できるようにする。
 → ユーザIDでログインする仕組みが要る。
・会員に対して課金して、採算が取れる仕組みにしたい。ただし無料で使えるサービスも同時に
 作っておいたほうがいいだろう。
 → 振込みやクレジットカードなど何らかの手段でお金を受け取れる仕組みがいる。
などです。
 
これらの要件を考えると、システム的にも考慮しないといけない点があります。
・時系列グラフ表示するには、毎日定期的にデータを収集する必要がある。
 → スケジュールでデータを定期的に収集してくる仕組みが必要
・検索データはYahooに問い合わせてとってくるが、その手段を検討する必要がある。
 → 検索用APIが公開されていればよいが、それがなければ、人がパソコンから手で操作するのと
 同じようにブラウザで表示される画面表示イメージ(HTML)から
 必要な情報をこちらで抜き出す方法でやる必要がある。
・そんなことをしてYahooに怒られたりしないのか?
 → 怒られないように微妙なサジ加減でやればなんとかなるんじゃないかとw
 
こういった要件を満たせるような仕組みを考えていくことになります。
 
ちなみにこのような仕様や要件を決める作業を要求分析と言います。
このあと、設計があってコーディング(プログラミング)、テストという流れでやるのが一般的です。
この図はウォーターフォールモデルという、作業が一直線に進むやり方です。基本的に後戻りをしないやり方です。
 
201009162212.jpg
 
これに対して、スパイラルモデルというのもあります。
これは少しずつ作っていきながら機能をどんどん追加していくやりかたで、どちらかというと計画性のない柔軟に開発できるやり方です。
作って考えて、作って考えて、の繰り返しでどんどん大きくしていく形なので、途中で方針を変えることが比較的容易で、作っているものもイメージしやすいという長所があります。
組込み製品などはウォーターフォールモデルでやることが多いですが、Webサービスなんかは簡単にプロトタイプが作れたりするのでスパイラルモデルでやることが多いんじゃないかと思います。
今回私もスパイラルモデルでやっていこうと思います。
201009162217.jpg
 
< 参考>
プロセスモデル
http://www.ics.kagoshima-u.ac.jp/edu/SoftwareEngineering/process-model.html
 
過去のエントリ
【連載】Webサービス制作日記#01 何を作ろうとしているか