43 クローラ構成ファイルのコーディング

BaseConfiguratorクラスとそのメソッド、およびインタフェースでは、クローラのサイト・キャプチャ・プロセスを制御します。サンプル・コードは、FirstSiteIIクローラのSite Captureインストールに使用できます。

トピック:

クローラの制御について

クローラを制御するには、そのCrawlerConfigurator.groovyファイルをコーディングし、少なくとも開始URIおよびリンク抽出ロジックを記述する必要があります。この情報をgetStartUri()メソッドおよびcreateLinkExtractor()メソッドで指定します。コードを追加して、たとえば、クロールするリンク数、クロールの深さ、クロール後イベントの呼出し(ダウンロードされたファイルのWebサーバーのドキュメント・ベースへの静的コピーなど)を指定できます。

使用するメソッドとインタフェースは、BaseConfiguratorクラスに用意されています。デフォルトの実装は、ターゲット・サイトの構造と収集するデータに適した方法でクロール・プロセスをカスタマイズおよび制御するためにオーバーライドできます。

以降のトピックで説明するBaseConfiguratorメソッドおよび簡単なCrawlerConfigurator.groovyファイルでは、必須メソッドの使用方法を示します。さらに、クローラのカスタマイズ方法について説明した後、Site CaptureのJavaインタフェース(デフォルト実装とカスタム実装を含む)について説明します。

BaseConfiguratorメソッド

CrawlerConfigurator.groovyファイルには、CrawlerConfiguratorクラスのコードが含まれています。このクラスでは、クローラのデフォルト実装を提供する抽象クラスのBaseConfiguratorを拡張する必要があります。

この表は、BaseConfiguratorクラスのメソッドおよびインタフェースを示しています。

表43-1 BaseConfiguratorクラスのメソッド

メソッド・タイプ メソッド ノート

必須

getStartUri

なし

必須

createLinkExtractor

LinkExtractorインタフェースのファクトリ・メソッド。脚注1脚注2

クローラのカスタマイズ

getMaxLinks

なし

クローラのカスタマイズ

getMaxCrawlDepth

なし

クローラのカスタマイズ

getConnectionTimeout

なし

クローラのカスタマイズ

getSocketTimeout

なし

クローラのカスタマイズ

getPostExecutionCommand

なし

クローラのカスタマイズ

getNumWorkers

なし

クローラのカスタマイズ

getUserAgent

なし

クローラのカスタマイズ

createResourceRewriter

ResourceRewriterインタフェースのファクトリ・メソッド。

脚注1

一覧に示したインタフェースには、この章で説明するデフォルトの実装があります。

脚注2

Site Captureには、サンプルのリンク・エクストラクタとリソース・リライタがあり、どちらもFirstSiteIIサンプル・クローラによって使用されます。「カスタム・リンク・エクストラクタの作成とデプロイ」および「カスタムResourceRewriterの作成」を参照してください。

このトピックの内容は次のとおりです。

getStartUri

このメソッドは、クローラの開始URIを挿入します。URIが同一サイトに属している場合は、1つ以上のURIをクロールに構成します。複数の開始点を指定すると、複数のクロールが並行に開始されます。

www.example.comサイトの開始URIを指定するには:

/**
 * The method is used to configure the site url which needs to be crawled.
 */
public String[] getStartUri()
{
return ["http://www.example.com/home"]; //Groovy uses brackets for an array.
}

サイトに複数の開始URIを指定するには、カンマ区切りの配列を入力します。

/**
 * The method is used to configure the site url which needs to be crawled.
 */
public String[] getStartUri()
{
return ["http://www.example.com/product","http://www.example.com/support"]; //Groovy uses brackets for an array.
}

createLinkExtractor

このメソッドは、クロールしたページからリンクを抽出するロジックを構成します。抽出したリンクは、巡回の対象になります。基本的なサンプルのCrawlerConfigurator.groovyファイルを示します。

