About

ドキュメント

各種設定

Built by Maven

使い方

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 インターフェースを通して取得することができます。