A-Parserにおけるテンプレート機能の特徴
テンプレートのテスト
A-Parserには、テンプレートのデバッグとテストのための専用ツールがあります:テンプレートのテスト
配列用の .format メソッド
A-Parserでは、ほとんどの結果がネストされた要素を持つ配列の形式で提供されます。技術的な表現をすれば、結果は固定キーを持つハッシュの配列として表されます。スクレイパー
SE::Google を例に見てみましょう。この結果には、要素 $link、$anchor、$snippet(およびその他)を含む配列 $serp が含まれています。
"serp" : [
{
"link" : "http://www.speedtest.net/",
"anchor" : "Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>",
"snippet" : "<b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla."
},
{
"link" : "http://www.speakeasy.net/speedtest/",
"anchor" : "Speakeasy Speed <b>Test</b>",
"snippet" : "Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher."
},
{
"link" : "http://en.wikipedia.org/wiki/Test_cricket",
"anchor" : "<b>Test</b> cricket - Wikipedia, the free encyclopedia",
"snippet" : "<b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ..."
}
]
このような配列からデータを便利に走査して出力するために、.format メソッドが作成されました。これにより、特定のフォーマットに従って配列のすべての要素を結合できます。例えば、すべてのリンクを改行で区切る場合は以下のようになります:
$serp.format('$link\n')
その結果、各リンクが新しい行に保存されます:
http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket
スニペットの出力:
$serp.format('$snippet\n')
<b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.
Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ...<br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.
<b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ...
リンク、アンカー、スニペットを同時に出力:
$serp.format('Link: $link, Anchor: $anchor, Snippet: $snippet\n')
Link: http://www.speedtest.net/, Anchor: Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>, Snippet: <b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.Link: http://www.speedtest.net/, Anchor: Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>, Snippet: <b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.
Link: http://www.speakeasy.net/speedtest/, Anchor: Speakeasy Speed <b>Test</b>, Snippet: Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.Link: http://www.speakeasy.net/speedtest/, Anchor: Speakeasy Speed <b>Test</b>, Snippet: Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.
Link: http://en.wikipedia.org/wiki/Test_cricket, Anchor: <b>Test</b> cricket - Wikipedia, the free encyclopedia, Snippet: <b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ...Link: http://en.wikipedia.org/wiki/Test_cricket, Anchor: <b>Test</b> cricket - Wikipedia, the free encyclopedia, Snippet: <b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ...
フォーマット内では元のクエリ(または他の利用可能な変数)も使用でき、クエリと配列の各要素の対応関係を指定できます:
$serp.format('$query: $link\n')
test: http://www.speedtest.net/
test: http://www.speakeasy.net/speedtest/
test: http://en.wikipedia.org/wiki/Test_cricket
オブジェクト用の .json メソッド
ご存知の通り、A-Parserのすべてのデータは変数の形式で表されます。これらのデータを JSON 形式にシリアル化(文字列型への変換)するメソッド .json が存在します。例:
$results.json

結果ファイル名の静的テンプレートフラグ
フラグ isStaticTemplate() を使用すると、結果ファイル名の動的なテンプレートを静的にすることができます。
動作原理:このフラグを結果ファイル名で使用すると、テンプレートはタスクの開始時に一度だけ実行され、それによって静的であると見なされます。これにより、ファイル名をより柔軟に命名しつつ、APIメソッド getTaskResultsFile を通じてそれらへのリンクを取得する機能を維持できます。
使用例:
[% isStaticTemplate(); tools.js.eval('Date.now()') %]
利用可能な変数
変数の補間
デフォルトでは、テンプレートは [% と %] タグの間に記述されます。タグの外側にあるものはすべて通常のテキストとして扱われ、そのまま結果に渡されます。
A-Parserではさらに変数の補間が有効になっており、テキスト内で $ 記号を使用して変数にアクセスできます。
これに加えて、\n も明示的な改行として補間されます。
例:
クエリごとの総結果数 $query: $totalcount\n
$query と $totalcount の場所には対応する変数の値が挿入され、\n は改行に置き換えられます。
補間を使用しない場合の同等の記述:
クエリごとの総結果数 [% query %]: [% totalcount; "\n" %]
Template Toolkitのテンプレート内では、変数はプレフィックス $ なしで記述されることに注意してください。
テンプレートの使用例
クエリのフォーマット