BaseConfiguratorの2つの抽象メソッドは、CrawlerConfiguratorでオーバーライドする必要があります。該当するメソッドは、getStartUri()createLinkExtractor()です。createLinkExtractorメソッドは、LinkExtractorインタフェースのファクトリ・メソッドです。

  • たとえば、LinkExtractorインタフェースを実装し、HTMLパーサーを使用してページを解析し、クロールに利用するリンクを抽出します。

  • リンクを抽出するには、正規表現を使用するデフォルト実装のPatternLinkExtractorを使用します。たとえば、PatternLinkExtractorを使用すると、/home/products形式のリンクを、<a href="/home/product">Products</a>のような式で抽出できます。

    www.example.comサイトの<a href="/home/product">Products</a>からリンクを抽出する正規表現を使用するには:

    /**
     * The method is used to define the link extraction
     * algorithm from the crawled pages.
     * PatternLinkExtractor is a regex based extractor
     * which parses the links on the web page
     * based on the pattern configured inside the constructor.
     */
    public LinkExtractor createLinkExtractor()
    {
    return new PatternLinkExtractor("['\"\\(](/[^\\s<'\"\\)]*)",1);
    }
    
  • 正規表現とPatternLinkExtractorの詳細は、「LinkExtractorのデフォルト実装の使用」を参照してください。

  • LinkExtractorインタフェースの実装方法の詳細は、「カスタム・リンク・エクストラクタの作成とデプロイ」を参照してください。

基本の構成ファイル

次に示す、簡単なCrawlerConfigurator.groovyファイルの例では、必須のメソッドgetStartUri()createLinkExtractor()がオーバーライドされています。

この例では、追加のメソッドgetMaxLinks()をオーバーライドしています。サンプルでは、テストが短時間で完了するように、150を返しています。

CrawlerConfigurator.groovyというファイルは、依存性を挿入するために使用しています。そのため、この名前は変更しないでください。

package com.fatwire.crawler.sample

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import java.util.regex.Pattern;

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;

import com.fatwire.crawler.*;
import com.fatwire.crawler.remote.*;
import com.fatwire.crawler.remote.di.*;
import com.fatwire.crawler.impl.*;
import com.fatwire.crawler.util.FileBuilder;

import org.apache.commons.lang.SystemUtils;
import org.apache.http.HttpHost;
import org.apache.http.auth.*; 
import org.apache.http.client.*; 
import org.apache.http.impl.client.*;
/**
 * Configurator for the crawler.
 * This is used to inject the dependency inside the crawler 
 * to control the crawling process
 */

public class CrawlerConfigurator extends BaseConfigurator {

public CrawlerConfigurator(GlobalConfigurator delegate){
super(delegate);
}

/** 
 * The method is used to configure the site url which needs to be crawled.
 */
public String[] getStartUri() {
return ["http://www.fatwire.com/home"]; //Groovy uses brackets for an array.
}

/**
 * The method is used to define the link extraction algorithm 
 * from the crawled pages.
 * PatternLinkExtractor is a regex based extractor which parses 
 * the links on the web page
 * based on the pattern configured inside the constructor.
 */
public LinkExtractor createLinkExtractor() {
return new PatternLinkExtractor("['\"\\(](/[^\\s<'\"\\)]*)",1);
}

/**
 * The method is used to control the maximum number of links 
 * to be crawled as part of this crawl session.
 */
public int getMaxLinks()
{
150;
}

クローラのカスタマイズ・メソッド

必須メソッドの他に、BaseConfiguratorクラスにはデフォルトの実装を備えたメソッドがあります。これらのメソッドをオーバーライドして、ターゲット・サイトの構造および収集対象のデータに適した方法でクロール・プロセスをカスタマイズできます。

次のトピックを参照してください。

getMaxLinks

このメソッドは、クロールするリンクの数を制御します。リンクの数は正の整数にする必要があります。それ以外の場合は、同一ドメイン内で開始URIから到達可能な、すべてのリンクをクロールでスキャンするようになります。

クロールに500のリンクを指定するには:

/**
 * default: -1; crawler will crawl over all the links reachable from the start URI 
 * @return the maximum number of links to download.
 */
public int getMaxLinks()
{
return 500;
}

getMaxCrawlDepth

このメソッドは、クロールするサイトの最大の深さを制御します。指定した深さを超えるリンクは無視されます。開始ページの深さは、0です。

/**
 * default: -1. Indicates infinite depth for a site.
 * @return the maximum depth to which we need to crawl the links.
 */
public int getMaxCrawlDepth()
{
return 4;
}

getConnectionTimeout

このメソッドでは、ターゲット・サイトへの接続を確立するまでにクローラが待機する時間を決定します。指定した時間内に接続が確立されない場合、クローラは、そのリンクを無視して後続のリンクに進みます。

接続タイムアウトに50,000ミリ秒を設定するには:

/**
 * default: 30000 ms
 * @return Connection timeout in milliseconds.
 */
public int getConnectionTimeout()
{
return 50000; // in milliseconds
}

getSocketTimeout

このメソッドでは、クロール対象のリンクに対して、クローラが行ったリクエストのソケット・タイムアウトを制御します。

ソケット・タイムアウトに30,000ミリ秒を設定するには:

/**
 * default: 20000 ms
 * @return Socket timeout in milliseconds.
 */
public int getSocketTimeout()
{
return 30000; // in milliseconds
}

getPostExecutionCommand

このメソッドは、カスタムのクロール後ロジックを挿入するもので、クローラがクロール・セッションを完了すると呼び出されます。スクリプトかコマンドの絶対パス、さらにパラメータを返す必要があります(ある場合)。

たとえば、getPostExecutionCommand()を使用すると、取得したファイルをクロール・セッションの終了後に静的にコピーするようなバッチやシェル・スクリプトを起動して、Webサーバーのドキュメント・ベースへのデプロイメントを自動化できます。

ノート:

