ヘッダーをスキップ
Oracle® Fusion Middleware WebCenter Sites開発者ガイド
11gリリース1 (11.1.1.8.0)
E49681-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

この章では、BaseConfiguratorクラスに関する情報と、このクラスのメソッドとインタフェースを実装してクローラのサイト・キャプチャ・プロセスを制御する方法について説明します。また、FirstSiteIIクローラのSite Captureインストールに使用できるサンプル・コードについても説明します。

この章は、次の項が含まれています。

50.1 クローラ制御の概要

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

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

この章では、最初にBaseConfiguratorのメソッド(第50.2項「BaseConfiguratorのメソッド」を参照)と単純なCrawlerConfigurator.groovyファイル(第50.2.2項「createLinkExtractor」を参照)を取り上げ、必要なメソッドの使用方法を示します。さらに、クローラのカスタマイズ方法について説明した後、Site CaptureのJavaインタフェース(デフォルト実装とカスタム実装を含む)について説明します。

50.2 BaseConfiguratorのメソッド

CrawlerConfigurator.groovyファイルには、CrawlerConfiguratorクラスのコードが含まれています。このクラスでは、クローラのデフォルト実装を提供する抽象クラスのBaseConfiguratorを拡張する必要があります。BaseConfiguratorクラスのメソッドとインタフェースについては、表50-1に一覧を示し、それに続く各項で説明しています。基本的なサンプルのCrawlerConfigurator.groovyファイルについては、第50.2.2項「createLinkExtractor」を参照してください。

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

メソッド・タイプ メソッド メモ

必須

第50.2.1項「getStartUri」


なし

必須

第50.2.2項「createLinkExtractor」


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

クローラのカスタマイズ

第50.3.1項「getMaxLinks」


なし

クローラのカスタマイズ

第50.3.2項「getMaxCrawlDepth」


なし

クローラのカスタマイズ

第50.3.3項「getConnectionTimeout」


なし

クローラのカスタマイズ

第50.4項「getSocketTimeout」


なし

クローラのカスタマイズ

第50.5項「getPostExecutionCommand」


なし

クローラのカスタマイズ

第50.6項「getNumWorkers」


なし

クローラのカスタマイズ

第50.7項「getUserAgent」


なし

クローラのカスタマイズ

第50.8項「createResourceRewriter」


第50.12.2項「ResourceRewriter」インタフェースのファクトリ・メソッド。


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

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

この項の内容は、次のとおりです。

BaseConfiguratorの2つの抽象メソッドは、CrawlerConfiguratorでオーバーライドする必要があります。該当するメソッドは、getStartUri()createLinkExtractor()です。

50.2.1 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.
}

50.2.2 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の詳細は、第50.12.1.2項「LinkExtractorのデフォルト実装の使用」を参照してください。

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

基本の構成ファイル

次に示す、簡単な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;
}

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

BaseConfiguratorクラスには、必須のメソッド以外にも、デフォルト実装を備えたメソッドが含まれています。これらのメソッドをオーバーライドすると、ターゲット・サイトの構造と収集する必要のあるデータに適する方法でクロールのプロセスをカスタマイズできます。

この項の内容は、次のとおりです。

50.3.1 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;
}

50.3.2 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;
}

50.3.3 getConnectionTimeout

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

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

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

50.4 getSocketTimeout

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

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

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

50.5 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";
}

50.6 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;
}

50.7 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 ";
}

50.8 createResourceRewriter

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

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

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');
}

50.9 createMailer

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

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

/**
 * 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();
}

50.10 getProxyHost

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


注意:

getProxyHostを使用するときには、getProxyCredentialsも使用します(第50.11項「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);
}

50.11 getProxyCredentials

このメソッドは、getProxyHostメソッドで構成されるプロキシ・サーバーの資格証明を挿入するために使用します(第50.10項「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
}

50.12 インタフェース

Site Captureに用意されている、デフォルト実装のあるインタフェースは、次のとおりです。

50.12.1 LinkExtractor

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

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

50.12.1.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);
}

50.12.1.2 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クラスの説明を参照してください。


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


注意:

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インタフェースについては、第50.12.1.1項「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");
    }
    

50.12.2 ResourceRewriter

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

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

  • 動的サイトをクローリングして、静的コピーを作成する。たとえば、FirstSiteIIサンプル・サイトには、動的リンクが含まれています。FirstSiteIIを静的サイトに変換するには、ダウンロードしたマークアップ内のURLをリライトする必要があります。

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

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

50.12.2.1 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;

}

50.12.2.2 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)

50.12.2.3 カスタム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インタフェースを実装します。(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");
      }
    

50.12.3 Mailer

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

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

50.12.3.1 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;
}

50.12.3.2 Mailerのデフォルト実装の使用

Site Captureには、SMTP-TLSサーバー・ベースの電子メールの実装が用意されています。この実装では、静的またはアーカイブのクロール・セッションが終了したときにクローラ・レポートを送信します(クローラ・レポートは、report.txtファイルです。詳細は、『Oracle Fusion Middleware 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());
  }
}

50.12.3.3 カスタム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ファイル。『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照)を電子メールで送信します。ロジックをカスタマイズすることで、クローラ・レポート以外のオブジェクトを電子メール送信できるようになります。

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

この章で説明した、Site CaptureのBaseConfiguratorクラスに含まれるメソッドとインタフェースは、クローラのサイト・キャプチャ・プロセスを制御するためのものです。この項では、メソッドとインタフェース、およびそれらのデフォルト実装についての概要を示します。

この項の内容は、次のとおりです。

50.13.2 インタフェース

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

  • 第50.12.1項「LinkExtractor」

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

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

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

  • 第50.12.2項「ResourceRewriter」

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

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

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

  • 第50.12.3項「Mailer」

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