サンプルHTMLMetatagFilterプラグインの概要

このサンプルでは、(IAS\<version>\sample\custom-web-crawler-plugin\srcディレクトリにある)HTMLMetatagFilter.javaソース・ファイル内のHTMLMetatagFilterクラスのソースを使用します。独自のプラグインを書き込んでいた場合は、カスタム・プラグインのコードが書き込まれています。

このソース・ファイルは、カスタム・プラグイン・パッケージのテンプレートとして使用できます。
package com.endeca.eidi.web.parse;

import java.util.Map;
import java.util.Properties;

import org.apache.hadoop.conf.Configuration;
import org.apache.nutch.parse.HTMLMetaTags;
import org.apache.nutch.parse.Parse;
import org.apache.nutch.parse.ParseData;
import org.apache.nutch.parse.ParseFilter;
import org.apache.nutch.protocol.Content;

public class HTMLMetatagFilter implements ParseFilter {

    public static String METATAG_PROPERTY_NAME_PREFIX = "Endeca.Document.HTML.MetaTag.";

    public Parse filter(Content content, Parse parse) throws Exception {
        parse.getData().getParseMeta().add("FILTER-HTMLMETATAG", "ACTIVE");
        ParseData parseData = parse.getData();
        if (parseData == null) return parse;

        HTMLMetaTags tags = parse.getData().getMetaTag();
        if (tags == null) return parse;

        Properties tagProperties = tags.getGeneralTags();
        for (Map.Entry<Object,Object> entry : tagProperties.entrySet()) {
            parse.getData().getParseMeta().add(METATAG_PROPERTY_NAME_PREFIX
                + (String)entry.getKey(), (String)entry.getValue());
            }
            return parse;
        }

        public Configuration getConf() {
            return null;
        }

        public void setConf(Configuration conf) {
        }
}
コードは次のように機能します。
  1. Metadata.add()メソッドにより、メタデータの名前/値マッピングをParseオブジェクト(名前: FILTER-HTMLMETATAG、値: ACTIVE)に追加します。カスタム解析フィルタ・プラグインを最初に実行する場合は、コードにこの行を残して、オブジェクトの更新を確認できます。プラグインが正常に実行することを確認し、問題がなければ、コードからこの行を削除できます。
    parse.getData().getParseMeta().add("FILTER-HTMLMETATAG",
    "ACTIVE");
  2. Parse.getData()メソッドにより、ParseDataオブジェクトが戻されます。このオブジェクトには、ページのコンテンツから抽出されたデータが含まれます。プラグインはディフェンシブな方法でプログラムされる必要があるため、続行する前にオブジェクトをチェックして、オブジェクトがnullではないことを確認します。
    ParseData parseData = parse.getData();
    if (parseData == null) return parse;
  3. ParseData.getMetaTag()メソッドにより、HTMLMetaTagsオブジェクトが戻されます。このオブジェクトには、ページから抽出されたHTMLメタ・タグに関する情報が保持されます。このメソッドはEndecaによって追加されているため、オリジナルのNutch APIの一部ではありません。オブジェクトをチェックして、オブジェクトにデータが含まれていることを確認します。
    HTMLMetaTags tags = parse.getData().getMetaTag();
    if (tags == null) return parse;
  4. HTMLMetaTags.getGeneralTags()メソッドにより、すべてのプロパティを含むPropertiesオブジェクトが戻されます。
    Properties tagProperties = tags.getGeneralTags();
  5. プロパティを使用して繰り返します。名前/値ペアごとに、(ParseData.getParseMeta()メソッドによりアクセスできる)Parseのメタデータ・オブジェクトに新規エントリを追加します。MetaData.add()メソッドにより、メタデータ名前/値マッピングを実際に追加します。
    for (Map.Entry<Object,Object> entry : tagProperties.entrySet()) {
    parse.getData().getParseMeta().add(METATAG_PROPERTY_NAME_PREFIX
    + (String)entry.getKey(), (String)entry.getValue());
    }
クラスが終了すると、変更後のParseオブジェクトが戻されます。