X



AppleScript アップルスクリプト 質問、発表 7 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001名称未設定
垢版 |
2017/04/01(土) 12:42:51.78ID:F8/5NUFI0
質問、発表どっちでもスレ。

■注意
安直なスクリプト作成依頼、丸投げ、「こういうの作ってください!」はお断り。
わからない点、エラーが解決できない点についてはスクリプト片を添えて質問すること。
OSバージョンも忘れずに。

■参考
AppleScript Language Guide
https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptLangGuide/
TN2065: do shell script
https://developer.apple.com/library/mac/technotes/tn2065/
AppleScript: The Language of Automation
http://www.macosxautomation.com/applescript/
MacWiki - AppleScript
http://macwiki.osdn.jp/wiki/index.php/AppleScript
鳶嶋工房 / AppleScript
http://tonbi.jp/AppleScript/
AS Hole(AppleScriptの穴)
http://piyocast.com/as/
■過去スレ直近5つ
6 http://potato.2ch.net/test/read.cgi/mac/1387630245/
5 http://anago.2ch.net/test/read.cgi/mac/1330350325/
4 http://anago.2ch.net/test/read.cgi/mac/1256127156/
3 http://pc11.2ch.net/test/read.cgi/mac/1223026902/
2 http://pc11.2ch.net/test/read.cgi/mac/1197443062/
0238名称未設定
垢版 |
2018/08/11(土) 22:04:03.61ID:IuAs9oMp0
なら生やすの止めた方がいいね
0240名称未設定
垢版 |
2018/08/11(土) 22:07:16.37ID:IuAs9oMp0
意味なく草生やすな
ウザいので
0242名称未設定
垢版 |
2018/08/11(土) 22:09:50.93ID:Q2Fo4sRd0
そんなんじゃすぐに煽られるような5chでどうすんねんって思うけどな
それとそんな細かいことうだうだとお前はお母さんかっていうw
0243名称未設定
垢版 |
2018/08/11(土) 22:10:08.81ID:IuAs9oMp0
ID: :Q2Fo4sRd0

これで説得力ないことがよくわかったね
関わるのもウザいのと同じことだからでこれで最後
0244名称未設定
垢版 |
2018/08/11(土) 22:10:56.04ID:Q2Fo4sRd0
自分の文句には説得力があったらしいw
0246233
垢版 |
2018/08/12(日) 11:38:29.52ID:2zZ9jlN20
>>245
ああ、それが自分です
元々JavaScriptは組めるんですがAppleScriptはスリープさせるボタンを作ったくらいで、ほぼわかりません
でもやっぱ期待しちゃいますね、色々出来るので
0247名称未設定
垢版 |
2018/08/12(日) 17:35:05.02ID:NuNpmwk20
教える側がアスペだと教わる側も大変だ
0249名称未設定
垢版 |
2018/08/13(月) 11:19:21.24ID:XeQ2t/PX0
>>207
俺のために修正ありがとう
念の為コピペしといて正解だったようだw
0251名称未設定
垢版 |
2018/08/15(水) 12:05:21.71ID:10A72j8V0
Finder上のフォルダに対してdo shell script でxxx.pyを実行するスクリプトを作ってFinderのツールバーに登録して実行してみると、
最前面がFinderからPythonのスクリプトに一旦切り替ってそのあとFinderに戻りました。
機能しているので問題ないのですが、Finderが最前面のままで処理できるような書き方ってあったりしますか?
よろしくお願いします。
0252名称未設定
垢版 |
2018/08/15(水) 13:45:52.02ID:+4Zl7rCP0
アプリ形式にしてるなら、Info.plistに
<key>LSUIElement</key>
<true/>
加えればいけたぽいけど
0253名称未設定
垢版 |
2018/08/15(水) 20:14:41.07ID:10A72j8V0
>>252
出来ました! ありがとうございます
0256名称未設定
垢版 |
2018/10/20(土) 16:08:12.73ID:0cFAYEEo0
ここまで長かったなあ。
日本語AppleScriptから今のCocoaベースのスクリプトは想像もつかなかった。
0257名称未設定
垢版 |
2018/10/21(日) 21:45:44.85ID:TPOtjsO20
> 在日の親は、子供を朝鮮幼稚園・朝鮮学校に入れたいっていうのが多いのよ。
> 日本人からすると、なんでだろうって思うけど、日本人の学校では、民族の誇りを持った教育がしてもらえないんだそうだ。
> よく分からないけど、済州島の流刑者の白丁が大阪に密入国して住み着いたじゃ誇りが持てないけど、
> 日本人に強制連行された被害者なら誇りが持てる、とかそういう事かな??
>
> 市原市の能満は昔から市街化調整区域で、新規の建物は造れないことになっている。
> そのため土地が安く、日本の法律を無視した在日が、次々と移り住んできた。
> そこで問題になったのが、朝鮮学校だ。なかなか許可が下りず、一番近くても千葉市にしかない。
> そこで在日居住区の能満内にあった、能満幼稚園・市原小・市原中・緑高の保育士や教師を、朝鮮化する事を考えた。
> 今では在日幼稚園の保育士は全て朝鮮帰化人で、在日の父兄からの絶大な支持を受けている。
> 遠くからでも、わざわざ在日幼稚園に入園させたいという在日の親は、後を絶たない。
> この在日幼稚園卒園者はほぼ朝鮮系の帰化人と在日だ。
0258名称未設定
垢版 |
2018/10/31(水) 01:08:37.57ID:5LHTA+eS0
テキストをコピって、その文中に出てくる二つの数字(数字A・数字B)を使って
計算させるApplescriptを作りました。
あちこちのサイト見て作った簡単なものでして、
当初は数字の出てくる位置と桁が決まっていたので
クリップボード内00文字目〜00文字目(数字A)と00文字目〜00文字目(数字B)を指定してました。
set 数字A to characters 5 thru 7 of NmLpLcSPpLc as text
set 数字B to characters 8 thru 10 of NmLpLcSPpLc as text

