最近の記事
- 9/1 - 将棋始めました
- 5/16 - サーバー引っ越し
- 4/24 - 優先順位
- 3/17 - vbNullString と 空文字列 ""
- 3/15 - InputBox 関数の戻り値
- 3/13 - 紙と Excel と VBA
- 3/9 - 未だに Visual Basic 6
- 11/14 - ぼて閉鎖
- 11/9 - 関数オブジェクトの呼び出し
- 9/7 - メソッドとしての関数オブジェクト
Entering Passive Mode
今日は例外処理について考えてみよう。
ユーザと対話的に処理を行うプログラムと違い、
自動化プログラムは、例外処理に厳格である必要がある。
例外処理は、トラップ(catch)するのも大切だが、
必要な所で例外を発生(throw new)させるのも大切である。
例えば、HTTP アクセスを行う場合、
ネットワークの障害があった場合、
通信エラーが発生することがある。
今日は、list_diary.pl へのアクセス手段を提供する、
MixiDiary クラスを設計しよう。
MixiDiary は、各日記(項目)のコレクションの役割となる。
では、メソッドを列挙してみよう。
・コンストラクタ(session)
・iterator()
……以上。
日記一覧ページである、list_diary.pl では、
完全な日記の情報は得られない。
何が不足しているか。
まずは、本文である。
日記一覧ページでは要約しか表示されていない。
そして、日付である。
一見、日付と時間は取得できるように見えるが、
そのうち、「年」の情報が不足している。
2006/7/29 と 2005/7/29 の区別ができないのだ。
今日は、昨日と同じ処理を、正規表現を使ってやってみよう。
indexOf による探索は、速度面では速いのだが、
単純な文字列のマッチングしかできなく柔軟性に欠ける。
正規表現は、表現を作るのに若干の知識が必要だが、
文字列の処理を柔軟に行うことができる。
========== Main.js ==========
function main() {
今日は、最新日記一覧ページの HTML を取得し、
日記の情報を抜き出してみよう。
最新日記一覧ページには色々な情報があるが、
mixi の HTML は、人間が読むために最適化されているため、
要点だけ抜き出すためには、HTML を解析する必要がある。
日記の情報を取り出すためには幾つかの方法があるが、
今日は、昔からの文字列処理を使ってみる。
前後のテキストを手ががりとして、
取り出したい情報を抜き出すことにしよう。
さて、長々と脱線していたので、話を軌道に戻そう。
今日は MixiSession の実装をする。
まず、以前作った _encodeForm 関数を、
「HttpUtil」クラスの静的メソッドにしよう。
========== HttpUtil.js ==========
var HttpUtil = {
// application/x-www-form-urlencoded でエンコード
encodeForm : function (hash) {
JavaScript はオブジェクト指向である。
しかし、Java や C# のようなクラスベースではなく、
プロトタイプベースの言語である。
クラスベースの言語にクラスがあるように、
プロトタイプベースの言語はプロトタイプがある。
では、プロトタイプとは何か。
プロトタイプは、オブジェクトの雛形である。
それ自身もオブジェクトで、プロパティを持つ。
今日は MixiSession クラスのメソッドを考えてみる。
必要なメソッドは、とりあえず以下の 2 つにしよう。
・fetch(url, query)
・post(url, form)
fetch や post は、url を取得し、HTML 文字列を返す。
fetch は GET 用、post は POST 用とする。
では、昨日のコードに追加してみる。
ページを取得する準備は整ったが、
次のステップに移る前に、いつものようにクラス化を行おう。
では、「MixiSession」クラスを考えてみよう。
このクラスは mixi へのログインセッションを管理し、
認証状態の mixi のページを取得する機能を持たせる。
ログインと、XMLHttpRequest のラッパーというわけだ。
まず、コンストラクタとフィールドを決めよう。
コンストラクタは、メールアドレスとパスワードを受け取る。
フィールドは、XMLHttpRequest を格納するために必要だ。
「_client」という名前にしよう。
ログイン認証まではできたが、
肝心のトップページはまだ取得できていない。
トップページを取得するためには、
サーバが返却した Cookie を送信内容に含めた上で、
トップページ http://mixi.jp にアクセスすればよい。
幸い、Microsoft 実装の XMLHttpRequest は、
Cookie の自動的な管理機能を提供している。
これは、同じ XMLHttpRequest インスタンスを使って、
何度も Web サイトにアクセスする場合、
以前に返してもらった Cookie があれば、
それを自動的に送信してくれるという機能だ。