EVAL【iMacrosコマンド一覧】
コマンドの概要
このコマンドを使用すると、値を評価して特定の条件が満たされた場合に意図的にマクロエラーを引き起こすことができます。また、抽出したコンテンツの変換や修正にも使用できます。「EVAL」コマンドの内部では、Javascriptのevalステートメントの機能が利用可能です。
例えば、
- 日付が「40日以上前」であるのものみ
- 為替レートが一定値を上回る、もしくは下回っている場合のみ
- 抽出されたテキストが「US $33.33」の場合、「SAVEAS TYPE = EXTRACT」を用いて保存する前に「US $」部分を削除する
など様々な操作が可能です。
使い方
1 2 |
SET !VAR1 EVAL("[javascript statements]") TAG ... CONTENT=EVAL("[javascript statements]") |
iMacros V7.5以降で利用可能、iMacros for FirefoxではV7.4.0.1以降で利用可能です。
引数
- javascript statements
Javascriptコードを含む二重引用符で囲まれた文字列を指定します。
関数マクロエラー MacroError(errorMsg)
標準のjavascript関数(IEとiMacrosブラウザ、JScript 8.0)に加えて、iMacrosの「EVAL」コマンドは、あらかじめ定義されたエラー出力関数MacroError()を持っています。MacroError()は文字列を引数として受け取り、エラーと判断された場合、エラーメッセージとしてエラー文字列「errorMsg」であるiMacrosエラー-1340を返します。以下の例2のように、マクロを条件付きで停止する場合は、この関数を使用します。
注意点
- Javascriptの最後に単一のステートメントとして追加することによって、最終的な戻り値を明示的に返す必要があります。
正しい例:SET myVal EVAL( “var x = 1; x;”)// myVal = 1
間違っている例:SET myVal EVAL( “var x = 1;”)// myVal = null - コード評価は、ブラウザプロセスとは別の実行コンテキストで行われるため、WebページのDOMへのアクセスは利用できません。
- Javascriptで特殊関数MacroError(errorMsg)を呼び出して、iMacrosエラーを生成することができます。
- バックスラッシュを表現したい場合は、バックスラッシュを二度書く必要があります。 例えば、「\d」を表現したい場合、コード内では「\\d」となります。
- 評価されるJavaScriptの式全体を二重引用符で囲む必要があるため、二重引用符もエスケープする必要があります。
- iMacrosブラウザとIEプラグインのEVALは、MicrosoftのJScript 8.0(JScript .NET、フレームワークバージョン3.5)evalメソッドを使用しているため、セキュリティ制限が適用されます。結果として、 “compatMode()”や “alert()”のようなDOMやGUIメソッドは利用できません。これはFirefoxのiMacrosを使用する場合にも当てはまります。DOM / GUIアクセスの場合は、URL GOTOとJavascriptを使用できます。
- FirefoxのiMacrosで「EVAL」コマンドはFirefoxのjavascriptエンジンを使用しています。
サンプルコード
ランダムな秒数だけ待機する
Webサイトページがロードされた後、ランダムな時間(1〜10秒)待つプログラムコードです。
1 2 3 4 |
SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*10 + 1); randomNumber;") URL GOTO=http://www.iopus.com ' ランダムな時間(1〜10秒)待ちます WAIT SECONDS={{!VAR1}} |
特定の範囲内の乱数を生成する
minとmaxに設定した値の範囲内でランダムな整数を返します。
1 |
SET randomNumber EVAL("var min = 50; var max = 100; var randomNumber = Math.floor(Math.random() * (max - min + 1)) + min; randomNumber;") |
通貨を分析して比較し 条件付きで保存する
特定の閾値(1.3ドル)を上回っている場合に限り、ユーロの金利を米ドルで保存します。閾値を下回ってしる場合は、マクロを停止し、エラーを出します。
1 2 3 4 5 6 7 |
URL GOTO=http://www.xe.com/ucc/convert/?Amount=1&From=EUR&To=USD SET !EXTRACT_TEST_POPUP NO TAG POS=1 TYPE=TD ATTR=TXT:*<SP>USD&&WIDTH:46%&&ALIGN:left EXTRACT=TXT SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.replace(\"USD\",\"\"); var d=parseFloat(s); if(d < 1.3){MacroError(\"Euro is below 1.3 USD.\");} else d;") SET !EXTRACT NULL SET !EXTRACT {{!VAR1}} SAVEAS TYPE=EXTRACT FOLDER=* FILE=EuroRate.csv |
日付/時刻の解析と比較
最新の投稿が数時間(12時間)より古いかどうかを確認します。
1 2 3 4 5 |
CLEAR URL GOTO=http://www.readwriteweb.com/ SET !EXTRACT_TEST_POPUP NO TAG POS=1 TYPE=DIV ATTR=CLASS:submeta EXTRACT=TXT SET !VAR1 EVAL("var h=12; var s=\"{{!EXTRACT}}\"; var re=/\\w+\\s\\d{1,2},\\s\\d{4}\\s+\\d{1,2}\\:\\d{2}\\s[A|P]M/; var postDateStr=re.exec(s); var today=new Date(); var postAge=today.getTime()-Date.parse(postDateStr); var hInMilli=h*60*60*1000; if(postAge>hInMilli){MacroError(\"Post is older than 12 hours\");}") |
昨日の日付を取得する
月の変化やうるう年などを考慮して、昨日の日付をISO形式(yyyy-mm-dd)で入力します。今日の日付は!NOWで取得できますが、今日の日付を基準とした日付(明日や1週間前など)を取得することはできません。「EVAL」コマンドを使えばこのような問題を解決できます。
1 |
... CONTENT=EVAL("var d=new Date();d.setDate(d.getDate()-1);var year=d.getFullYear();var month=d.getMonth()+1;var day=d.getDate();year+'-'+month+'-'+day;") |
明日の日付を取得する
明日の日付を変数にdd/mm/yyyy形式で作成します。
1 2 |
SET tomorrow EVAL("var today = new Date(); var tomorrow = new Date(); tomorrow.setDate(today.getDate() + 1); var day = tomorrow.getDate().toString(); if (day.length < 2) {day = \"0\" + day;} var month = (tomorrow.getMonth() + 1).toString(); if (month.length < 2) {month = \"0\" + month;} var year = tomorrow.getFullYear().toString(); var dateString = day + \"/\" + month + \"/\" + year; dateString;") PROMPT {{tomorrow}} |
抽出と操作
文字列を抽出して大文字に変換します。
1 2 3 4 5 6 7 |
VERSION BUILD=7400919 RECORDER=FX TAB T=1 URL GOTO=http://android-developers.blogspot.com/2011/09/preparing-for-handsets.html SET !EXTRACT_TEST_POPUP NO TAG POS=1 TYPE=P ATTR=TXT:Early<SP>this<SP>year,* EXTRACT=TXT SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.toUpperCase()") PROMPT {{!VAR1}} |
先頭と末尾のスペースを切り取ります。
1 2 3 4 5 |
SET !EXTRACT " This value has leading and trailing spaces " ' スペースを強調するために、縦線で表示します PROMPT |{{!EXTRACT}}| SET trimmedValue EVAL("\"{{!EXTRACT}}\".replace(/^\\s*|\\s*$/g, \"\");") PROMPT "|{{trimmedValue}}| - not anymore!" |
Eval.iimのデモ
1 2 3 4 5 6 7 8 9 |
URL GOTO=http://www.iopus.com/imacros/demo/v7/eval.htm SET !VAR1 EVAL("Math.floor(Math.random()*5 + 1);") WAIT SECONDS={{!VAR1}} SET !EXTRACT_TEST_POPUP NO TAG POS=1 TYPE=B ATTR=TXT:* EXTRACT=TXT SET !VAR2 EVAL("var h=20; var s=\"{{!EXTRACT}}\"; var today=new Date(); var postAge=today.getTime()-Date.parse(s); var hInMilli=h*60*60*1000; if(postAge>hInMilli){MacroError(\"Time deviates more than 20 hours\");}else null") SET !EXTRACT NULL TAG POS=1 TYPE=INPUT:TEXT FORM=ID:form1 ATTR=NAME:textfield EXTRACT=TXT SET !VAR2 EVAL("var s=\"{{!EXTRACT}}\"; var d = parseFloat(s); if((d>99)&&(d<101))d; else MacroError(\"Value is not in the set range\");") |
関連コマンドと変数
自動化プログラムの作成を依頼しませんか?
幣サイトでは、Windowsパソコンの自動化プログラムの作成サービスを行っています。
本サービスの特徴は、
・安価な値段
・個人から法人までどなたでも対応
・お客様の要望を全力で実現
です。
安いからといって、決して手は抜きません。
まずは、下のボタンからWindowsパソコンの自動化プログラムの作成サービスの詳細をご確認ください。