この例では、Alexa top500.txt ファイルの各ドメインに検索演算子 site: が追加され、スペースを挟んで words.txt ファイルからの置換が追加されます。
結果のフォーマット

この例では、クエリ、検索結果の数、および関連するキーワードの数が出力されます。また、収集されたアンカーのリストも出力されます。
結果フィルタリング時のテンプレート

テンプレートを指定できるようにするには、ドロップダウンリストから Custom Template を選択する必要があります。
この例では、収集された結果が5件未満のクエリのみが結果として出力されます。
「正規表現を使用する」オプション使用時のテンプレート

この例では、スクレイパーはクエリの2番目の引数として渡された単語を含む文章を収集します。 動作アルゴリズムは次の通りです:クエリはクエリコンストラクターによって指定された区切り文字でリンクと単語に分割されます。スクレイパーはリンク先にアクセスしてテキストを取得します。クエリからの単語が正規表現に挿入され、それによって文章が収集されます。
例をダウンロード
eJyNVE1T2zAQ/StUEwYo1EkoDK0vncA003YCoSScHLejxmtXjWwZSYZkQv57d2XH
diiHXmTp6b3d1X54zSw3C3OrwYA1zA/WLHd75rMIYl5Iy05YzrUBTdcB+zK9Hvn+
FJb289JqPrdKI6Pmrpld5YDqeWGsSu/AlCZ0ufEDZlFqEKEvC+kmgSUKDoNZ0Tvr
997R5zQOgx/em0+zWTab6fA42N97KECvvAWs9vZ37t4GuA+Pj1hlalr6F0nttUK4
1nyFoPve8JQwY7XIElNT6Y0VyMJNGNb4UOmUU1Y6ed+rVF7swMODTglgQAdHjakJ
f4SpQkksJDTwEE+V907ELdDt1tKRZ5eULR5FwgqVcVn6pbCaWO4zgclAfaaQS3kR
YIZapQi5rJbgahtzwDruTNkunPZ7qWF+zKWBE2Yw1CHHQKKXN8KC5ljjcU7xIL5m
KhtIOYJHkA3N2b8shIywTwYxir5Wwtcp439sbOrntV09gn7SGENtxZ0ux9eNKlIj
lWyTIUUqLJ7NlSoyKlcPwQVAXufshmip0lC7qSxX3nEUcsgiZDYlG+QNtPMMNzBG
FXpOpsskn2wnoGyKSS4FVcQATlGZEPZMJEWF2Uqwranfao8tBwjOVRaLZIzJ0CKC
bTMU2RRnd5xdqTSXQDnKCimxxAbumlYbmKqkdGge+1J85VzsTL1VSppvk/LZuRYY
8DkFmGJV2l4rk3Mu5f3dqH3DmvbEw29rc+N3u7rwnsRC5BAJ7imddOnUdVPfp/X9
B7dGtJ6dun3PrdwhLc7Zhduft3DesvDxZ0sctfa/WqSL5/8hMXqfhURhtTD7VKnq
p1j/Otev/hr99QZ79I+5LdlUBOIihtU02IDM72/+Ar1q4iA=
スクレイパー設定内のテンプレート
プリセットマクロの設定
A-Parserでは、すべてのテンプレートでグローバルに利用可能なテンプレートマクロやプリセット変数を設定できます。グローバルマクロの指定は、Settings (設定) -> Advanced Settings (詳細設定) で行えます。
デフォルトでは、結果ファイル名の時間フォーマットに使用される $datefile オブジェクトの定義が既に含まれています。
マクロの追加と使用
この例では、グローバル変数の設定方法を示します。これは、例えば複数のInstagramスクレイパーで同じクッキーを使用する必要がある場合に便利です。
設定例:

テンプレートの閉じ括弧の構文 -%] に注目してください。これは改行を削除するために必要です。そうしないと、テンプレートを使用するたびに先頭に空行が追加されてしまいます。
使用例:
