メインコンテンツへスキップ

テンプレートエンジンツール (tools)

Template Toolkit テンプレートエンジンでは、グローバル変数 $tools が利用可能です。これには、任意のテンプレート内や JS スクレイパー 内で使用できる一連のツールが含まれています。 また、ツールの動作中にエラーが発生した場合、その説明を保持する変数 $tools.error も存在します。

クエリの追加 $tools.query.*

このツールを使用すると、タスクの実行中に既存のクエリに対して新しいクエリを追加し、抽出された結果に基づいてそれらを形成できます。これは、Parse to level 機能が実装されていないスクレイパーにおいて、その代替として使用できます。 2つのメソッドがあります:

  • [% tools.query.add(query, maxLevel) %] - 単一のクエリを追加します
  • [% tools.query.addAll(array, item, maxLevel) %] - クエリの配列を追加します

パラメータ maxLevel はクエリを追加する最大レベルを指定するもので、オプションです。省略された場合、スクレイパーは新しいクエリがある限り実質的に追加し続けます。また、ループや過剰な動作を避けるために、Unique queries (クエリ重複排除)オプションを有効にすることをお勧めします。

サブクエリに対して任意のレベルを指定することも可能です。これは、各レベルが個別の機能を持つようなロジックの分散に使用できます。

例:

  • [% tools.query.add({query => query, lvl => 1}) %] - 特定のレベルにクエリを追加します。

JSの例:

this.query.add({
query: "some query",
lvl: 1,
})
例

スクリーンショットのプリセット実行結果:

スクレイパー:
parser
what is parsing in programming
parsing in compiler
compiler and parser development
what is syntax analysis
difference between lexical analysis and syntax analysis
syntax analyzer
parser programming language
parser:
parser definition
xml parser
parser generator
parser swtor
parser c++
ffxiv parser
html parser
parser java
what is parsing in programming:
parse wikipedia
parser compiler
what is a parser
parsing programming languages
definition of parser
parsing c++
parser define
parsing java
html parser:
online html parser
html parser php
html parser java
...

JSON 構造の解析 $tools.parseJSON()

このツールを使用すると、JSON 形式のデータをテンプレートエンジンで利用可能な変数(オブジェクト)にデシリアライズできます。使用例:

[% tools.parseJSON(data) %]

デシリアライズ後、取得したオブジェクトのキーには、通常の変数や配列としてアクセスできます。 引数に無効な JSON 文字列が指定された場合、スクレイパーは $tools.error にエラーを記録します。

例

CSV への出力 $tools.CSVline

このツールは自動的に値を CSV 形式に変換し、改行を追加します。これにより、結果のフォーマットに必要な変数をリストするだけで、Google Docs / Excel などにインポート可能な有効な CSV ファイルが出力されます。

使用例:

[% tools.CSVline(query, p1.serp.0.link, p2.title) %]

$tools.CSVline() を使用した動画:

SQLite データベースの操作 $tools.sqlite.*

このツールを使用すると、SQLite データベースを簡単かつ本格的に操作できます。3つのメソッドがあります:

  • $tools.sqlite.get() - SELECT を使用して DB から単一の情報を取得するメソッド。例:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
  • $tools.sqlite.run() - DB 操作(INSERT、DROP など)を実行するメソッド。例:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
  • $tools.sqlite.all() - テーブルからすべてのデータを取得するメソッド。例:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]

User-agent の置換 $tools.ua.*

このツールは、ユーザーエージェントを使用するスクレイパー(例:Net::HTTPNet::HTTP)でユーザーエージェントを置換するためのものです。2つの方法があります:

  • $tools.ua.list() - 利用可能なすべてのユーザーエージェントのリストを保持します。
  • $tools.ua.random() - 利用可能なユーザーエージェントからランダムに1つ出力します。

使用例:

例
ヒント

すべての user-agent のリストは files/tools/user-agents.txt ファイルに保存されており、必要に応じて編集できます。

注記

スクレイパーの User agent パラメータにこのツールを使用する場合は、明示的に指定する必要があります:

[% tools.ua.random() %]

tools での JS サポート $tools.js.*

このツールを使用すると、独自の JS 関数を追加してテンプレートエンジン内で直接使用できます。Node.js モジュールの使用もサポートされています。 関数は Tools (ツール) -> JavaScript Editor (JavaScript エディタ) で追加します。

base64 の操作 $tools.base64.*

このツールを使用すると、スクレイパー内で直接 base64 を操作できます。このツールには2つのメソッドがあります:

  • $tools.base64.encode() - テキストを base64 にエンコードします
  • $tools.base64.decode() - base64 文字列をテキストにデコードします

使用例:

例

データリファレンス $tools.data.*

このツールは、言語、地域、検索エンジンのドメインなど、大量のプリセット情報を含むオブジェクトです。要素の完全なリスト(将来変更される可能性があります):

"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"

これらの各要素はデータの配列またはハッシュであり、JSON などでデータを出力することで内容を確認できます:

[% tools.data.GoogleDomains.json() %]

メモリ内データストレージ $tools.memory.*

すべてのタスクや API リクエストなどで共有される、メモリ内のシンプルな key/value ストレージです。スクレイパーの再起動時にリセットされます。3つのメソッドがあります:

  • [% tools.memory.set(key, value) %] - キー key に対して値 value を設定します
  • [% tools.memory.get(key) %] - キー key に対応する値を返します
  • [% tools.memory.delete(key) %] - キー key によるレコードをメモリから削除します

A-Parser バージョン情報の取得 $tools.aparser.version()

このツールを使用すると、A-Parser のバージョン情報を取得して結果に出力できます。

使用例:

[% tools.aparser.version() %]

タスク ID とスレッド数の取得 $tools.task.*

このツールを使用すると、タスク ID の情報を取得し、スレッド数を表示できます。 2つのメソッドがあります:

  • [% tools.task.id %] - タスク ID を返します
  • [% tools.task.threadsCount %] - タスクで使用されているスレッド数を返します

タスクの停止 $tools.task.stop()

このツールを使用すると、いつでもタスクの実行を停止できます。引数として、タスク停止の理由を含む文字列を受け取ります。

使用例:

[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]