画面内に自由につぶやける
2010年3月16日 13:56
twitter+αというイメージで作成した、PHP+JavaScriptの作品紹介です。画面内のどこにでも、色を指定して短文をつぶやくことができます。大きさは時系列順になっており、古くなるほど小さく、薄く変化します。パスワードは「1234」となってますので、お試しください。
PHPにおけるプログレスバーの実現2
2008年5月26日 00:27
再び、競馬の解析のPHP作成を再開しました。前はサイアーラインから色分けした血統表を作成、ってところまで作ったので、とりあえず保留。これからはオッズと着順の関係を条件ごとに検索できるシステムをちょくちょく作っていきたいと思っています。今はURL指定すれば自動で10000件くらいのレースのデータを取って来れるようにはなりました。次は取ってきたデータを解析するところを作っていきます。
話は変わってこのブログで一番アクセスが多いのがPHPのプログレスバー関連の話なので、gdgdだった前回の説明を補足、簡略化する意味で再び解説していきたいと思います。
プログレスバー? 競馬の解析をする際、情報はネットからスクレイピング(必要な部分だけ抽出してくること:
はてなダイアリー )していますが、単純にウェブサイトを読み込む時間が必要なので、如何にブロードバンド時代と云えど100ページとか読み込むには相当な時間がかかります。しかもPHP側で特に何もしないと、果たして動いているのか動いていないのか分からないです(もしかしたらエラーが起きているかもしれない…)。そこでWindowsなどでファイルを移動するときに移動状況を表してくれる”アレ”がPHPでも使えたら便利じゃないか!まさにその”アレ”こそ、プログレスバーなのです。
タイムアウトするんだけど? 長い処理をするとタイムアウトしてしまうので、それを防がないとなりません。
set_time_limit(0); こんな記述を冒頭に入れてあげましょう。
PHPの知識だけでできるの? PHPの知識を持ってらっしゃる方は、大体HTMLの知識も持っていらっしゃると思います。プログレスバーは、PHP+JavaScriptで実現するのです。つまり、
PHPでJavaScriptの関数を呼出 ⇒ JavaScriptでプログレスバーを動かす
といったことをやるわけです。それではPHPからどのようにして、JavaScriptを動かせば良いのでしょうか?
JavaScriptの準備 簡単のために、まずはテキストが表示される例を作成してみましょう。HTML側には以下のような記述をしてください。
<span id="msg"></span> <script type="text/javascript"> function changeMsg(msg) { document.getElementById("msg").innerHTML = msg; } </script> このchangeMsg()関数をPHPから呼び出し、<span>タグの中身を書き換えるわけです。
バッファについて PHP側の記述を紹介する前に、「バッファ」について学んでおきましょう。バッファとはパソコンが処理をする際にそのデータを一時的に蓄えておくところのことです(
パソコン用語 - バッファとは )。PHPで意識しなければならないバッファは2種類あります。1つ目はサーバー側のバッファで、PHPで処理しているデータを向こうが処理が完了するまでためている、なんてことがあったら処理が完了するまで途中経過のデータが見れないことになってしまいます。2つ目はブラウザ側のバッファです。読み込みが遅くて画面が真っ白だから、もうや~めた、と思って中止ボタンを押すと、途中まで表示された!なんて例を挙げてみると分かりやすいのではないでしょうか。これらを吐き出させるためにPHPで次の2行を記述しなければなりません。
ob_flush(); flush(); バッファをフラッシュ(水をどっと流す)してあげる記述です。
PHPからJavaScriptを呼び出す! いよいよここまで来ましたね。さぁ、どうするんだ!といった感じですが、実は至って簡単なのです。
$com = "表示したい内容" echo '<script type="text/javascript">changeMsg("' . $com . '")</script>'; Quick Lookup:
これだけです。ボブ風にいうと(ボブ知らなかったらすみませんww)、ほら、簡単でしょう?と言った感じですね。そして、お友達も書いてあげましょう、といった感じで、
sleep(1); // 重い処理する場所 $com = $i . "/" . $total; // $i: 処理中のデータ番号 $total: データ総数 echo '<script type="text/javascript">changeMsg("' . $com . '")</script>'; ob_flush(); flush(); こんな風にしちゃえばOKです。いかがでしょうか?思ったよりも簡単ですよね。具体例を挙げると、
$i=1; foreach($url as $urls) { getDataFromURL($url); // ($urlのページからデータを取ってくる自分で定義した関数) $com = $i . "/" . count($datas); echo '<script type="text/javascript">changeMsg("' . $com . '")</script>'; ob_flush(); flush(); } こんな感じです。
プログレスバーに応用したい場合は、JavaScript側で工夫さえすればPHPで何もする必要はありません。
PHPにおけるプログレスバーの実現 でプログレスバーを動かすサンプルを置いてあるのでぜひそちらも見てみてください。
シンボルの置換
2008年4月24日 22:28
ニュースリリースを管理するシステムを作っていたのですが、®や©などを上付きにするために、
<span class="sup">©</span> などとクライアントに入力していただくのは少々難があります。そのために、
<input type="button" onClick='forms[0].text.value="<span class=\"sup\"">©</span>'> のようにボタンを実装してみたのですが、どうにもtextareaに入力される文章が多くてうざったいです。また、このようにして挿入した文章をSQLなどのデータベースに保存すると、magic_quote_gpcがONになっていた場合、'や"の前にバックスラッシュが挿入されてしまいます。それを除去するために、stripslashes()関数を使うのも面倒くさいですので、どうにかできないと考えてみました。
そこで、他の方々もやっていると思われますが、入力される文字を、
[symbol:COPY] のように勝手に自分で定義し、後で
str_replace("[symbol:COPY]","<span class=\"sup\">©</span>",$string); のように置換してしまおう、という作戦に出ました。このようにすれば他にもシンボルを配列で定義し、
$symbols = array( "COPY" => "<span class=\"sup\">©</span>", "REG" => "<span class=\"sup\">®</span>", ... ) while( list($key,$val) = each($symbols) ) { str_replace("[symbol:". $key ."]",$val,$string); } とまとめることもできます。
次に、リンクも同様に置換してしまおうと思い、
[link:題名:URL] => <a href="URL">題名</a> と定義しました。そして変換時に正規表現を使おうと思い、初めはereg_replace()を使ってみました。しかしながらどんなにやってもエラーが出るため、調べてみると日本語用にmb_ereg_replace()があることを発見(知ってろよって感じですが…(汗))。preg_replace()もありますがmb_ereg_replace()の方が個人的に表記が簡単かと思い、こちらを使用しました。
mb_ereg_replace("\[link:(.*?):(.*?)\]", "<a href=\"\\2\">\\1</a>", $string); これで万事解決ですが、もっといい方法とかありましたら教えてください。
phpCollabの設置と日本語化
2008年1月 5日 18:59
現在、Web制作の仕事で、プロジェクトのスケジュール管理が重要になっています。なんとかしないと、とはじめはExcelでスケジュールを作っていたのですが、これだとExcelデータの交換にも時間がかかりますし、何より煩雑、面倒い。さらに、どうやってスケジュール管理していいのか分らない…、ということで、いろいろネットを探していたところ、
phpCollab というものを発見。簡単にいえばプロジェクトの進行管理をしてくれるようなブラウザベースの管理システムです。詳しくは、
マイコミジャーナル の記事を参照してください。早速使ってみましょう、と思って、
phpcollab-2.5 rc 3 のバージョンをダウンロード。初期設定については、phpcollab-2.5\docs\install.txtに、
# Install (only for first install, not for update) - Extract in one folder, "phpcollab" for example (with Xoops integration, extract as "phpcollab" in modules folder) - Unix/Linux: rename "includes/settings_blank.php" to "includes/settings.php" - Unix/Linux: chmod 777 + chown apache "includes/settings.php" file, "files" folder and "logos_clients" folder - Create a new MySql, PostgreSQL or Sql Server database "phpcollab" or use existing database - Start at installation/setup.php - Set all parameters - Delete installation/setup.php file after successfull install - Login at index.php - With Xoops integration, go to admin, edit settings and set Xoops integration to "true" and set full path to your Xoops folder - Avanced users can edit generated file includes/settings.php と書いてあります。これを自分なりに追加・解釈して読むと、
①ダウンロードしたファイルを解凍 ②includes/settings_blank.phpの_blankを消して、includes/settings.phpにする。 ③アップロードする ④includes/settings.phpのパーミッションを777にする。 ⑤installation/setup.phpにアクセス。 ⑥各種設定(詳しくはマイコミジャーナル 参照) ⑦installation/setup.phpを削除。 ⑧index.phpにアクセスして使い放題 といった感じです。ただし、マイコミジャーナルの記事にも書いてあるとおり、notificationメール(プロジェクトが変更されたときなどに送信されるメール)と、ガントチャート(プロジェクト作成>タスク作成 とするとプロジェクトの画面に現れます)において文字化けします。特にガントチャートについてはこのシステムの目玉なので、文字化けは痛い…、ということで何とかしたい!と思いますが、これは…
マイコミジャーナル 参照。さーせんw。ただし2点だけ補足。efontからダウンロードできるさざなみフォントは、tar.bz2という拡張子がついていますので、+Lhacaか何かで解凍してください。あと絶対パスという言葉が出てきますが、これは/home/~のように始まるパスです。lolipopなら、/home/sites/lolipop.jp/users/*****-*****/web/(ここで自分のルートフォルダ)php/phpcollab/includes/fonts/といった感じになります。次にメールについてですが、残念ながらマイコミジャーナルの記事では文字化け治らなかったので…、includes/phpmailer/class.phpmailer.phpの中の、437行目付近で
if ($this->Sender != "" && strlen(ini_get("safe_mode"))< 1) { (略) $rt = @mail($to, $this->EncodeHeader($this->Subject), $body,
$header, $params); } else $rt = @mb_send_mail($to, $this->EncodeHeader($this->Subject), $body, $header); となっている箇所があるので、
if ($this->Sender != "" && strlen(ini_get("safe_mode"))< 1) { (略) @mb_language("ja"); @mb_internal_encoding("UTF-8"); $rt = @mb_send_mail($to, $this->EncodeHeader($this->Subject), $body, $header, $params); } else @mb_language("ja"); @mb_internal_encoding("UTF-8"); $rt = @mb_send_mail($to, $this->EncodeHeader($this->Subject), $body, $header); といった感じに変更してください。するとしっかりと日本語でメールが送られてくるはずです。実際phpCollabまだ使い始めなんでその威力はわからないですが、最初触れた感じは、結構使いやすそうです。みなさんも是非試してみてください。
PHPにおけるプログレスバーの実現
2007年11月25日 01:17
プログレスバーとは作業の進行状況をバーの長さで表示してくれるアレです。ファイルのコピーとかする時よく見かけますよね。あれをPHPで実現しようと四苦八苦した結果をまとめておきたいと思います。
(別のまとめも作りました:
PHPにおけるプログレスバーの実現2 )
用意するHTMLは、
Wait a minute ... こんなです。ソースは、
<style type="text/css"> #p_bar {background: #565656; font-size: 3mm; width: 0; padding: 0; margin: 0; border-spacing: 0;} #i_p_bar {color: #ffffff; text-align: right;} #out_bar {background: #cfcfcf; width: 300px; border: 1px #565656 solid; padding: 0; margin: 0; border-spacing: 0;} .under_p_bar {color: #565656; font-size: 3mm;} </style> <table id="out_bar" width="300"> <tbody><tr><td> <table id="p_bar"> <tbody><tr><td id="i_p_bar"> </td></tr> </tbody></table> </td></tr> </tbody></table> <span id="msg" class="under_p_bar">Wait a minute ...</span> <span id="rest" class="under_p_bar"></span> こんな感じで書けますね。まぁデザイン等はお好みで。次にJavaScript部分は、
// メッセージを変える function changeMsg(msg) { $('msg').innerHTML =msg; } // プログレスバーを動かす function setProgress(i ,all) { Element.setStyle($('p_bar'), {'width': ((i/all)*300)+'px'}); $('i_p_bar').innerHTML = Math.round(100*(i/all))+"%"; $('rest').innerHTML = i + "/" + all + "件を処理完了"; }こんなになってます…、あ、ちなみに
prototype.js 使ってます。まぁ見ての通りchangeMsg()ではidがmsgのspanの中身を変える関数、setProgressではプログレスバーの横幅を変更、処理状況をidがrestのspanに書きだしています。んじゃぁ、この関数をどうやって実行するのか、ですが、これはPHP側で行います。
echo "<script type=\"text/javascript\">changeMsg(\"解析開始...\")</script>\n"; ob_flush();
flush(); こんな感じでです。flush()ってのはバッファをフラッシュしているらしいです。バッファ?フラッシュ?良く分かんないですがwなんか、ob_flush()とflush()を両方コールすることでで向こう側にある処理途中の情報も送信してくれて(普通は処理し終わってから全部こっちに送ってくれるのかな?)ブラウザに表示してくれる、と解釈してます。まぁ動けばよし!ということで…。知ってる人いたら教えてください。そいでもって、プログレスバーを進めるには、
echo "<script type=\"text/javascript\">setProgress(".$i.",".$this->cntData. ")</script>\n"; こんな感じで行います。あ、ちなみに$this->cntDataには解析するデータ総数、$iには解析中のデータの番号を格納しています。こんな感じにすることでプログレスバーが実現できちゃいます。もうちょい詳しく書くと、
$i=0; $all = count($data); foreach($data) { sleep(1); //ここが重い処理をする場所。 echo "<script type=\"text/javascript\">setProgress(".$i.",".$all. ")</script>\n"; ob_flush(); flush(); $i++; } こんな感じですかね。実装すると
Wait a minute ...
こんな感じになります。流れとしては、
① 重い処理をする
② 画面にプログレスバーを進めるJavaScriptを書き出す。
③ flushしないと画面に反映されないので、ob_flush()とflush()をする。
という感じです。例が分かりにくかったかもしれませんが参考になれば幸いです。
配列関数
2007年11月11日 01:23
今日は競馬解析プログラムを作ってて使えると思った配列関数の紹介です。全部は紹介しきれない上に分かってないのも多いので、
PHP のサイトの方を見て頂いた方がいいかも・・・。
1. list()
配列を変数に分解できる関数です。
$fruit = array("apple", "banana");
$list($fruit1, $fruit2) = $fruit;
なんて感じで分解できます。これを利用してよく使われるのがeach()との組み合わせで、
$fruit = array(
"佐藤" => "先生",
"鈴木" => "友達",
"伊藤" => "上司"
);
while(list($name, $rel) = each($fruit)) {
echo $name . "は僕の" . $rel . "です。<br />\n";
}
/* 出力
佐藤は僕の先生です。
鈴木は僕の友達です。
伊藤は僕の上司です。
*/
てな感じになります。each()はキーとその値を分けてくれる関数です。なお、この状態でもう一度実行しても
while(list($name, $rel) = each($fruit)) {
echo $name . "は僕の" . $rel . "です。<br />\n";
}
/* 出力
*/
となってしまいます。これは配列の内部にポインタってものがあって、今どこを参照しているか記憶しているものです。これを最初に戻してあげるために、
reset($fruit);
をしてあげてからwhileを実行しないと動作しませんので注意してください(僕はこれで生じたエラーで1時間悩みましたw)
2. array_count_values()
重複した項目をカウントしてくれる関数です。うちの競馬解析では
// 重複度合を調べる $chk_cross = array_count_values($this->horse); こんな感じで、クロス(同じ祖先を重複して持つ)を調べています。$this->horseは配列で馬の名前が格納されてます。最初はこの重複を、
$i=0; foreach($this->horse as $hname) { $chk_cross[$this->horse[$i]]++; $i++; } で調べてたんですが、マニュアル見てたら見っけました。やっぱ欲しい関数って結構あるもんなんですね。
紹介と言いつつ2つしか書いてませんがw、あとはarray_search()くらいですかね、使ったのは。配列は結構いろんな場面で使うので、ざっとマニュアルに目を通しておくと面白いですよ。
競馬解析プログラム3
2007年11月11日 01:12
暫く、体調不良でした…、ちょっとレポートが大きかったんで。この間から進んだことは、
①上のサイアーラインにも色付けする。
この間の記事でいうと、Tom Foolの父親が緑になってませんが、あれも緑にするっていった感じです。
②全馬の父・母の頻度を調べる。
2007/11/11のエリザベス女王杯時点での去年までのデータでいうと、
こんな感じです。FAが父、MFが母父です。
③クロスを調べる。
スティルインラブ
Fa Mo-Fa
2003/11/16 Turn-to: 5x5 Royal Charger: 6x6 Blue Swords: 6x6
スティルインラブ
サンデーサイレンス
Halo
Hail to Reason
Turn-to
Royal Charger
Source Sucree
Nothirdchance
Blue Swords
Galla Colors
Cosmah
Cosmic Bomb
Pharamond
Banish Fear
Almahmoud
Mahmoud
Arbitrator
Wishing Well
Understanding
Promised Land
Palestinian
Mahmoudess
Pretty Ways
Stymie
Pretty Jo
Mountain Flower
Montparnasse
Gulf Stream
Mignon
Edelweiss
Hillary
Dowager
ブラダマンテ
Roberto
Hail to Reason
Turn-to
Royal Charger
Source Sucree
Nothirdchance
Blue Swords
Galla Colors
Bramalea
Nashua
Nasrullah
Segula
Rarelea
Bull Lea
Bleebok
Sulemeif
Northern Dancer
Nearctic
Nearco
Lady Angela
Natalma
Native Dancer
Almahmoud
Barely Even
Creme dela Creme
Olympia
Judy Rullah
Dodge Me
The Doge
By Me
Frequency :
いまはこんな感じになってます。あ、ちなみに色も濃くしました。まだまだやることは多いっすね。目標の自動予想までの道のりは長い…、って感じです。何か付けてほしい機能とかありましたらどんどん言ってください。出来るところから対応していきたいと思います、といいつつ公開はずっと先になりそうです(汗
競馬解析プログラム2
2007年11月 6日 15:13
血統表の出力までは完成しました。あれから、HTMLの解析結果をSQLiteのデータベースに格納するプログラム、解析するプログラムと2つにわけ、なんとか!血統表の出力までこぎつけました。苦労したのは、血統表の組み立ててです。↓の方にもサンプル載せましたが、形を見て分かる通りめんどくさいテーブルです。しかも、取得した馬の配列データは、テーブルのtdを上から見てった順番!ウハ、どうしよ、って感じでした。結局、
// 並び替え用 var $change = array(2,4,8,16,32,33,17,34,35,9,18,36,37, 19,38,39,5,10,20,40,41,21,42,43,11,22,44,45,23,46,47,3, 6,12,24,48,49,25,50,51,13,26,52,53,27,54,55,7,14,28,56, 57,29,58,59,15,30,60,61,31,62,63); こんなん作って、for文で処理しちゃいましたw
for($i=0; $i<62; $i++) { $this->horse[$this->change[$i]] =$_blood[$i]; } んで、できたテーブルが
フサイチパンドラ 2006/11/12 entried.
フサイチパンドラ
サンデーサイレンス
Halo
Hail to Reason
Turn-to
Royal Charger
Source Sucree
Nothirdchance
Blue Swords
Galla Colors
Cosmah
Cosmic Bomb
Pharamond
Banish Fear
Almahmoud
Mahmoud
Arbitrator
Wishing Well
Understanding
Promised Land
Palestinian
Mahmoudess
Pretty Ways
Stymie
Pretty Jo
Mountain Flower
Montparnasse
Gulf Stream
Mignon
Edelweiss
Hillary
Dowager
ロッタレース
Nureyev
Northern Dancer
Nearctic
Nearco
Lady Angela
Natalma
Native Dancer
Almahmoud
Special
Forli
Aristophanes
Trevisa
Thong
Nantallah
Rough Shod
Sex Appeal
Buckpasser
Tom Fool
Menow
Gaga
Busanda
War Admiral
Businesslike
Best in Show
Traffic Judge
Alibhai
Traffic Court
Stolen Hour
Mr. Busher
Late Date
こんなんです。色の付け方は、自分自身を①番として親を2代目、祖父母を3代目…、と見ていき順に②、③…と番号を振っていくと、ある特定の馬から見た父親と母親はそれぞれ自分の番号×2、自分の番号×2+1とすることができます。そこでこれを使って自分からスタートして再帰的に解析していくことによって全馬調べることができます。テーブルの作り方は、自分の番号が何世代目の番号か調べることによってtdのrowspanを指定して組み立てることができます。細かいことはちょっとメンドイのでw、おいておきます。すみません。とりあえず、これでエリザベス女王杯についての過去の血統表が完成しました。後は、クロスとかニックスとかの解析もしてみようかな。
なお、色付けに関しては
ブラッドバリエーション 様のデータを参考にさせていただきました。ありがとうございます。
正規表現メモ - タグの検索 / URLの検索
2007年11月 1日 19:02
データベース化するのは馬が38万頭もいることがわかり(笑)あきらめました。そこで、G1などのレースに絞ってそこに出場してきた馬の中で3着以内のものの血統を調べていこう!って方針になりました。
まぁ、その前に正規表現でHTMLタグ調べていった方が楽なんじゃないか、ということで正規表現について学ぼうと思います。まず、一般的なHTMLのタグをサーチするには、
.*? という表現が重要になってきます。正規表現において . : 何かの文字 * : 直前の文字が0文字以上 .* : ナンカ文字があるよ ? : 直前の文字が0個か1個→最小マッチング とやることで、たとえば一般タグを検索の場合、
<.*?> とすると、最小マッチングにより
<font color="red"> 赤いよ</font>本当は_線部のところのみマッチしてほしいのに、太字にマッチしてしまうのを防げます。(PHPでは、基本的に最大マッチングを行います)
また、URLの検索をしたい場合には、
"http:\/\/[\w\d/%#$&?()~_.=+-]+" とすることでOKです。\dは数字、\wはアルファベットを意味します。+は直前が1文字以上なので、[]内の文字が何文字かあるところまでURLとなるわけです。
最後はpreg_match()関数です。
int preg_match ( string $pattern, string $subject [, array &$matches [, int $flags [, int $offset]]] ) と与えられています。たとえば、
$pat = "<title>(.*?)<\/title>"; if ( preg_match ( "/".$pat."/i", $HTML, $match ) ){ echo ( $match[1] ); } とすれば、サイトのタイトルを抜き出せます。
さて、それじゃまたプログラムの作成の方に戻りま~す。
競馬解析プログラム
2007年11月 1日 12:15
このブログのデザインもだんだん飽きてきんで(笑)、そろそろ本筋に入って行こうかと思います。当面の目標は、「各馬・レースのデータベースの構築」⇒「自動的に次のレースの予想をはじき出す」というプログラムの作成です。データベースの構築といっても、一個一個手入力でやっていくには膨大な時間の無駄になってしまうのは、前に作った解析システム(高校の友達と一緒にやってました)から学びました。そこで今回は情報を配信しているサイトをクロールして、情報を収集するプログラムを作成しようと思います。言語はPHPでやって行こうと思っています。
最初に突き当たった壁が、どうやってHTMLを解析するのか。HTMLのパーサーのクラスライブラリとかないかな、と思ってところ、PEARパッケージの
XML_HTMLSax を紹介しているサイトが多かったので試してみました…が、PHPに触りたての自分にとってはちょっち無理w、ってことであきらめ、色んなクラスライブラリも試してみましたが、なかなかうまくいかず…。カッコイイ関数とか使わなくて、単純な仕組みでやってくれてるのないかな、と思ってたところ、オライリー社の
Spidering Hacks という本のソースコードをDLできるページがあることを知り、早速使ってみました。…すると、どんぴしゃっすね。若干自分で改変しましたがstrpos()(:引数で指定した文字列のある場所を返す)を使うだけで特定の箇所を抜き出すことを実現していました。
function getBlock( $pStart, $pStop, $pSource, $offset) { $_data = null; $_start = stripos( $pSource, $pStart, $offset); $_stop = stripos($pSource, $pStop, $_start); $start = $_start + strlen($pStart); $length = $_stop - $start; if($_stop > $_start ) { $_data = trim( substr( $pSource, $start, $length ) ); } return( array($_data, $_stop) ); } こんな感じで、$pStartと$pStopで指定したものの間を抜き取るって感じです。まぁ同じタグが複数個所あったら抜き出すのは難しいですが、最近のHTMLはクラス、ID指定とかで特定の部位が探し出しやすくなっていることが多いので、以外に使えます。これなら、HTML⇒XHTML⇒XMLとして解析、とかキャパ越えなことしなくても大丈夫!ってことでいろいろ試してみました。その結果、とりあえず
No. 0 テイエムオペラオー
牡
栗毛
1996/03/13
オペラハウス
Blushing Groom
No. 1 ディープインパクト
牡
鹿毛
2002/03/25
サンデーサイレンス
Alzao
No. 2ゼンノロブロイ
牡
黒鹿毛
2000/03/27
サンデーサイレンス
マイニング ・・・みたいな感じで、情報を抜き出していくことは可能になりました。まー、あとは抽出する項目を増やしていきましょ、って感じです。…ただし、対象のHTMLを直接読み込んでるんで、こちらも相当時間かかりますし(普通にタイムアウトしますww)、情報を抜き出させてもらっているサイト様にも迷惑かと…。問題は山積みですが、頑張って行こうと思います。