この章では、BaseConfigurator
クラスに関する情報と、このクラスのメソッドとインタフェースを実装してクローラのサイト・キャプチャ・プロセスを制御する方法について説明します。また、FirstSiteIIクローラのSite Captureインストールに使用できるサンプル・コードについても説明します。
この章は、次の項が含まれています。
クローラを制御するには、少なくとも開始URIとリンク抽出ロジックを使用してCrawlerConfigurator.groovy
ファイルをコーディングする必要があります。どちらの情報もgetStartUri()
およびcreateLinkExtractor()
メソッドを通じて提供されます。必要に応じてコードを追加して、たとえば、クロールするリンク数、クロールの深さ、クロール後イベントの呼出し(ダウンロードされたファイルのWebサーバーのドキュメント・ベースへの静的コピーなど)を指定できます。
使用するメソッドとインタフェースは、BaseConfigurator
クラスに用意されています。デフォルトの実装は、ターゲット・サイトの構造と収集するデータに適した方法でクロール・プロセスをカスタマイズおよび制御するためにオーバーライドできます。
この章では、最初にBaseConfigurator
のメソッド(第50.2項「BaseConfiguratorのメソッド」を参照)と単純なCrawlerConfigurator.groovy
ファイル(第50.2.2項「createLinkExtractor」を参照)を取り上げ、必要なメソッドの使用方法を示します。さらに、クローラのカスタマイズ方法について説明した後、Site CaptureのJavaインタフェース(デフォルト実装とカスタム実装を含む)について説明します。
CrawlerConfigurator.groovy
ファイルには、CrawlerConfigurator
クラスのコードが含まれています。このクラスでは、クローラのデフォルト実装を提供する抽象クラスのBaseConfigurator
を拡張する必要があります。BaseConfigurator
クラスのメソッドとインタフェースについては、表50-1に一覧を示し、それに続く各項で説明しています。基本的なサンプルのCrawlerConfigurator.groovy
ファイルについては、第50.2.2項「createLinkExtractor」を参照してください。
表50-1 BaseConfigurator
クラスのメソッド
メソッド・タイプ | メソッド | メモ |
---|---|---|
必須 |
|
なし |
必須 |
|
第50.12.1項「LinkExtractor」インタフェースのファクトリ・メソッド。脚注 1 、脚注 2 |
クローラのカスタマイズ |
|
なし |
クローラのカスタマイズ |
|
なし |
クローラのカスタマイズ |
第50.3.3項「getConnectionTimeout」 |
なし |
クローラのカスタマイズ |
|
なし |
クローラのカスタマイズ |
第50.5項「getPostExecutionCommand」 |
なし |
クローラのカスタマイズ |
|
なし |
クローラのカスタマイズ |
|
なし |
クローラのカスタマイズ |
第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()
です。
このメソッドは、クローラの開始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
メソッドは、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()
がオーバーライドされています。
注意: 次に示すサンプルでは、追加のメソッド
|
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
クラスには、必須のメソッド以外にも、デフォルト実装を備えたメソッドが含まれています。これらのメソッドをオーバーライドすると、ターゲット・サイトの構造と収集する必要のあるデータに適する方法でクロールのプロセスをカスタマイズできます。
この項の内容は、次のとおりです。
このメソッドは、クロールするリンクの数を制御するために使用します。リンクの数は正の整数にする必要があります。それ以外の場合は、同一ドメイン内で開始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; }
このメソッドは、クロールするサイトの最大の深さを制御するために使用します。指定した深さを超えるリンクは無視されます。開始ページの深さは、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,000ミリ秒を設定するには:
/** * default: 30000 ms * @return Connection timeout in milliseconds. */ public int getConnectionTimeout() { return 50000; // in milliseconds }
このメソッドでは、クロール対象のリンクに対して、クローラが行ったリクエストのソケット・タイムアウトを制御します。
例
ソケット・タイムアウトに30,000ミリ秒を設定するには:
/** * default: 20000 ms * @return Socket timeout in milliseconds. */ public int getSocketTimeout() { return 30000; // in milliseconds }
このメソッドは、カスタムのクロール後ロジックを挿入するために使用します。このメソッドは、クローラがクロール・セッションを終了したときに呼び出されます。このメソッドでは、スクリプトの絶対パス、またはコマンドとパラメータ(パラメータがある場合)を返す必要があります。
たとえば、getPostExecutionCommand()
を使用すると、取得したファイルをクロール・セッションの終了後に静的にコピーするようなバッチやシェル・スクリプトを起動して、Webサーバーのドキュメント・ベースへのデプロイメントを自動化できます。
注意:
|
例
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"; }
このメソッドでは、クロール・プロセスに使用するワーカー・スレッドの数を制御します。クロール・セッション用に生成する並列スレッドの理想的な数は、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; }
このメソッドは、クローラがサイトを巡回するときに利用するユーザー・エージェントを構成するために使用します。このメソッドは、ブラウザでのレンダリングと異なる方法で、サイトをレンダリングするときに使用する必要があります(モバイル・デバイスでサイトをレンダリングする場合など)。
例
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 "; }
このメソッドは、クロールした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'); }
デフォルト実装の詳細は、第50.12.2.2項「ResourceRewriterのデフォルト実装の使用」を参照してください。
ResourceRewriter
インタフェースの実装方法の詳細は、第50.12.2.3項「カスタムResourceRewriterの作成」を参照してください。
このメソッドは、クロールの終了時に電子メールを送信するための実装を提供します。createMailer
メソッドは、Mailer
インタフェースのファクトリ・メソッドです。
Site Captureには、静的またはアーカイブのキャプチャ・セッションが終了したときに、クローラ・レポートを電子メールで送信する、SMTP over TLSの実装が用意されています(クローラ・レポートは、report.txt
ファイルです。詳細は、『Oracle Fusion Middleware 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(); }
デフォルト実装の詳細は、第50.12.3.2項「Mailerのデフォルト実装の使用」を参照してください。
ResourceRewriter
インタフェースの実装方法の詳細は、第50.12.3.3項「カスタムMailerの作成」を参照してください。
このメソッドは、クロール先のサイトがプロキシ・サーバーの背後にある場合に、オーバーライドする必要があります。プロキシ・サーバーは、このメソッドで構成できます。
例
プロキシ・サーバーを構成するには:
/** * 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); }
このメソッドは、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 }
Site Captureに用意されている、デフォルト実装のあるインタフェースは、次のとおりです。
リンク・エクストラクタは、クロール・セッションでSite Captureの巡回先にするリンクを指定するために使用します。この実装は、CrawlerConfigurator.groovy
ファイルを通じて挿入されます。この実装は、クロール・セッションの一環としてダウンロードされたマークアップからリンクを抽出するために、クロール・セッション中にSite Captureフレームワークによってコールされます。
Site Captureには、LinkExtractor
の実装が1つ用意されています。カスタムのリンク抽出ロジックを作成して、デプロイすることもできます。詳細は、次の各項を参照してください。
このインタフェースに含まれるメソッドは、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); }
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ドキュメントで、 |
注意: Site Captureには、サンプルのリンク・エクストラクタ(およびリソース・リライタ)があります。FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。詳細は、次のフォルダにある
|
カスタム・リンク・エクストラクタを作成するには:
任意のJava IDEで、プロジェクトを作成します。
ファイルfw-crawler-core.jar
を、<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/lib
フォルダから、プロジェクトのビルド・パスにコピーします。
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. } }
カスタム実装用のjar
ファイルを作成して、そのファイルを次のフォルダにコピーします。
<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/lib
Site Captureアプリケーション・サーバーを再起動します。
カスタム・リンク・エクストラクタ・クラス(この例では、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");
}
リソース・リライタは、クロール・セッション中にダウンロードしたマークアップ内のURLをリライトするために使用します。この実装は、CrawlerConfigurator.groovy
ファイルを通じて挿入する必要があります。
次に示すようなユースケースで、リソース・リライタが必要になります。
動的サイトをクローリングして、静的コピーを作成する。たとえば、FirstSiteIIサンプル・サイトには、動的リンクが含まれています。FirstSiteIIを静的サイトに変換するには、ダウンロードしたマークアップ内のURLをリライトする必要があります。
絶対URLを相対URLに変換する。たとえば、http://www.example.com/abc.html
のようなURLがマークアップに含まれている場合、クローラは、このURLからhttp://www.example.com
を削除する必要があります。これにより、ダウンロードしたファイルが保存されているホストから、リソースを提供できるようになります。
Site Captureには、ResourceRewriter
の実装が2つ用意されています。また、カスタムの実装を作成することもできます。詳細は、次の各項を参照してください。
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; }
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)
注意: Site Captureには、サンプルのリソース・リライタ(およびリンク・エクストラクタ)があります。FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。詳細は、次のフォルダにある
|
カスタム・リソース・リライタを作成するには:
任意のIDEで、プロジェクトを作成します。
fw-crawler-core.jar
ファイルを、<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/lib
フォルダからプロジェクトのビルド・パスにコピーします。
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. } }
カスタム実装用のjar
ファイルを作成して、そのファイルを<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/lib
フォルダにコピーします。
Site Captureアプリケーション・サーバーを再起動します。
カスタムの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");
}
メーラーは、クロールの終了後に電子メールを送信するために使用します。この実装は、CrawlerConfigurator.groovy
ファイルを通じて挿入する必要があります。
Site Captureには、SMTPTlsMailer
の実装が用意されています。これを使用して、SMTP-TLSメール・サーバーからクローラ・レポートを送信できます。また、Mailer
インタフェースを実装して、SMTP-TLS以外のサーバー(認証なしのSMTP、POP3など)から電子メールを送信するためのカスタム・ロジックを提供できます。カスタム・ロジックでは、電子メールを、クローラ・レポート以外のオブジェクトとして指定できます。CrawlerConfigurator.groovy
ファイルでMailer
が構成されていない場合は、デフォルトでNullMailer
が挿入されます。詳細な情報は、次のトピックを参照してください:
sendMail
は、Mailer
がCrawlerConfigurator.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; }
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()); } }
カスタム・メーラーを作成するには:
任意のIDEで、プロジェクトを作成します。
fw-crawler-core.jar
ファイルを、<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/lib
フォルダから、プロジェクトのビルド・パスにコピーします。
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. } }
カスタム実装用のjar
ファイルを作成して、そのファイルを<SC_INSTALL_DIR>/fw-site-capture/webapps/ROOT/WEB-INF/lib
フォルダにコピーします。
Site Captureアプリケーション・サーバーを再起動します。
カスタム・メーラー・クラス(この例では、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管理者ガイド』を参照)を電子メールで送信します。ロジックをカスタマイズすることで、クローラ・レポート以外のオブジェクトを電子メール送信できるようになります。
この章で説明した、Site CaptureのBaseConfigurator
クラスに含まれるメソッドとインタフェースは、クローラのサイト・キャプチャ・プロセスを制御するためのものです。この項では、メソッドとインタフェース、およびそれらのデフォルト実装についての概要を示します。
この項の内容は、次のとおりです。
Site CaptureのBaseConfigurator
で使用されるメソッドの一覧は、次のとおりです。
この一覧のファクトリ・メソッドは、次に示すインタフェースに含まれています。
第50.2.2項「createLinkExtractor」は、第50.12.1項「LinkExtractor」インタフェースに含まれています。
第50.8項「createResourceRewriter」は、第50.12.2項「ResourceRewriter」インタフェースに含まれています。
第50.9項「createMailer」は、第50.12.3項「Mailer」インタフェースに含まれています。
Site CaptureのBaseConfigurator
で使用されているインタフェースは、次のとおりです。
デフォルト実装は、正規表現に基づいてリンクを抽出する、PatternLinkExtractor
です。
また、Site Captureには、サンプルのリンク・エクストラクタ(およびサンプルのリソース・リライタ)があります。FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。ソース・コードは、フォルダ<SC_INSTALL_DIR>/fw-site-capture/crawler/_sample/FirstSiteII/src
から入手可能です。
カスタムのリンク・エクストラクタ・ロジックを作成して、デプロイできます。
デフォルト実装は、リンクのリライトを省略するNullResourceRewriter
と、正規表現に基づいてURLをリライトするPatternResourceRewriter
です。
Site Captureには、サンプルのリソース・リライタ(およびサンプルのリンク・エクストラクタ)があります。FirstSiteIIサンプル・クローラは、これらを使用して、WebCenter Sitesの動的なFirstSiteII Webサイトを静的サイトとしてダウンロードします。ソース・コードは、フォルダ<SC_INSTALL_DIR>/fw-site-capture/crawler/_sample/FirstSiteII/src
から入手可能です。
URLをリライトする独自のロジックを作成して、デプロイできます。
デフォルト実装は、クローラ・レポートをSMTP-TLSメール・サーバーから送信するSMTPTlsMailer
です。これとは別のタイプのサーバーから別のタイプのオブジェクトを電子メールで送信するように、ロジックをカスタマイズできます。