使い方
S2Robot は S2Robot のインスタンスを DI することで簡単に利用することができます。 S2Robot のコンポーネントの定義は、s2robot.dicon (オンメモリ版) または s2robot_db.dicon (DB利用版) に記述されています。
実行方法
S2Robot のコンポーネントを取得して、巡回対象の URL を追加します。 URL は複数登録可能です。 あとは、必要に応じて、巡回する深さや巡回 URL 数を指定します。 execute() メソッドを実行することで、クロールを開始します。
// container から取得する場合 S2Robot s2Robot = (S2Robot) container.getComponent(S2Robot.class); // URL の追加 (この URL を起点にして巡回します) s2Robot.addUrl(url); // 巡回する深さを指定 s2Robot.getRobotContext().setMaxDepth(depth); // クロールの実行 (実行時のセッション ID が返ります) String sessionId = s2Robot.execute(); // クロール結果の消去 (必要な場合に実行) s2Robot.cleanup(sessionId);
デフォルトの動作は、FileTransformer が適用され、カレントディレクトリに巡回した URL のコンテンツをファイルとして保存します。 s2robot-db を利用している場合は、上記に加えて、クロール結果を DB にも保存します。
クローラの設定情報
S2Robot のパラメータは S2RobotContext が保持しています。 値を変更する場合は、クラスパスに s2robot.dicon を置き、設定情報を上書きします。 (ソースコード上でもメソッド呼出により変更可能です)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> : <component name="s2Robot" class="org.seasar.robot.S2Robot" instance="prototype" > <property name="numOfThread">10</property> <property name="maxThreadCheckCount">20</property> <property name="maxDepth">-1</property> <property name="maxAccessCount">0</property> </component> : </components>
- numOfThread: クロール実行時のスレッド数
- maxThreadCheckCount: 他のスレッドが実行中で、巡回 URL キューが空の場合に待つ回数
- maxDepth: 巡回する深さ
- maxAccessCount: 巡回する回数
クロール結果の処理 (Rule, ResponseProcessor, Transformer)
クロール結果の処理内容を定義することができます。 Rule によりクロールした結果の処理方法を選択して、ResponseProcessor でクロール結果を処理することが可能です。 Transformer はクロールして得たレスポンス内容を別な形式に変換します。 これらの処理内容は dicon ファイル内で定義することができます。
クロール結果の取得 (DataService)
クロール結果は DataSerivce インターフェースで取得することができます。 次のメソッドが提供されています。
- void store(AccessResult accessResult): クロール結果(AccessResult)を保存します。
- void update(AccessResult accessResult): クロール結果(AccessResult)を更新します。
- int getCount(String sessionId): 指定された sessionId で保存されているクロール結果の数を返します。
- void delete(String sessionId): 指定された sessionId で保存されているクロール結果をすべて削除します。
- void deleteAll(): すべてのクロール結果を削除します。
- AccessResult getAccessResult(String sessionId, String url): 指定された sessionId と url で保存されているクロール結果を返します。
- ListAccessResult getAccessResultList(String url, boolean hasData): 指定された sessionId で保存されているクロール結果の一覧を返します。hasData を true にすると、Transformer により変換された抽出結果が AccessResult に含まれます。
- void iterate(String sessionId, final AccessResultCallback accessResultCallback): 指定された sessionId と accessResultCallback を渡して、そのセッション ID に保存されているクロール結果を順に accessResultCallback に渡して処理します。
DataService を利用するには、以下のようにアクションクラスやサービスクラスなどで DI してください。
@Resource protected DataService dataService;
または、S2Container より取得することもできます。
DataService dataService = (DataService) container .getComponent(DataService.class);
クロール結果 (AccessResult)
クロール結果は AccessResult エンティティとして保存されます。 AccessResult には、URL や HTTP ステータスコードなどの 1 つの URL をクロールしたときの結果が保存されています。 クロールした結果は、指定された Transformer で内容を変換され、AccessResultData エンティティとして保存されます。 AccessResult は DataService インターフェースを通して取得することができます。