しかしこれではすぐに使い辛くなりました。
そこでこれを何桁でもどの位置に出てきても使えるように
「先に出てくる数字」「後に出てくる数字」みたいに
位置と桁を固定せず指定する方法を教えてください。
0259名称未設定
垢版 |
2018/10/31(水) 02:04:58.42ID:2A490WkA0
NmLpLcSPpLc
なんだこの呪文みたいな変数名は
0260名称未設定
垢版 |
2018/10/31(水) 02:08:22.68ID:w0lLlxVj0
>>258
ざっくりと
on pickupNumbers from sourceString
set numbersString to do shell script "echo " & quoted form of sourceString & " | sed -e 's/[^0-9][^0-9]*/ /g;s/^ *//;s/ *$//'"
set savedDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to {" ", return}
set numberItems to text items of numbersString
set AppleScript's text item delimiters to savedDelimiters
return numberItems
end pickupNumbers

set theNumbers to pickupNumbers from the clipboard
item 1 of theNumbers
item 2 of theNumbers
item -1 of theNumbers
0261名称未設定
垢版 |
2018/10/31(水) 03:00:44.18ID:EBY8pLWp0
javascriptでmacアプリ操縦できるんかい!便利すぎワロタwwwww
何で今まで知らんかったんだ俺。
アップルももっと宣伝しろや!
0263名称未設定
垢版 |
2018/10/31(水) 10:20:22.09ID:EecYNdku0
>>258
>>260はたぶん現段階では意味がわからなさすぎるだろうから
asは諦めてJXA(javascript)にしたらいいよ。asのみでそれをやるとかなりややこしい。
JXAはサンプルとか少なくて苦労するだろうけど、単独で使う分にはjavascriptだから。
app = Application.currentApplication()
app.includeStandardAdditions = true
str = app.theClipboard()
nums=str.match(/¥d+/g)
sum=getSum(nums)

function getSum(ary){
s=0
for (var i=0; i<ary.length; i++){
s=s+parseInt(ary[i])
}
return s
}
0264名称未設定
垢版 |
2018/10/31(水) 10:21:38.73ID:EecYNdku0
>>263の4行目の¥dの¥はバックスラッシュに置き換えてね。
0266名称未設定
垢版 |
2018/11/01(木) 13:41:26.79ID:tDuq1l2w0
質問です
デスクトップにあるファイルを全て取得してリストに格納する場合
tell application "Finder"
set theList to every file of desktop
end tell
こうするとファイル名順のリストになると思うのですが、これを作成日時順にすることは可能でしょうか?
0267名称未設定
垢版 |
2018/11/01(木) 13:53:42.13ID:JGEC5ORU0
set theList to every file sort by creation date of desktop

でできたっぽい
0268名称未設定
垢版 |
2018/11/01(木) 18:58:11.38ID:tDuq1l2w0
>>267
ありがとうございます!できました!
sort dy〜で出来るのは何となく見当は付いていたのですが、入れる場所を間違っていてうまく動かなかったみたいです
文法頑張って勉強します
0269名称未設定
垢版 |
2018/11/03(土) 04:40:35.41ID:MI1Joi0x0
かつてAppleScriptの日本語バージョンがあったんですね
使ったことありますか? 使ってみたかったなあ
0270名称未設定
垢版 |
2018/11/03(土) 14:35:07.08ID:AewTmxnd0
>>267 sort by知らんかった!Finder以外でも使えるといいのに

