140 likes | 206 Views
The Perl Conference Japan ’ 98 朝日奈アンテナによる コンテンツ情報の取得と利用. 平成 10 年 11 月 12 日 岩本 圭司. 朝日奈アンテナとは. “ コンテンツ情報 ” 取得システム Internet 上のコンテンツに関する情報を取得 更新時刻 タイトル、著作者、キーワード等 … 最新版は 1.914 (公式) /1.983 (非公式) http://www.fastwave.gr.jp/%7Emasshy/hina/. 開発経緯. Web Page を効率よく巡回したい 前回参照から更新されているページだけを見たい
E N D
The Perl Conference Japan ’98朝日奈アンテナによるコンテンツ情報の取得と利用 平成10年 11月 12日 岩本 圭司 (c) 1998 Keiji Iwamoto
朝日奈アンテナとは • “コンテンツ情報” 取得システム • Internet上のコンテンツに関する情報を取得 • 更新時刻 • タイトル、著作者、キーワード等… • 最新版は1.914(公式)/1.983(非公式) • http://www.fastwave.gr.jp/%7Emasshy/hina/ (c) 1998 Keiji Iwamoto
開発経緯 • Web Pageを効率よく巡回したい • 前回参照から更新されているページだけを見たい • “べんりくん” (加内氏)発見 • “べんりくん” 相当プログラムを自作 • “朝日奈アンテナ” と命名 • 最新情報をキャッチする、受信「アンテナ」 • HEADで情報が取れない場合に対応 • アンテナ間通信を実装 • 送信「アンテナ」としても機能 (c) 1998 Keiji Iwamoto
公開後の進化過程 • V1.x • コンテンツ「更新時刻」取得システム • V1.0x:情報取得対象ページ個別の設定が多い • V1.1x:時刻情報を自動解析し設定項目を簡素化 • V1.2x:キャッシュ実装/設定フォーマット変更 • V1.3x:アンテナ間通信を改良 • V2.x(開発中) • コンテンツ「情報」取得システム • 更新時刻以外にもさまざまな情報を処理 (c) 1998 Keiji Iwamoto
朝日奈アンテナの動作(単体) (c) 1998 Keiji Iwamoto
Web Clientとしての動作 • PerlでのHTTP通信 • まずはsocket → connect → あとはファイル入出力と同様) • 入力/出力ルーチンで別プロセス化(fork) • alarmでタイムアウト処理 • HTTPリクエストを出力 print SOCKET “HEAD /content.html HTTP/1.1\n”; print SOCKET “Host: gabi-n.hauN.org\n\n”; • コンテンツ情報/内容を取得 while (<SOCKET>) ~ • 日本語対応はnkfと連携 • フィルタつき入出力 (c) 1998 Keiji Iwamoto
HTTPヘッダの解析 • Last-Modified: フィールドから情報取得 • フォーマットが決まっているため解析は容易 • パターンマッチングで該当行を特定 if (/Last\-Modified\:\s+(.*)/o) ~ • splitを用いてフィールドに分離→値を取得 split(“ /:”, $1); • SSI使用等でLast-Modified: が存在しない場合 →コンテンツ内容を解析 (c) 1998 Keiji Iwamoto
コンテンツ内容の解析 • 解析対象行の決定 • URLごとに設定したキーワードとマッチングして特定 • splitでフィールドに分離 • 時刻フォーマットの解析 • 年は00~99 / 1900~2099の数値 • 月は1~12の数値 / 月名を表わす文字列 • 日は1~31の数値 • 時は0~23、分は0~59、秒は0~60の数値 • タイムゾーン文字(GMT, JST, EDT, ...) (c) 1998 Keiji Iwamoto
時刻フォーマットの解析 • 各フィールドのうち、意味が確定するものを探す • パターンマッチング、数値の範囲 • (例1)数値 “98” は1998年として確定 • (例2)数値 “23” は月、時ではないが…年? 日? 分? 秒? • 意味が確定したフィールドをもとに、さらに推定 • (例)数値 “26” の意味は? • 年、日、秒が既に確定していれば、分であると確定する。 • フィールドの位置関係等も考慮 • 時、分、秒は通常、その順に並べて記述される。 • 時、分を省略し秒は記述するといったことは通常しない。 …など (c) 1998 Keiji Iwamoto
時刻フォーマット自動解析 • 初期のバージョン(1.0x)では… • フォーマット情報を明示して与える必要があった。 • 第○フィールドは月、第△フィールドは分… • 自動解析の実装、改良により… • フォーマット情報明示の必要はなくなってきた。 • V1.2xの入力仕様ではフォーマット情報明示を廃止。 (c) 1998 Keiji Iwamoto
アンテナ間通信 • アンテナ間通信による協調動作 • 負荷分散 • 情報の補完 • HTTPによる通信は実装済 • データフォーマットは独自(plain text) • HTMLも使用可能(機能に制限あり) →他の更新時刻取得エージェントとも連携可能 ex. べんりくん、WatchLynxなど多種 (c) 1998 Keiji Iwamoto
朝日奈アンテナの動作(協調) (c) 1998 Keiji Iwamoto
キャッシュ処理 • アンテナ間通信で得た情報は連想配列に格納 • URLをキーとしてメモリ上にDBを作成。 • より新しい/信頼性の高い情報を洗濯し格納。 • ある程度古い情報は破棄。 • アンテナ間通信の結果が無効なURLに対してのみ直接通信。 • 直接通信して取得した情報も連想配列に格納 • 連想配列をメモリキャッシュとして使用。 • 複数回の情報参照に対し、不要な通信を行わない。 (c) 1998 Keiji Iwamoto
今後の展望 • 独自プロトコルによるアンテナ間通信 • 中村氏のDIRP(Document Information Relay Protocol)構想 • V3.xで実装予定 • 情報の “PUSH” は? • 通信効率の向上 • Keep-Alive • 複数同時connect (c) 1998 Keiji Iwamoto