numbersでエクセルのwebクエリのような機能はありますか?
webのデータを自動取得をしたいのですが、numbersでできる方法がありますか?
MacBook Air (11-inch, Mid 2012), OS X Mountain Lion (10.8.2)
webのデータを自動取得をしたいのですが、numbersでできる方法がありますか?
MacBook Air (11-inch, Mid 2012), OS X Mountain Lion (10.8.2)
有り難うございます。感動までして頂いて、恐縮しています。
do JavaScriptコマンドを実行して定義した変数は、Safari?に保持されているようなので、再度、do JavaScriptコマンドを実行する際にそのまま使うことが出来る様です。
ここに引っかかって、過去の自分のスクリプトを眺めてみたところ、重要なことを思い出しました。
do JavaScript だと、変数がグローバルになってしまうようなので、同名変数が既にある場合にちょっとまずいことになる可能性があります。変数汚染問題ってやつです。
これは無名関数にすると回避できますが、そうすると、値を返すことができなくなります。また、ページをリロードすればすべて御破算になりますが、ネットショッピング中とかはやるべきではありません。
根本的にひっくり返すような話で申し訳ありません。もっと早く思い出すべきでした。
ーーーーー
Bookmarklet - ブックマークレットのグローバル変数汚染デモ
http://www.teria.com/~koseki/memo/bookmarklets/blet_global.html
例えば、「表にクリックイベントを付ける(クリックした表のidを変数_theIdに保存」の変数名「i」を「n」にして、上記ページで試すと、クリックしても何も起こらなくなります。
もうちょっと分かりやすい例だとこんな感じ。
-- スクリプトA
tell document 1 of application "Safari"
do JavaScript "
document.body.style.color='green'
var n = 5;
n
"
end tell-- スクリプトB 無名関数
tell document 1 of application "Safari"
do JavaScript "
(function() {
document.body.style.color='green'
var n = 20;
n
})();
"
end tell検証手順
1. スクリプトA を実行した後で「アラート表示」ボタンを押す
2. ページをリロード
3. スクリプトB を実行した後で「アラート表示」ボタンを押す
アラート回数と値の取得状況を比べると良く分かると思います。
Hiro.S 様、
重要な情報を頂きまして、有り難うございます。 ページのJavaScriptで定義されているグローバル変数と同じ名前をAppleScript側で再定義してしまうと、本来のページの機能が損なわれてしまう訳ですね。 tablesとか、tableとか、rowsとか、theData、theIdなど、いかにも重複しそうな変数名を使うのは駄目ですね。 他の変数名を使うにしても、重複していないかどうか確かめる処理が必要になるので、複雑になりそうです。 もう少し考えてみます。 とても参考になりました。 改めて、御礼申し上げます。
度々、失礼致します。 WebページのJavaScriptで定義されているグローバル変数の一覧を含むプロパティをObject.keys(windows)で取得できるようです。なので、予め変数に重複があるかどうか調べることができました。
tell document 1 of application "Safari"
set theScript to "Object.keys(window)"
set theGVs to (do JavaScripttheScript)
set theKeywords to {"tables", "theData", "theId"}
repeat with theWord in theKeywords
if (theGVs contains theWord) then
display alert ("このページにはグローバル変数 " & quoted form of theWord & " を含んでいます。¬
do JavaScriptで定義する変数名を変える必要があります。")
end if
end repeat
end tell
少し手間ですが、変数汚染を回避する良い方法がみるかるまで、ひとつひとつのWebページでグローバル変数を調べる必要がありそうです。
numbersでエクセルのwebクエリのような機能はありますか?