  • スクリプトやコマンドは、Site Captureをホストするすべてのサーバー上の同じ場所に存在している必要があります。

  • サイト・キャプチャ・インタフェースからは(250MBを超える)大きなアーカイブ・ファイルをダウンロードしないでください。Site Captureファイル・システムから目的の場所にファイルをコピーする場合は、getPostExecutionCommandを使用してください。アーカイブのサイズは、「ジョブの詳細」フォームに示されるクローラ・レポートから取得できます。

Site Captureサーバー上のcopy.batというバッチ・スクリプトを実行するには:

/**
 * default: null.
 * @return the command string for post execution. 
 * Null if there is no such command.
 */
public String getPostExecutionCommand()
{
// The file is supposed to be at the path C:\\commands folder
// on the computer where the site capture server is running
return "C:\\commands\\copy.bat";
}

getNumWorkers

このメソッドでは、クロール・プロセスに使用するワーカー・スレッドの数を制御します。クロール・セッション用に生成する並列スレッドの理想的な数は、Site Captureをホストするコンピュータのアーキテクチャに応じて異なります。

1つのクローラ・プロセスに対して10個のワーカー・プロセスを開始するには:

/**
 * default: 4.
 * @return the number of workers to start.
 * Workers will concurrently downloads resources.
 */
public int getNumWorkers()
{
// Start 10 worker threads which is involved in the crawl process. 
return 10;
}

getUserAgent

このメソッドは、クローラがサイトを巡回するときに使用するユーザー・エージェントを構成します。通常とは異なる方法でサイトをレンダリングするには、このメソッドを使用する必要があります。たとえば、モバイル・デバイスにサイトをレンダリングする場合です。

FireFox 3.6.17のユーザー・エージェントを構成するには:

/**
 * default: publish-crawler/1.1 (http://www.fatwire.com)
 * @return the user agent identifier
 */
public String getUserAgent()
{
return "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US;rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17 ";
}

createResourceRewriter

このメソッドは、クロールしたHTMLページ内のURLをリライトします。たとえば、WebCenter Sitesの動的なWebサイトを静的に配信できるようにするために、URLをリライトします。

createResourceRewriterメソッドは、ResourceRewriterインタフェースのファクトリ・メソッドです。

  • ResourceRewriterインタフェースは、たとえば、動的URLを静的URLに変換したり、絶対URLを相対URLに変換したりするように実装します。

  • また、次に示すデフォルト実装を使用することもできます。

    • NullResourceRewriter: どのURLもリライトしません。

    • PatternResourceRewriter: 正規パターンを検索して、指定に従ってリライトします。

PatternResourceRewriterを使用して、http://www.site.com/home.htmlのようなURLを/home.htmlにリライトするには:

/**
 * Factory method for a ResourceRewriter.
 * default: new NullResourceRewriter();
 * @return the rewritten resource modifies the html before it is saved to disk.
 */
public ResourceRewriter createResourceRewriter()
{
new PatternResourceRewriter("http://www.site.com/([^\\s'\"]*)", '/$1');
}

createMailer

このメソッドは、クロール後に電子メールを送信するための実装を提供します。createMailerメソッドは、Mailerインタフェースのファクトリ・メソッドです。