>>269 少し触ってみて、書きづらくてやめた気がする
0271名称未設定
垢版 |
2018/11/03(土) 15:26:19.53ID:4JGEp5/z0
日本語表現は実用性があるとは言い難かった。
非純正アプリはほとんどが日本語表現がないため、結局ちゃんぽんになってしまい、快適ではなかった。
0272名称未設定
垢版 |
2018/11/10(土) 22:57:17.33ID:DhCPvyoL0
あそっか、アプリの方も対応しないといけないのか
直ぐに消えたのも納得です、ありがとうございました
でも、ちょっと使ってみたかった
0275sage
垢版 |
2018/11/18(日) 07:33:20.44ID:eQLKwBbw0
macOS Mojaveにしたところ,Safariで
ダウンロードしたpdfファイルをSafariの
虫眼鏡でアクセス(Finder上に表示)しようとすると
自作したappleScriptが実行されてしまいます。
10年以上前に作成したappleScriptで
今までは,こんな動作はしませんでした。
回避策はございますか?
0276名称未設定
垢版 |
2018/11/18(日) 08:12:14.67ID:T5+J33Nx0
ナゾ&キモいな
フォルダアクションが設定&動いているっぽいが、Mojaveで急にとか??とりあえず見てみる
0277名称未設定
垢版 |
2018/11/18(日) 10:12:37.48ID:qFTANg+J0
AppleScriptが関係あるのかないのかわからんけど、それにしても状況をもっと絞った方がいいのではないか
他のpdfは?
他の種類の書類は?
ダウンロード先のフォルダとそのスクリプトとの関係、配置は?
0278名称未設定
垢版 |
2018/11/18(日) 10:56:30.55ID:p936fZ460
>>275
>Safariの
>虫眼鏡でアクセス(Finder上に表示)

うちのSafariではそもそもそれがわからんw
ファイルのダウンロード先をデスクトップにしているので
とうぜんpdfファイルもデスクトップに置かれてるだけ
ツールバーをカスタマイズ、のところを見ても虫眼鏡などないw
ふだんSafari使ってないからこれ以上わからん
0279名称未設定
垢版 |
2018/11/18(日) 11:05:53.52ID:qFTANg+J0
ダウンロードのポップアップウインドウと思ってたけど
設定で項目を自動削除とかにしてると普段はツールバーに出てない
0280275
垢版 |
2018/11/18(日) 18:31:11.73ID:eQLKwBbw0
みなさま,コメントをありがとうございます。
>>277
>他のpdfは?
Safariでダウンロードした全てのpdfで発生します。
Finder上でそのpdfをダブルクリックすると,普通に
アプリの「プレビュー」が開き,アップルスクリプトは
起動しません。

>他の種類の書類は?
映像ファイルをよくダウンロードしますが,映像ファイルであれば
Safariのダウンロードリストのファイル名の横にある虫眼鏡を
クリックすれば,Finder上に表示できます。これがpdfだと
特定のアップルスクリプトが起動してしまいます。

>ダウンロード先のフォルダとそのスクリプトとの関係、配置は?
ダウンロード先のフォルダはDownloads(昔からのデフォルト)です。
起動してしまうアップルスクリプはApplicationsフォルダーに
入っています。そのアップルスクリプをFinder上でダブルクリックすると
正常な動作(複数のフォルダーを開いて,Finderの指定位置に移動)を
実行します。

10年前に作成したアップルスクリプトは,自宅のMacと職場のMacに入れて
10年間,更新していません。自宅と職場のMacを別々にmacOS Mojaveに
バージョンアップしたところ,両方のmacで上記の同じ問題が発生しました。
0281名称未設定
垢版 |
2018/11/18(日) 21:29:31.37ID:x89nB3Lq0
AppleScript使いなら、その不具合を逆手にとるべし!

勝手に起動してしまうスクリプトの中身を、
「Downloadフォルダの中で最新のPDFファイルをプレビューで開く」
って内容に書き換えちゃえ
0282名称未設定
垢版 |
2018/11/18(日) 23:58:16.34ID:KI7XpZB+0
そんなことやりたい訳じゃないだろ馬鹿馬鹿しい
0283275
垢版 |
2018/11/19(月) 08:37:59.88ID:aQYaMYht0
スクリプト名は00finder2.app,内容はこんな感じです:
tell application "Finder"
activate
close every window
make new Finder window
set bounds of Finder window 1 to {0, 0, 1080, 400}
set position of Finder window 1 to {0, 0}
make new Finder window
set bounds of Finder window 1 to {0, 0, 1080, 400}
set position of Finder window 1 to {0, 420}
(以下省略)

