AppleScriptとターミナルでJavaScriptを使う

Quick Edit Pencil
AppleScriptでJavaScriptを使いたい
ターミナルでJavaScriptを使いたい

AppleScriptでJavaScriptを使いたい

applescript jsc javascriptcore

具体には、URL全体をエンコード(encodeURI)しておきたい時


下記のように、Sfafariを経由して、JavaScriptを使う事ができるが、Safariが起動してまうし、Safariが起動していてもウィンドウがゼロの時はエラーが出るので、スマートではない。


set theText to "アップルスクリプト"
--JavaScript
tell application "Safari"
set theURL to (do JavaScript "encodeURI(\"" & theText & "\")" in document 1) as text
log "encode=" & theURL
(*0=%E3%82%A2%E3%83%83%E3%83%97%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88*)
set theURL to (do JavaScript "decodeURI(\"" & theText & "\")" in document 1) as text
log "decode=" & theURL
(*0=アップルスクリプト*)
end tell

 

そこで、do shell scriptJavaScriptCore.frameworkを直接呼んで、URL全体をエンコード(encodeURI)。

encodeURIとencodeURIComponentは上手くエンコードしてれない。のでURL全体をエンコードしたい場合はリンクを参照。BWNSUY: AppleScriptでURLエンコード

しかし、Safariを通さずJavaScriptを使えるので今後、何かの役にたつかも知れない。
キモは
print([native code])
ターミナルでPATHを通すことで下記とできる。自分のMacだけで使う時はこれでOK。
 do shell script "jsc -e 'print(eccape(\"" & theText & "\"))'"

ln /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc /usr/bin
set theText to ""

--escapeでエンコード
set theURL to do shell script "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e 'var t=\"" & theText & "\";print(escape(t))'"
log "encode =" & theURL
(*encode =%E3%81%82*)
--デコード
set theURL to do shell script "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e 'var t=\"" & theURL & "\";print(decodeURI(t))'"
log "decode =" & theURL
(*decode =*)

--encodeURIでエンコード
set theURL to do shell script "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e 'var t=\"" & theText & "\";print(encodeURI(t))'"
log "encode =" & theURL
(*encode =%C3%A3%C2%81%C2%82*)
--デコード
set theURL to do shell script "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e 'var t=\"" & theURL & "\";print(decodeURI(t))'"
log "decode =" & theURL
(*decode =あ*)

--encodeURIComponentでエンコード
set theURL to do shell script "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e 'var t=\"" & theText & "\";print(encodeURIComponent(t))'"
log "encode =" & theURL
(*encode =%C3%A3%C2%81%C2%82*)
--デコード
set theURL to do shell script "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e 'var t=\"" & theURL & "\";print(decodeURI(t))'"
log "decode =" & theURL
(*decode =あ*)

ターミナルでJavaScriptを使いたい

tarminal jsc
ターミナルでもencodeURIとencodeURIComponentは上手くエンコードしてれない。のでURL全体をエンコードしたい場合はリンクを参照。BWNSUY: AppleScriptでURLエンコード

ターミナルでURLをエンコードしてみる

/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc -e 'print(encodeURI("http://ja.wikipedia.org/wiki/アップルスクリプト"))'
又は
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc encodeurl.js
ホームディレクトリに「encodeurl.js」を新規作成し下記を記述。
// encodeurl.js
(function(){
    print(encodeURI("http://ja.wikipedia.org/wiki/アップルスクリプト")); //標準出力は print 関数
}()); // コードは即時関数で実行させる

JavaScriptCoreへPATHを通す

1 - .bash_profileに記述する方法
ホームディレクトリの「.bash_profile」というファイルにJavaScriptCoreへのPATHを記述します。
alias jsc="/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc"
ターミナルで.bash_profileを開き上記を追記して保存。.bash_profileがない時は新規作成される。
vim ~/.bash_profile
変更した.bash_profileを反映させる
source ~/.bash_profile
2 - ターミナルでハードリンクまたはシンボリックリンクする方法
ターミナルでPATHを通す
ln /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc /usr/local/bin
.bash_profileへの操作、vimのコマンドについての参考サイト
ターミナルで試してみる
jsc -e 'print(encodeURI("http://ja.wikipedia.org/wiki/アップルスクリプト"))'
jsc runner.js

参考にしたサイト

このブログの人気の投稿

PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します

ヤバい!JAPANNEXT WQHD対応 27型ワイド液晶ディスプレイ「JN-IPS2716WQHD」を注文してみた!!!

書字方向 横書方向変換スクリプト 左書きから右書きへ(コピペ用途)

Blender Illustrator のパスを取り込む

Blender: 辺の長さを数値で指定するアドオン

AppleScript 改行 コード 置換

簡単 YouTube動画をダウンロード、音声のみ保存する方法 2019

Automatorの変数をAppleScript内で使う