  • Site Captureには、静的またはアーカイブのキャプチャ・セッションが終了したときに、クローラ・レポートを電子メールで送信する、SMTP over TLSの実装が用意されています(クローラ・レポートは、report.txtファイルです。詳細は、『Oracle WebCenter Sitesの管理』を参照してください)。

  • SMTP-TLS以外のメール・サーバー(認証なしのSMTPやPOP3など)を使用している場合は、独自の実装を用意する必要があります。

電子メールを送信するには:

/**
 * Factory method for a Mailer.
 * <p/>
 * default: new NullMailer().
 * @return mailer holding configuration to send an email at the end of the crawl.
 * Should not be null.
 */
public Mailer createMailer()
{
return new NullMailer();
}

getProxyHost

getProxyHostメソッドは、クロール先のサイトがプロキシ・サーバーの背後にある場合に、オーバーライドする必要があります。プロキシ・サーバーは、このメソッドで構成できます。

ノート:

getProxyHostを使用するときには、getProxyCredentialsも使用します(「getProxyCredentials」を参照)。

プロキシ・サーバーを構成するには:

/**
 * default: null.
 * @return the host for the proxy,
 * null when there is no proxy needed
 */
public HttpHost getProxyHost()
{
//using the HTTPClient library return a HTTPHost
return new HttpHost("www.myproxyserver.com", 883);
}

getProxyCredentials

このメソッドは、getProxyHostメソッドに構成されているプロキシ・サーバーの資格証明を挿入します。

「getProxyHost」を参照してください。

sampleuserという名前のプロキシ・サーバーのユーザーを認証するには:

/**
 * default: null.
 * example: new UsernamePasswordCredentials(username, password);
 * @return user credentials for the proxy.
 */
public Credentials getProxyCredentials()
{
return new UsernamePasswordCredentials("sampleuser", "samplepassword");
//using the HTTPClient library return credentials
}

インタフェース

サイト・キャプチャは、デフォルト実装にLinkExtractorResourceRewriterMailerの各インタフェースを提供します。さらに読み進めると、これらのインタフェースに関する理解が深まります。

LinkExtractor

リンク・エクストラクタは、クロール・セッションでSite Captureの巡回先にするリンクを指定します。この実装は、CrawlerConfigurator.groovyファイルを通じて挿入されます。この実装は、クロール・セッションの一環としてダウンロードされたマークアップからリンクを抽出するために、クロール・セッション中にSite Captureフレームワークによってコールされます。

Site Captureには、LinkExtractorの実装が1つ用意されています。カスタムのリンク抽出ロジックを作成して、デプロイすることもできます。詳細は、次の項を参照してください。

LinkExtractorインタフェース

このインタフェースに含まれるメソッドは、1つのみです(extract)。このメソッドは、ダウンロードしたマークアップからリンクを抽出するアルゴリズムを提供するように実装する必要があります。

package com.fatwire.crawler;
import java.util.List;
import com.fatwire.crawler.url.ResourceURL;

/**
 * Extracts the links out of a WebResource.
 */

public interface LinkExtractor
{
/**
 * Parses the WebResource and finds a list of links (if possible).
 * @param resource the WebResource to inspect.
 * @return a list of links found inside the WebResource.
 */
List<ResourceURL> extract(final WebResource resource);
}
LinkExtractorのデフォルト実装の使用

PatternLinkExtractorは、LinkExtractorインタフェースのデフォルト実装です。PatternLinkExtractorは、正規表現に基づいてリンクを抽出します。正規表現を入力として受け取り、その正規表現に一致するリンクのみを返します。

一般的な使用方法のシナリオは、動的URLのサイトにPatternLinkExtractorを使用する方法と、静的URLのサイトにPatternLinkExtractorを使用する方法です。

  • 動的URLのサイトにPatternLinkExtractorを使用する方法:

    たとえば、www.example.comのリンクには、/home/support、および/cs/Satellite/というパターンがあるとします。この種のリンクを抽出して巡回するには、次に示すように、PatternLinkExtractorを使用します。