スクリプト名の最初の00を削除しても,同様の問題が発生します。
スクリプトを別のフォルダーに置いても,同様の問題が発生します。
スクリプトをゴミ箱に移動すると,問題は発生せずに,ダウンロードしたpdfファイルが
Finder上に表示されます(正常な動作)。

使用環境はmacOS Mojave 10.4.1, Safari Version 12.0.1
0284275
垢版 |
2018/11/19(月) 08:51:18.87ID:aQYaMYht0
スクリプト名は00finder2.appの内容をコピーして,新しい
appleScriptファイルを作成し,別の名前を付け,元の00finder2.appを
ゴミ箱に移動したところ,問題は解決できました。
ただ,問題の発生の原因はわかりませんが。
0285名称未設定
垢版 |
2018/11/19(月) 10:05:08.69ID:SmQ2Gv2t0
AppleScriptのアプリとかアプレットとか書いた方がいいよねと思うわ

Info.plistが狂ってたかなんかじゃないの CFBundleIdentifier とか CFBundleSignature とか
それかMojaveは使ったことないから変わってるかわからないけどLaunchServicesのDBが狂ってた
0288名称未設定
垢版 |
2018/12/06(木) 11:35:14.24ID:pXZOuPXA0
最近書き始めた初心者です
文字列処理してる時、tell application finder 〜でくくった中で
offset of〜を書くと、ログではエラー吐いてtell current application に飛ばされてますよね
処理が止まるエラーにはならないんですが、ログが汚く長くなるので回避できるならしたいのですが、何か手法はありますか?
0289名称未設定
垢版 |
2018/12/06(木) 12:26:15.81ID:zmYpw3wN0
なぜスクリプト例を書かないか
0291名称未設定
垢版 |
2018/12/06(木) 12:32:49.86ID:zmYpw3wN0
とりあえず先頭に
use scripting additions
入れたら出なくなった

これで試した
set msg to "tell application finder"
tell application "Finder"
offset of "finder" in msg
end tell
--> error number -10004
0292名称未設定
垢版 |
2018/12/06(木) 12:39:50.05ID:5stFhJjG0
>>288
osのバージョンは?
10.11ではuse scripting additionsは無くても問題無いが。
0293名称未設定
垢版 |
2018/12/06(木) 13:13:10.96ID:/2BqwjjI0
例を示していただきありがとうございます
OSは10.13です
ただ今出先なので、試せる環境に戻りましたらやってみたいと思います
0294名称未設定
垢版 |
2018/12/06(木) 19:11:12.56ID:ZB9JhEHI0
>>291
ありがとうございました。何となく引っかかっていたのでスッキリしました。
0295名称未設定
垢版 |
2018/12/08(土) 04:57:44.18ID:OsXKkkYC0
エラーの出るところを
tell me
end tell
で囲う
0297名称未設定
垢版 |
2018/12/08(土) 23:14:27.71ID:FECiCgaZ0
>>295
そんな書き方があるなんて知りませんでした
なんか可愛いですね、ありがとうございます
0298sage
垢版 |
2018/12/10(月) 11:00:43.24ID:mNpt5IAA0
javascriptで'QuickTime Player’を制御するコマンドを書き始めました。

var quickTimePlayer = Application('QuickTime Player');
quickTimePlayer.activate()

これで最後に開いていた複数の動画が開けました。次に,これをルーブ再生させます。

delay(2)
var lenX = quickTimePlayer.documents.length
for (i = 0; i < lenX; i++){
var test = quickTimePlayer.documents[i];
test.play();
test.looping = true;
}


最後に,この動画(複数)Finder上の指定の場所に移動させたいのですが
どのように書けばよろしいでしょうか?
0299名称未設定
垢版 |
2018/12/10(月) 11:23:51.28ID:gAIj8poC0
quickTimePlayer = Application('QuickTime Player')
finder = Application('finder')
homedir = Application('System Events').users[0].homeDirectory()
desktop =Path (homedir+'/Desktop')
f= Path (quickTimePlayer.documents[0].file())
finder.move(f,{to:desktop,replacing:false})
0300298
垢版 |
2018/12/10(月) 19:29:17.30ID:mNpt5IAA0
>>299
スクリプトをありとうございます。私の説明が悪かったことを
お詫び申し上げます。

やりたい作業は,quickTimePlayer.documents[0]を
モニタースクリーンの{0, 0}の位置に,quickTimePlayer.documents[1]を
{720,0}に,quickTimePlayer.documents[2]を{0,480}に,
quickTimePlayer.documents[3]を{720,480}に移動させるような
ことです。

お手数をかけて申し訳ありませんでした。
0301名称未設定
垢版 |
2018/12/10(月) 23:11:31.03ID:lqAuC0EH0
位置とサイズ情報(bounds)はwindowが持ってるからそっち使うんじゃないの
ob = quickTimePlayer.windows[0].bounds()
quickTimePlayer.windows[0].bounds = {x:0, y:0, width:ob.width, height:ob.height}
等々
0302298
垢版 |
2018/12/11(火) 04:02:12.21ID:tNqI8RCK0
>>301
>位置とサイズ情報(bounds)はwindow
“bounds”を使うんですね!
本当にありがとうございました。
ずっと”position”という言葉で検索していたため
正解が見つかりませんでした。
 ご教示いただいたwidth:ob.widthというような書き方は
全く知りませんでした。Script EditorのDictionaryにも
width:ob.widthに関する解説はないですよね?
 自分でも勉強したいのですが,これを解説している
ページや書籍などはございますか? 
0303名称未設定
垢版 |
2018/12/11(火) 12:13:29.08ID:QaN2g9Yw0
ごめんね
いつも適当にやってるし、JavaScriptで書くことも滅多にないしで、まともな説明も紹介もできないよ

エディタの下側、ログを表示>返された値、を見ると 〜.bounds() 実行結果が {"x":20, "y":38, "width":700, "height":705} 形式で返ってた、だから元の値を維持するのに . (ドット)表記を使ってみた
ここ↓は読んだりするけど
https://developer.apple.com/library/archive/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html

それと、positionやsizeはSystem Events経由で得られる
Application('System Events').applicationProcesses['QuickTime Player'].windows[0].position()
自分はAppleScript非対応のアプリで使うことがあるけどPreviewとか
0304名称未設定
垢版 |
2018/12/11(火) 12:16:17.47ID:QaN2g9Yw0
>だから元の値を維持するのに . (ドット)表記を使ってみた

別にこれ聞かれたんじゃなかったね、無視してちょ
0305名称未設定
垢版 |
2018/12/11(火) 12:33:44.54ID:7MKZiNAb0
>>302
jxaは用語説明もまともに用意されてなかったり、参考になるものも少ないので、
特にjsの機能を使いたい訳じゃなければapplescriptの方がラクではある。
0306298
垢版 |
2018/12/11(火) 23:25:54.84ID:tNqI8RCK0
>>305
>特にjsの機能を使いたい訳じゃなければ
過去5年間に自作したプログラムでの
appleScriptの使用率は1%以下。
そのため,appleScriptの基本的なループや
条件処理なども完全に忘れてしまっている。
 現在使用しているプログラムは主にjavascriptと
python。使い慣れたjavascriptだとスクリプトの
90%以上が簡単に書き上げられるが
最後のmacOS特有のコマンドでお手上げでした。
0307名称未設定
垢版 |
2018/12/12(水) 09:46:23.78ID:Vt3ZJFcS0
js書き慣れてる割には;入れたり入れなかったりまちまちだな。
0308名称未設定
垢版 |
2018/12/12(水) 10:51:51.10ID:pEW5eCYS0
結局>>303は丸ごと無視されたのか
それなりに気を使って書き上げたつもりだったけど、まあ内容ないけどさ
しかし辛いの〜

それじゃ俺はこれで
tell me to quit saving no
0309名称未設定
垢版 |
2018/12/12(水) 11:14:18.54ID:f2LM9iRz0
>>304 でその前も全部無視したんじゃね
どう入れたらどういうフォーマットやねんって、言う通りbounds() 実行結果が〜なんぞのgetterで出してみりゃだいたいわかるよね
0310名称未設定
垢版 |
2018/12/13(木) 03:07:11.52ID:Yo74efIG0
達人は298の時点でスルー決定していた予感
0311298
垢版 |
2018/12/14(金) 10:00:07.79ID:2l/2lhQa0
//複数の動画を大画面モニターに表示して,重ならないように
//並べて,音声を消し,ループ再生するjavascript #1
var pathX = "/Users/Tanabe/Movies/";
var yHeight2 = 480;
var xWidth2 = 850;
var quickTimePlayer = Application('QuickTime Player');
quickTimePlayer.activate();
var lenX = quickTimePlayer.documents.length;
//前に開いていた動画を閉じる
if(lenX > 0){
___for (i = 0; i < lenX; i++){
_____quickTimePlayer.documents[0].stop();
____ quickTimePlayer.documents[0].close();
___}
}
//次のtrue以下のコマンドを実行しないと,エラーが出る!?
if(true){
___quickTimePlayer.quit();
___quickTimePlayer = Application('QuickTime Player');
___quickTimePlayer.activate();
}
//次に続く…
0312298
垢版 |
2018/12/14(金) 10:00:39.50ID:2l/2lhQa0
//311の続き