    /**
     * The method is used to define the link extraction algorithm 
     * from the crawled pages.
     * PatternLinkExtractor is a regex based extractor which parses 
     * the links on the web page
     * based on the pattern configured inside the constructor.
     */
    public LinkExtractor createLinkExtractor()
    {
    return new PatternLinkExtractor("['\"\\(](/[^\\s<'\"\\)]*)",1);
    }
    

    パターン['\"\\(] (/[^\\s<'\"\\)]*)を使用して、リンクを抽出します。:

    • 最初の文字は、次のいずれかになります。

      • 一重引用符( ' )

      • 二重引用符( " )

      • 左カッコ (

    • その後に、スラッシュ( / )文字が続きます

    • 最後の文字は、次のいずれかになります。

      • 空白(\s)

      • 小なり記号(<)

      • 一重引用符( ' )

      • 二重引用符( " )

      • 右カッコ )

    次に示すマークアップ内のURLを例に説明します。

    <a href='/home'>Click Me</a>

    抽出の対象は、/homeリンクのみです。このリンクは、一重引用符(')で始まり一重引用符(')で終わっているため、前述の正規表現パターンと一致します。グループ1は、結果として/homeを返します。

  • 静的URLのサイトにPatternLinkExtractorを使用する方法。

    たとえば、www.example.comのマークアップに、次のようなリンクがあるとします。

    <a href="http://www.example.com/home/index.html">Click Me</a>

    この種のリンクを抽出して巡回するために、次に示す方法でPatternLinkExtractorを使用します。:

    /**
     * The method is used to define the link extraction algorithm 
     * from the crawled pages.
     * PatternLinkExtractor is a regex based extractor which parses 
     * the links on the web page
     * based on the pattern configured inside the constructor.
     */
    public LinkExtractor createLinkExtractor()
    {
    return new PatternLinkExtractor(Pattern.compile("http://www.example.com/[^\\s<'\"]*"));
    }
    

    前述の例では、http://www.example.comで始まり、空白(\s)、小なり記号(<)、一重引用符(')または二重引用符(")で終わるリンクを抽出するように、クローラに指示しています。

    ノート:

    グループとパターンの詳細は、Javaドキュメントで、PatternクラスとMatcherクラスの説明を参照してください。

カスタム・リンク・エクストラクタの作成とデプロイ

Site Captureには、サンプルのリンク・エクストラクタ(およびリソース・リライタ)があり、FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。詳細は、次のフォルダにあるFSIILinkExtractorクラスのソース・コードを参照してください。

<SC_INSTALL_DIR>/fw-site-capture/crawler/_sample/FirstSiteII/src

カスタム・リンク・エクストラクタを作成するには::

  1. Java IDEで、プロジェクトを作成します。
  2. ファイルfw-crawler-core.jarを、<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/libフォルダから、プロジェクトのビルド・パスにコピーします。
  3. extract()の実装を提供するために、LinkExtractorインタフェースを実装します。(LinkExtractorインタフェースについては、「LinkExtractorインタフェース」を参照してください。)

    カスタム実装を示す擬似コードは、次のとおりです。

    package com.custom.crawler;
    import java.util.List;
    import com.fatwire.crawler.url.ResourceURL;
    import com.fatwire.crawler.LinkExtractor;
    /**
     * Extracts the links out of a WebResource.
     */
    public class CustomLinkExtractor implements LinkExtractor
    {
    /**
     * A sample constructor for CustomLinkExtractor 
     */
    public CustomLinkExtractor(String .......)
      {
      // Initialize if there are private members.
      // User's custom logic
      }
    
    /**
     * Parses the WebResource and finds a list of links (if possible).
     * @param resource the WebResource to inspect.
     * @return a list of links found inside the WebResource.
     */
    List<ResourceURL> extract(final WebResource resource)
      {
      // Your custom code for extraction Algorithm.
      }
    }
    
  4. カスタム実装用のjarファイルを作成して、そのファイルを次のフォルダにコピーします。

    <SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/lib

  5. Site Captureアプリケーション・サーバーを再起動します。
  6. カスタム・リンク・エクストラクタ・クラス(この例では、CustomLinkExtractor)を含めるように、CrawlerConfigurator.groovyをコーディングして依存性を挿入します。
    /**
     * User's custom link extractor mechanism to extract the links from the
     * web resource downloaded as part of the crawl session.
     * The code below is only a pseudo code for an example. 
     * User is free to implement their own custom constructor
     * as shown in the next example.
     */
    public LinkExtractor createLinkExtractor()
    {
    return new CustomLinkExtractor("Custom Logic For Your Constructor");
    }

ResourceRewriter

リソース・リライタは、クロール・セッション中にダウンロードしたマークアップ内のURLをリライトします。この実装は、CrawlerConfigurator.groovyファイルを通じて挿入する必要があります。

次に示すようなユースケースで、リソース・リライタが必要になります。

  • 動的サイトをクローリングして、静的コピーを作成する。

  • 絶対URLを相対URLに変換する。たとえば、http://www.example.com/abc.htmlのようなURLがマークアップに含まれている場合、クローラは、このURLからhttp://www.example.comを削除する必要があり、これにより、ダウンロードしたファイルが保存されているホストから、リソースを提供できるようになります。

Site Captureには、ResourceRewriterの実装が2つ用意されています。また、カスタムの実装を作成することもできます。詳細は、次の項を参照してください。

ResourceRewriterインタフェース

rewriteメソッドは、クロール・セッション中にダウンロードしたマークアップ内のURLをリライトします。

package com.fatwire.crawler;
import java.io.IOException;

/**
 * Service for rewriting a resource. The crawler will use the implementation for
 * rewrite method to rewrite the resources that are downloaded as part of crawl
 * session.
 */
public interface ResourceRewriter
{
/**
 * @param resource
 * @return the bytes after the rewrite.
 * @throws IOException
 */
byte[] rewrite(WebResource resource) throws IOException;

}
ResourceRewriterのデフォルト実装の使用

Site Captureに用意されているResourceRewriterの実装は、次のとおりです。

  • NullResourceRewriter: デフォルトで、リンクのリライトを省略するように構成されています。CrawlerConfigurator.groovyファイルでResourceRewriterが構成されていない場合は、デフォルトで、NullResourceRewriterが挿入されます。

  • PatternResourceRewriter: 正規表現に基づいてURLをリライトするために使用します。PatternResourceRewriterは、マークアップ内のリンクと一致する正規表現を入力として受け取り、一致したリンクをコンストラクタで指定した文字列に置き換えます。

    絶対URLを相対URLにリライトするには:

    リライト前:

    <a href="http://www.example.com/about/index.html">Click Me</a>

    リライト後:

    <a href="/about/index.html">Click Me</a>

    /**
     * Factory method for a ResourceRewriter.
     * default: new NullResourceRewriter();
     * @return the rewritten resource modifies the html before it is saved to disk.
     */
    public ResourceRewriter createResourceRewriter()
    {
    new PatternResourceRewriter("http://www.example.com/([^\\s'\"]*)", '/$1');
    }
    

    PatternResourceRewriterのコンストラクタは、1つのみです。このコンストラクタは、次に示すように、正規表現と置換文字列を1つずつ受け取ります。

    PatternResourceRewriter(final String regex, final String replacement)

カスタムResourceRewriterの作成

Site Captureには、サンプルのリソース・リライタ(およびリンク・エクストラクタ)があり、FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。詳細は、次のフォルダにあるFSIILinkExtractorクラスのソース・コードを参照してください。

<SC_INSTALL_DIR>/fw-site-capture/crawler/_sample/FirstSiteII/src

カスタム・リソース・リライタを作成するには::

  1. IDEで、プロジェクトを作成します。
  2. fw-crawler-core.jarファイルを、<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/libフォルダからプロジェクトのビルド・パスにコピーします。
  3. rewriteメソッドの実装を提供するために、ResourceRewriterインタフェースを実装します。

    カスタム実装を示す擬似コードは、次のとおりです。

    package com.custom.crawler;
    import com.fatwire.crawler.WebResource;
    import com.fatwire.crawler.ResourceRewriter;
    
    /**
     * Rewrite the links inside the markup downloaded as part of
     * crawl session.
     */
    public class CustomResourceRewriter implements ResourceRewriter
    {
    /**
     * A sample constructor for CustomResourceRewriter
     */
    public CustomResourceRewriter(String .......)
      {
      // Initialize if there are private members.
      // User's custom logic
      }
    
    /**
     * @param resource
     * @return the bytes after the rewrite.
     * @throws IOException
     */
    byte[] rewrite(WebResource resource) throws IOException
      {
      // Your custom code for re-writing Algorithm.
      }
    }
    
  4. カスタム実装用のjarファイルを作成して、そのファイルを<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/libフォルダにコピーします。
  5. Site Captureアプリケーション・サーバーを再起動します。
  6. カスタムのresource rewriterクラス(この例では、CustomResourceRewriter)を含めるように、CrawlerConfigurator.groovyファイルをコーディングして依存性を挿入します。
    /*
     * User's custom resource rewriting mechanism to rewrite the links from the
     * web resource downloaded as part of the crawl session.
     *
     * The code below is only a pseudo code for an example. 
     * User is free to implement their own custom constructor 
     * as shown in the next example.
     */
    public ResourceRewriter createResourceRewriter()
      {
      new CustomResourceRewriter("User's custom logic to initialize the things");
      }

Mailer

メーラーは、クロールの終了後に電子メールを送信します。この実装は、CrawlerConfigurator.groovyファイルを通じて挿入する必要があります。

Site Captureには、SMTPTlsMailerの実装が用意されています。これを使用して、SMTP-TLSメール・サーバーからクローラ・レポートを送信できます。また、Mailerインタフェースを実装して、SMTP-TLS以外のサーバー(認証なしのSMTP、POP3など)から電子メールを送信するためのカスタム・ロジックを提供できます。カスタム・ロジックでは、電子メールを、クローラ・レポート以外のオブジェクトとして指定することもできます。CrawlerConfigurator.groovyファイルでMailerが構成されていない場合は、デフォルトでNullMailerが挿入されます。

この項には次のトピックが含まれます:

Mailerインタフェース

sendMailは、MailerCrawlerConfigurator.groovyファイルで構成されていると、自動的にコールされます。

package com.fatwire.crawler;
import java.io.IOException;
import javax.mail.MessagingException;

/**
 * Service to send an email.
 */
public interface Mailer
{
/**
 * Sends the mail.
 *
 * @param subject
 * @param report
 * @throws MessagingException
 * @throws IOException
 */
void sendMail(String subject, String report)
throws MessagingException, IOException;
}
Mailerのデフォルト実装の使用

Site Captureには、静的またはアーカイブのクロール・セッションが終了したときにクローラ・レポートを送信するSMTP-TLSサーバー・ベースの電子メールの実装が用意されています。(クローラ・レポートはreport.txtファイルで、詳細は『Oracle Fusion Middleware Oracle WebCenter Sitesの管理』ログ・ファイルへのアクセスに関する項を参照してください)。

  • デフォルトのメーラーは、次に示すように、CrawlerConfigurator.groovyファイルに挿入することで使用します。

    /**
     * Factory method for a Mailer.
     * <p/>
     * default: new NullMailer().
     * @return mailer holding configuration to send an email 
     * at the end of the crawl.
     * Should not be null.
     */
    public Mailer createMailer()
    {
     try
      {
      // Creating a SmtpTlsMailer Object
      SmtpTlsMailer mailer = new SmtpTlsMailer();
    
      InternetAddress from;
      // Creating an internet address from whom the mail 
      // should be sent from = new InternetAddress("example@example.com");
    
      // Setting the mail address inside the mailer object mailer.setFrom(from);
    
      // Setting the email address of the recipient inside
      // mailer.mailer.setTo(InternetAddress.parse("example@example.com"));
    
      // Setting the email server host for to be used for email.
      // The email server should be SMTP-TLS enabled.
      mailer.setHost("smtp.gmail.com", 587);
    
      // Setting the credentials of the mail account
      // mailer.setCredentials("example@example.com", "examplepassword");
    
      return mailer;
      }
    catch (AddressException e)
      {
      log.error(e.getMessage());
      }
    }
カスタムMailerの作成

この項では、カスタムMailerの作成ステップについて説明します。

カスタム・メーラーを作成するには::

  1. IDEで、プロジェクトを作成します。
  2. fw-crawler-core.jarファイルを、<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/libフォルダから、プロジェクトのビルド・パスにコピーします。
  3. sendMailメソッドを含むMailerインタフェースを実装します。

    カスタム実装を示す擬似コードは、次のとおりです。

    package com.custom.crawler;
    import java.io.IOException;
    import javax.mail.MessagingException;
    import com.fatwire.crawler.Mailer;
    
    /**
     * Implements an interface to implement the logic for sending emails
     * when the crawl session has been completed.
     */
    public class CustomMailer implements Mailer
    {
    /**
     * A sample constructor for CustomMailer
     */
    public CustomMailer()
      {
      // Initialize if there are private members.
      // User's custom logic
      }
    
    /**
     * Sends the mail.
     *
     * @param subject
     * @param report
     * @throws MessagingException
     * @throws IOException
     */
    void sendMail(String subject, String report)
    throws MessagingException, IOException
      {
      // User's custom logic to send the emails.
      }
    }
    
  4. カスタム実装用のjarファイルを作成して、そのファイルを<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/libフォルダにコピーします。
  5. Site Captureアプリケーション・サーバーを再起動します。
  6. カスタム・メーラー・クラス(この例では、CustomMailer)を含めるように、CrawlerConfigurator.groovyファイルをコーディングして依存性を挿入します。
    /**
     * Factory method for a Mailer.
     * <p/>
     * default: new NullMailer().
     * @return mailer holding configuration to send an email 
     * at the end of the crawl.
     * Should not be null.
     */
    public Mailer createMailer()
    {
    CustomMailer mailer = new CustomMailer();
    // Do some of the initilization stuffs
    return mailer;
    }
    package com.custom.crawler;
    import java.io.IOException;
    import javax.mail.MessagingException;
    import com.fatwire.crawler.Mailer;
    
    /**
     * Implements an interface to implement the logic for sending emails
     * when the crawl session has been completed.
     */
    public class CustomMailer implements Mailer
    {
      /**
       * A sample constructor for CustomMailer
       */
      public CustomMailer()
        {
        // Initialize if there are private members.
        // User's custom logic
        }
      /**
       * Sends the mail.
       *
       * @param subject
       * @param report
       * @throws MessagingException
       * @throws IOException
       */
      void sendMail(String subject, String report)
      throws MessagingException, IOException
        {
        // User's custom logic to send the emails.
        }
    }
    

この実装では、sendMailメソッド名のString report引数でクローラ・レポートが指定されている場合(デフォルト)、クローラ・レポート(report.txtファイル)を電子メールで送信します。ロジックをカスタマイズすることで、クローラ・レポート以外のオブジェクトを電子メール送信できるようになります。

メソッドとインタフェースの概要

クローラのサイト・キャプチャ・プロセスを制御できるように、ここではサイト・キャプチャBaseConfiguratorクラスのメソッドおよびインタフェースのデフォルト実装について説明します。

次のトピックを参照してください。

メソッド

Site CaptureのBaseConfiguratorクラスで使用されているインタフェースは、次のとおりです。

ファクトリ・メソッドは、次に示すインタフェースに含まれています。

インタフェース

Site CaptureのBaseConfiguratorクラスで使用されているインタフェースは、次のとおりです。

  • LinkExtractor

    デフォルト実装は、正規表現に基づいてリンクを抽出する、PatternLinkExtractorです。

    また、Site Captureには、サンプルのリンク・エクストラクタ(およびサンプルのリソース・リライタ)があり、FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。ソース・コードは、フォルダ<SC_INSTALL_DIR>/fw-site-capture/crawler/_sample/FirstSiteII/srcから入手可能です。

    カスタムのリンク・エクストラクタ・ロジックを作成して、デプロイできます。

  • ResourceRewriter

    デフォルト実装は、リンクのリライトを省略するNullResourceRewriterと、正規表現に基づいてURLをリライトするPatternResourceRewriterです。

    Site Captureには、サンプルのリソース・リライタ(およびサンプルのリンク・エクストラクタ)があり、FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。ソース・コードは、フォルダ<SC_INSTALL_DIR>/fw-site-capture/crawler/_sample/FirstSiteII/srcから入手可能です。

    URLをリライトする独自のロジックを作成して、デプロイできます。

  • Mailer

    デフォルト実装は、クローラ・レポートをSMTP-TLSメール・サーバーから送信するSMTPTlsMailerです。これとは別のタイプのサーバーから別のタイプのオブジェクトを電子メールで送信するように、ロジックをカスタマイズできます。