var listX = ["08.m2v", "09.m2v", "12.mov", "13.mov", "14.mov", "15.mov", "01.mov", "02.m2v", "07.m2v"];
var lenMov = listX.length;
var qtX = 0;
var qtY = 0;
for (i = 0; i < lenMov; i++){
___fullPath = pathX + listX[i];
___qtMov = quickTimePlayer.open(fullPath);
___ob = quickTimePlayer.windows[0].bounds();
___console.log("333: " + qtMov.name());
___qtY = parseInt(i / 3) * yHeight2;
___qtX += xWidth2;
___qtX %= (xWidth2 * 3);
___qtY %= (yHeight2 * 3);
___quickTimePlayer.windows[0].bounds = {x:qtX, y:qtY, width:ob.width, height:ob.height};
___qtMov.play();
___qtMov.looping = true;
___qtMov.audioVolume = 0;
}
0313298
垢版 |
2018/12/14(金) 10:17:27.42ID:2l/2lhQa0
>>307
>js書き慣れてる割には;
言いたかったのは,>>312
var lenMov = listX.length;
for (i = 0; i < lenMov; i++){
qtY = parseInt(i / 3) * yHeight2;
qtX %= (xWidth2 * 3);
のループや,実数を整数変換,剰余などのコマンドが
javascriptであれば直ぐに書けるのですが,純正AppleScriptだと
いちいちネットを検索しないと無理,ということです。

>>299
今回は使用しませんでしたが
Path (quickTimePlayer.documents[0].file())
finder.move(f,{to:desktop,replacing:false})
というような書き方ができることを知って,驚きました。
自分ではこのような複雑なスクリプトを書けませんが
意味ははっきりと理解できます。
時間を使ってスクリプトを作成していただき
本当に感謝しております。
0314298
垢版 |
2018/12/14(金) 10:34:15.37ID:2l/2lhQa0
>>303
>いつも適当にやってるし
perlを長年使用していた私は,pythonに乗り換える時に
「適当にやって」も上手くいきました。
ところが大昔から時々,AppleScriptを利用してきており
かつ,JavaScriptを頻繁に使用している私には
>>299, >>300
で紹介していただいたスクリプトを全く独力では(どんなにネットを検索しても!)
書けない状況です。
 自分では書けませんが,読んで内容は理解できるし
とにかく >>299 のようなスクリプトはカッコいいです!
30年以上Macを使用していて,JavaScriptを愛していますが
久しぶりにシビれました!
0315298
垢版 |
2018/12/17(月) 08:28:58.67ID:6ayU5alI0
>>311
>//次のtrue以下のコマンドを実行しないと,エラーが出る!?
上記の”You don't have permission"エラーには最後まで悩まされましたが,
>>299
のスクリプトを何度か読み返して,Path (…)を実行することで
「true以下のコマンドを実行」しなくても,”permission”エラーを回避することができました。

ネットで検索すると,AppleScriptで書く場合には
set srcFileRef to (open POSIX file srcFileString)
で”permission”エラーが回避できるところまでは調べられましたが
それをjavascriptでどう書きなおすのかが,分かりませんでした。
スクリプト >>299 は,本当に役に立ちました!
貴重なスクリプトを提供していただき,ありがとうございました。
0316名称未設定
垢版 |
2018/12/28(金) 13:16:28.09ID:iV1mosCl0
Location Helperを使わない逆geocodingのやり方が分かる方はいますか?
0318名称未設定
垢版 |
2018/12/28(金) 14:27:55.99ID:YnoMIWXv0
Google map APIを簡単に使えるようにするのがそのソフトらしいのだけれど、APIの有料化云々で使えなくなったのです。
macOSにもlocation managerなるAPIがあるらしいのですが、cocoaに慣れていないのでうまく呼び出せません。
やりたいことは、緯度経度から住所への変換です。
0320名称未設定
垢版 |
2018/12/28(金) 14:50:51.72ID:jhzLnqgc0
残念ながら CLGeocoder reverseGeocodeLocation の結果を返してくれるのはBlocks(クロージャ、無名関数)しかなかった。セレクタ(メソッド)に返してくれるのもあればよかったんだけどね。もしくは、AppleScriptObjC/JXAがBlocksをサポートしてくれれば
Xcodeでそんなコマンド/ヘルパーアプリを書く、swiftコマンド使ってでSwiftをスクリプト的に書く、Google Maps APIを自分で使う
あたりかなあ
0321名称未設定
垢版 |
2018/12/28(金) 14:57:42.48ID:jhzLnqgc0
>>319 みたく、メソッド(デリゲート)で返してくれればいいのに、「逆」も。まあ、Objective-C/SwiftだったらBlocksとメソッド両方あったらどっち使うと言ったらBlocksを使う、Blocksしか使わないけどw
AppleScriptObjC/JXAがBlocksをサポートしてくれれば、いやしてくれw
0322名称未設定
垢版 |
2018/12/28(金) 15:05:52.63ID:YnoMIWXv0
つまり現状では難しいということでしょうか。
Cocoaをよくわかっていないので、紹介先も半分くらいしか理解できませんでした。
0323名称未設定
垢版 |
2018/12/28(金) 15:24:56.62ID:jhzLnqgc0
ああ、「逆」も じゃなく、「Geocoding」も か。「正」もBlocksしかないので、CLGeocoderのやろうwは

>>322
ちょっと難しいかなあ。Cocoaをちょっと勉強すればいいんじゃないのとは思わなくもないけどw
Google Maps APIならWeb APIというある意味一般的なのを使ってだけど(単にhttp呼び出し/取得)。準備とか面倒かもだけど
0324名称未設定
垢版 |
2018/12/28(金) 15:53:18.02ID:jhzLnqgc0
>APIの有料化云々で使えなくなった
のじゃなくて、(API) Keyless での Google Maps API 利用はできなくなったね
Keyless access to Google Maps Platform is deprecated. Please use an API key 〜
Location Helperのサンプルに
-- These commands use 'Core Location'
ってあるのに、なんでそこがGoogle Maps APIなのかと思ったら、Location Helperの最新最後が出た時には、CLGeocoderなんて存在しなかったあたりっぽい

で、自分でAPI Key取得すれば、
https://stackoverflow.com/questions/52727698/google-reverse-geocode-multiple-coordinates-with-one-api-call
なんぞでできるよ(たぶん)。app_id= や app_code= なんぞがAPI Key(確かたぶん)。自分で取得した値にすれば動くだろう
0325名称未設定
垢版 |
2018/12/28(金) 16:03:06.41ID:jhzLnqgc0
よくみたら
batch.geocoder.api.here.com
って、ナゾのサイトだったw まあ、それで(API Keyはそのサイトのなのかな)。Google Maps APIも同じようなのがたぶんあるだろう
0326名称未設定
垢版 |
2018/12/28(金) 18:01:48.64ID:jhzLnqgc0
Google Maps API のはこれ
https://developers.google.com/maps/documentation/geocoding/intro#reverse-exampleintro#ReverseGeocoding
単にkey= に取得したAPI Keyを入れればいいんじゃね

コマンドでできるか(許可とかなんとかウザいwの対応するためにはヘルパーアプリじゃなきゃかな)と試したらコマンドでできた
https://ideone.com/0We7Hg

$ hogehoge 35.1707 136.8826
2018-12-28 17:33:56.830 YYYY[462:4851] 住所:(
2018-12-28 17:33:56.830 YYYY[462:4851] 〒450-0002
2018-12-28 17:33:56.830 YYYY[462:4851] 愛知県名古屋市中村区
2018-12-28 17:33:56.830 YYYY[462:4851] 名駅1丁目1
2018-12-28 17:33:56.830 YYYY[462:4851] )

な感じ。たったこれだけでいいんだからAppleScriptObjC/JXAでBlocksが使えれば/CLGeocoderのやろうがセレクタにも返してくれれば、AppleScriptObjC/JXAで完結するのにぃ
0327名称未設定
垢版 |
2019/01/28(月) 09:09:40.38ID:5kzQRvO50
display alertをtimeoutさせない方法って無いですよね?
ググるとwith timeout of 〜 secondsすればいいとかあるけど、Mojaveだとこれやってもgiving up afterやっても2分でtimeoutしちゃう
0328名称未設定
垢版 |
2019/01/28(月) 09:27:13.85ID:5kzQRvO50
あ、activateしてからdisplay alertすればtimeoutしなかった
背後でdisplay alertしたときだけ2分でtimeoutするのか…変な仕様だな
0329名称未設定
垢版 |
2019/01/28(月) 17:14:26.26ID:qPnOw4hI0
AppleScriptの骨幹のApple Eventの仕様かな。Apple Eventのリクエストしてからそれのレスポンスが返るまでのタイムアウトがちょうど2分らしい、エラーメッセージもそういうメッセージ
バックグラウンドだとレスポンス返すとこまでは動かない(=displayまではしてない)からかな
0330名称未設定
垢版 |
2019/01/28(月) 17:26:07.90ID:qPnOw4hI0
Apple Event timeout error はハンドリングできるので、activateがウザい(他になんかしているときに勝手にアクティベートされるのはウザい)からしたくなければ、timeout なら display alert を再び/繰り返すかなあ
0331298
垢版 |
2019/02/09(土) 08:31:44.76ID:48/L+ULp0
>>299
file()メソッドを使わせていただきましたので,その報告です。

複数のQuickTime動画を大型モニター4画面で同時自動再生(>>311,312,315)しています。
開いている複数の動画のパスを次のようなスクリプトで取得して保存しておきます。
このようなリストを複数作成しておけば
そのリストに指定された複数の動画を同時に開いて同時に再生できるので便利です。

var quickTimePlayer = Application('QuickTime Player');
quickTimePlayer.activate()
delay(2)
lenMov = quickTimePlayer.documents.length
console.log("333: " + lenMov)
for (i = 0; i < lenMov; i++){
___console.log(quickTimePlayer.documents[i].file())
}
0332名称未設定
垢版 |
2019/03/02(土) 03:11:39.45ID:4RgGEeXD0
画像ファイルの画像サイズを得てみる

// Image Events
ImageEvents = Application("Image Events");

function IEImageWidth(path) {
let image, dimensions;
if((image = ImageEvents.open(path)) == null)
return undefined;
dimensions = image.dimensions();
image.close();
return (dimensions.length == 0 ? undefined : dimensions[1]);
}
0333名称未設定
垢版 |
2019/03/02(土) 03:12:19.87ID:4RgGEeXD0
// Spotlightのメタデータ。AppleScript(JXA)ではサポートしてない(?)のでシェルで
app = Application.currentApplication();
app.includeStandardAdditions = true

function SSMDImageWidth(path) {
let result = app.doShellScript("mdls -name kMDItemPixelWidth '" +
path.replace(/'/g, "\\'") +
"' 2>/dev/null | awk 'NF==3&&/^kMDItemPixelWidth/{if($3 != \"(null)\") print $3; exit 0;}'");
return (result.length == 0 ? undefined : Number(result));
}
0334名称未設定
垢版 |
2019/03/02(土) 03:12:51.19ID:4RgGEeXD0
// Spotlightのメタデータ。Cocoa API直接
ObjC.import("CoreServices");

function MDImageWidth(path) {
let result = undefined;
let item, attributes;
if((item = $.MDItemCreate($.kCFAllocatorDefault, path)).isNil())
return result;
if(!(attributes = $.MDItemCopyAttributes(item, ["kMDItemPixelWidth"])).isNil()){
if((result = attributes.js["kMDItemPixelWidth"]) != undefined)
result = result.js;
$.CFRelease(attributes);
}
$.CFRelease(item);
return result;
}
0335名称未設定
垢版 |
2019/03/02(土) 03:19:58.16ID:4RgGEeXD0
function run(input, parameters) {
result = [];
input.forEach(item => {
if((width = IEImageWidth/SSMDImageWidth/MDImageWidth(item.toString())) == undefined)
return;
result.push(width);
});
return result;
}

IEImageWidth:おっそ、まあ、画像ファイルを開いてなんちゃらやってだからこんなもんか
SSMDImageWidth:んー、おっそ。んー?
MDImageWidth:ゲロ速い。SSMDImageWidthから少しは速くなればいいかなと思ったら、ゲロ速い。SSMDImageWidthはいちいちシェル起動するからとかか

C関数まんま使えるのか、すげーな、AppleScriptObjC。BlocksもJavascriptのクロージャがそのまんま使えるのを最近知った。鬼金やな
鬼らしく、ミスったら簡単にScript Editor/Automatorクラッシュする/させることできるけどw
0336名称未設定
垢版 |
2019/03/05(火) 10:49:12.91ID:AAVk5UnP0
[Mojave以降] AppleScript製アプリのアクセス許可のダイアログが毎回出るのを防ぐ
ttps://mac-tegaki.com/trouble-shooting/applescript-app-ask-permission-every-time.html

まだHigh Sierraなんですが
こんなの見かけたけどめんどいですね
0337名称未設定
垢版 |
2019/03/05(火) 12:28:37.92ID:+Yw6Dqc90
許可したら システム環境設定 > プライバシ に登録されて「毎回」は出ないハズだよ
自動登録時にアクセス許可するアプリのチェックが付いてないとかじゃないのかな「毎回」は
だが、SIPもそうだが面倒なことが増えるねえ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況