AppleScript アップルスクリプト 質問、発表 8
「発表8」で、JavaScriptでのQuickTime動画の操作でお世話になった者です。
macOS Ventura 13.2.1を使用してます。追加の質問です。
再生中のQuickTime動画のタイムコードを表示(取得)する目的で
次のスクリプト(1)を作成し実行しすると、スクリプトエディターの
「返された値」のタブには(2)のようなエラーが出ます。
currentTimeの値を表示(取得)する方法をご教示いただけると幸いです。
(1) スクリプト
quickTimePlayer = Application("QuickTime Player");
quickTimePlayer.activate();
console.log(quickTimePlayer.documents[0].currentTime);
(2) 「返された値」のタブ
app = Application("QuickTime Player")
app.activate()
app.currentTime.Symbol.toPrimitive()
--> Error -1700: タイプを変換できません。
/* */
結果:
Error -1700: タイプを変換できません。 >>3
ご助言ありがとうございます。.currentTime() で見事に値が得られました。
「これ読みなさい」も読んでみます。
本来のJavaScriptとPythonを頻繁に使用しますが、()の有無によるget, setの
使い分けは、まったく使ったことがないため、ご指摘いただけなかったら
自己解決は絶対に無理でした。 >本来のJavaScriptとPythonを頻繁に使用しますが〜
JavaScriptとPythonを頻繁に使用するがそれで使うライブラリ/フレームワークを調べようともしてないってことか
言い訳にならない言い訳をなぜしようとするのか 質問者には悪いけどまだそこまで学習できてないからだろう
おまえがすごいのは分かるけど全員がおまえのようにすごくはないってことだろう
むしろなぜそんなに追い込みたい? 無意味なプライドは早めにへし折った方が後のためではある >>5
>ライブラリ/フレームワークを調べよう
JavaScriptとPythonはユーザー数が多いので、単純にエラーメッセージなどを
Google検索すれば、回答が出てきます。一方、ASのJavaScriptは、同じような
Google検索を実行しても、答えが出てこないため、これまでも皆様のご助言に
救われてきました。心より感謝しております。
(JavaScriptは20年以上、Pythonは10年以上、ASは25年以上使用し続けていて
このレベル(笑)です。) JXAは確かに情報少ないけど、
サンプルみてたら()つけるぐらいは試してみて良さそうなもの
ましてそれだけのプログラミング歴があるなら >>10
>ましてそれだけのプログラミング歴があるなら
Python, JavaScriptは毎日平均2、3時間書き続けてますが
25年以上のASの方は1ヶ月に数時間というレベルで、どんどん
忘れていくばかりです。このスレッドで、これまで同じような質問をして
(「()をつける」など)ご迷惑をおかけして心よりお詫び申し上げます。 プログラミング歴を自ら出せるレベルじゃないと自覚してるなら、そうしなよ
言い訳が自分の為であって、なんら他人のためではない
タイプを変換できません ってことはそこのどこかの型がおかしいって推察できそうなもんだが、その自称歴からは
そこのどこかの型がおかしいってのも、JavaScriptの基本で調べられることであろうに
とか細かく言いたくはなるなw >>12
>どこかの型がおかしいってのも、JavaScriptの基本で
JavaScriptの型変換から類推して、いろいろとあがきました:
String(quickTimePlayer.documents[0].currentTime)
parseInt(quickTimePlayer.documents[0].currentTime)
' '.join(quickTimePlayer.documents[0].currentTime)
正解の()は、自分では全く思いつきませんでした。 typeof quickTimePlayer.documents[0].currentTime
() に決まってるだろ
typeof知らないでよくJavaScriptを頻繁にとか20年以上とかよく言うわ 20年以上やってまだ初学者の勉強中を脱してないって 只々スクリプトを読まずに横流ししてただけじゃねーか勉強もクソもあるかいなって 勉強という姿勢はそもそも全くないのは今までのレスでわかってるよ
そういう意味じゃない 意味なんてどっちでも良いけどvbaもluaもpythonもcもライブラリは型()やし、
あの質問はtbn初めてイチから書いた文章だと思う。
批判はしねぇけど長年やってきたと言う割には超基礎抜けしてるから
良く今まで指摘されなかったな/(^o^)\って感じ >>19
>批判はしねぇけど長年やってきたと言う割には超基礎抜けしてるから
Mac歴は35年以上。元々はHyperCardというスクリプトから
始めましたが、それが消滅して、4th DimensionやAppleScriptを
使うようになりました。4Dは10年前にやめて、pythonやSQLiteに
乗り換えましたが、AppleScriptは今でも時々、使っています。
いつまで経っても素人レベルで申し訳ないです。老化のため、10年前に
できたことも「超基礎抜け」し始めています。 ChatGPTがpythonやJavaScriptのスクリプトを自動生成してくれる
ようですが、「私のパソコン内に保存された動画ファイルaaa.mp4を
QuickTimeで開き、1分10秒から再生するスクリプトを
書いてくれ」というチャットには、ChatGPTver.99でも対応
できないのでは?! >>20
マイコン世界のまま来たんだ…
>>22
開く訳ないんだよなぁ… >>23
え?当たり前だけどちゃんと動くけど?
スクリプト見たら分かるよね?
まさかパスそのままじゃないよね? >>25
何年前のmac使ってるねんパス書いてみーや >>23
マイコンの世界ママからというより、色々手を出すがどれもこれも何も身についてないって感じ
経歴を色々出す意味が全くわからんな。どれもこれも知見が全くない素人レベルでしかないだろうに
単にど素人ですって言われた方が...いやそれでも自分で何か色々したいなら勉強する姿勢を見せろってなるか まあ、動かないことは動かなかったり
原因がパス形式がではなく、fileもしくはaliasが足りなくなくない?
AppleScriptではHFS形式が隠れデフォなのは前スレで話題にあったな
そうでなくても使うことがないのに、普通に目にするわな
Script Editorの結果表示とかで >>30
ヒント与えちゃダメでしょ〜
コロンの付いたhfsパスではapfsコンテナを通過できなくてPOSIXに変える必要があるんだけど、
chatGPTチャンの"アレ"で完璧に動作するのはsierra以前になるのよね。
誰かさんの誇らしげな書き込みがどんな転末を迎えるか楽しみだったのにw ん?Veatura13.2.1でコロンのついたパスでも動作するけど?
POSIX形式のパスじゃなくても。
Macintosh HD:Users:ほにゃらら:Movies:aaa.mp4で >>22
>すぐ書いてくれましたよ
驚きです! 対話を続けて「今のAppleScriptをJavaScriptに
書き換えてください」とChatGPTへ返答すると、ChatGPT は
JavaScriptで書き直してくれるのでしょうか?
JXAのJavaScriptは、学習するデータが他の言語より少ない
はずなので、ChatGPTが正しい回答をするのは難しいと予想してますが
ChatGPTの進化は「マイコンの世界ママ」の老人の予想を遥かに
超えてるんですかね? マイコンの世界ママでもない単なる勉強嫌いのくせに
ホンマこの老害は老害らしい >>31
>コロンの付いたhfsパスではapfsコンテナを通過できなくてPOSIXに変える必要があるんだけど、
違うんじゃね
MacOSXになった頃から、MacOSXのAPIはPOSIXパスのばかり、HFSパスを受け取れるのはMacOSの頃のAPI(Carbon)だけだったような
aliasはMacOSの頃のAPIなので、名残でHFSパスの方になるという。ファイルシステムは無関係で、APIの問題。AppleScriptはまた別の問題でもある
間違いは素直に認めような。気持ち悪いw >>36
>学習するデータ
ああ、AIのか
トンチキなレスだったな。まあ似たようなもんだがw >>37
お前それだけツラツラ書いときながら馬鹿だろ…
>MacOSXになった頃から、MacOSXのAPIはPOSIXパスのばかり、HFSパスを受け取れるのはMacOSの頃のAPI(Carbon)だけだったような
path to meは一体何だよ(笑)venturaでも稼働するぞ
>aliasはMacOSの頃のAPIなので、名残でHFSパスの方になるという。ファイルシステムは無関係で、APIの問題。AppleScriptはまた別の問題でもある
エイリアスだけじゃねーぞ、お前一体何食ったらそんな脳みそ小さくなるんだ 以前の私は、掌田 津耶乃氏の書籍でAppleScriptの
勉強をしていた時期もありますが、2002年以降日本語での
書籍が消滅して、私のような素人がAppleScriptを学ぶのは
難しくなってきたと感じておりました。しかしChatGPTが >>22 の
ような見事なスクリプトを作成する時代が来たので
「単なる勉強嫌い」でもAppleScriptに触れる機会が
増えそうです。 >>39
「もちろん」AppleScriptもMacOSの頃からなので、方々でHFSの名残はある
aliasは端的にMacOSの頃のAPIを「使うしかない」という代表
「AppleScriptはまた別の問題でもある」はそういう意味だよ
レスの趣旨は端的にはファイルシステムなんて関係ないよ、何言い出してるのってってことなんだがw >>41
>HFSの名残
HFSパス形式の名残
それもある意味単なる文字列でしかなかったり。そうでなかったり
>何年前のmac使ってるねんパス書いてみーや
と言っていたくせにw単なる 動かしてみーや ではなく
明らかに間違いかあえてミスリードする根性悪だな
前者だったら後のレスが根性悪すぎでどっちにしろ根性悪だなw 前書き。
そんだけ連投しといて書いてる事が何1つの意味が無いのはあんたの特技か。
落ち着ついてよく読んでよく"考えて"書け。
初めて見たぞ、全部が全部間違えてるなんて
重複もあるけど一つ一つ書くからね
>>37
>carbonだけだったような
>>39で書いた通りhfsパスで取得するライブラリが残ってます。
と言うかposix指定しないと基本的にhfsパスです。
>>41
>「もちろん」AppleScriptもMacOSの頃からなので、方々でHFSの名残はある
名残ではなく下位互換。
>レスの趣旨は端的にはファイルシステムなんて関係ないよ、何言い出してるのってってことなんだがw
ExFatはPOSIX pathプロパティのみ受け付けます。
>>42
>HFSパス形式の名残
下位互換です。関数によってhfsパスを要求する事があります。(特にNS系)
>前者だったら後のレスが根性悪すぎでどっちにしろ根性悪だなw
結果彼はventura(veanturaだから私の知らないosかもしれません)のapfsに見事hfsパスを書きました。
初志貫徹ぷりが良いところです。あなたの様な気持ち悪さが無いのがものすごく好きになれそうです >>43
>>carbonだけだったような
>>39で書いた通りhfsパスで取得するライブラリが残ってます。
と言うかposix指定しないと基本的にhfsパスです。
path to me って拘るが、それも単にAppleScriptの話だろうが。ライブラリ??
API=OS APIの話をしてるんだが。ファイルシステムの話を言い出してるのにわからないのか。Carbonって言われてもわからないようなのか...??
AppleScript -> OS API -> ファイルシステム
HFS形式/POSIX形式をどう扱うかはAppleScriptの中での話でしかない、AppleScriptの実装がどのOS APIを使うかだが、MacOSXの主流はPOISX形式でしかないってこと。AppleScriptの実装で場合によってはHFS形式/POSIX形式相互変換もしてるだろう
もちろんHFS形式とPOSIX形式の変換をするAPIはあるかもね(使ったことはないけど)
APFSが出る前、HFSが出る前からの話でファイルシステムなんて関係ない、MacOSXの主流はPOISX形式って話での話だからな
>hfsパスを要求する事があります。(特にNS系)
>特にNS系
特にNS系????あったっけ。単なる互換性の極一部ではなく??なに?
(NS = NeXT Step だよ。イミフw)
名残でもあるな。ScriptEditorの結果表示は別にPOSIX形式で表されて何も困らないだろう
いや、今時、HFS形式ではほぼあんま書かんだろうから(お前もそう言ってるようだけど)
>結果彼はventura(veanturaだから私の知らないosかもしれません)のapfsに見事hfsパスを書きました。
なに言い出してるの??
「彼」は書いてないだろうし、そもそもそこの文が何を言い出してるのか全くわからんわ
気持ち悪すぎwww >>44
>APFSが出る前、HFSが出る前からの話でファイルシステムなんて関係ない、
APFSが出る前、HFSしか(?)の頃からの話で、ファイルシステムなんて関係ない、 >>44
しっかり読んだら只の口ごもりな愚痴やん。
お前マジで何しに来たん? >>46
口ごもりwww
ながーくなるからある程度「知ってるだろう」と言う前提になるだけだよ
トンチンカンなこと言ってるから違うよってのと、なんか無茶苦茶絡むから違うよって言ってる。根性と絡み方がキモいってお話をしてるんですけどw
でさー、ちょっとマニアックな調査しようとして、同じようなスクリプトを再度書いてたんだわ
そしたらさー、fileもaliasも無くても動いてしまったんだわぁ
wwww
>>32もそういうことだったのね
いや、本当に、>>30はfileとaliasを付けた外したで明らかに動く動かなかったんだけど
なんかあるなあwなんなんかわからんけど。まあ、確実にはfileとaliasは付けましょうってことで
(なんか色々残念だったなwwwww) >誰かさんの誇らしげな書き込みがどんな転末を迎えるか楽しみだったのにw
www ついていけなくなって爆発して消えるのもいつものこと どうせステレオタイプとか妄想人は救われないから
気づいたら距離置くわ 自覚のない無知が知ったかで妄想ばら撒いただけ
馬鹿の典型 時間を無駄にした老人とAI信奉者と連投妄想奇人とよりどりみどり 人をバカにしちゃいけないよその行為がmacを使うヤツは愚か者だと紹介していることになる まるでmacではない何か、なんでもいいが、ではそんなことは無いような言いよう
この頭の悪さはいったい 一定の悟性持ってなきゃ扱いは最低なのは普通でしょ
学習しなと促した結果が未成熟AIと連投に縋ったんだから 前スレでVenturaのシステム設定でpaneが使えなくなってるって書いたけど最新13.3.1だと使えるようになってる
ただ書き方はちょっと変えないといけない
tell application id "com.apple.systempreferences"
--set current pane to pane "com.apple.settings.PrivacySecurity.extension" --これだとエラーになる
set current pane to (first pane that id is "com.apple.settings.PrivacySecurity.extension")
end tell 配列listXには、複数のフォルダーのフルパスが登録されてます。これらのフォルダーを
すべてcolumnViewOptionsで開きたいのですが、次のスクリプトだと失敗します。
ご指導いただけると幸いです。(macOS: 13.3(22E252))
var finder = Application('Finder');
finder.Prerences.foldersOpenInNewWindows = true
finder.Prerences.columnViewOptions = true
listX.forEach(function(element){
fullPath2 = Path(element);
finder.open(fullPath2);
}); >>66
気づいていると思うけど
finder.Prerences.❌
finder.Preferences.⭕
それにjavaはここじゃ無いよ >>66
finder.finderPreferencesな。ちゃんと用語説明に書いてあるから。
だが結局は>>69の通りr/o >>67-70
ご指導、ありがとうございました。
>それにjavaはここじゃ無いよ
jxaは、ここのスレッドでよろしいでしょうか? java java 言ってるけど、javaとjsは別物だからな
それにjs関係のスレで聞く方が内容的にスレ違いなんで聞くとしたらココでしょ 本当はAppleScriptでやりたいのに、AppleScriptでサポートせずJXAに丸投げのもあるし、AppleScriptでJXA書ける呼べるからなあw
言語が違うだけでやりたい本質は同じだよね do shell script "tail ..." do shell script 使わずに AS のみで tailを取りたい
before 使えば1行目取れるから最終行なんとかならん AppleScriptで位置を指定するときに負数の場合は後ろからというのは何のときだったかなあ
そゆことでしょ。何のときだったけ ああ、thru の時か、これでいいんじゃないの??
何に使いたいのかさぱりだから、これではダメかも知れんが あ、thru だけじゃなく、普通の位置指定でもだな
位置指定でマイナスは後ろか。thruはそれに則ってるだけとも言えるか 追加さてれ行くファイルの差分を取りたいんです
無限ループで飲み込むのにdo shell script使ってます
ASで直接お尻から読めたら速くなりませんか イマイチ何したいのかわからんw
速くなるかもしれないしならないかもしれない
読むファイルのサイズ、およびファイル数、差分判定のステップ数によるだろうしな ああ、追加されていく行 なのか
だったら、元のファイルの バイト数 以降のを read で読めばいいだけのような、後ろからとはちょっと違うような。元のはバイト数ではなく行で管理保存してるとかか
シェルスクリプトでもそう変わらないような read f from eof to -10 using delimiter "
"
バイト単位しか取れません、行で取りたい 行で取りたい時点で、ファイルの最初から読まなければならない
readで全て読んでその後でもそれほど変わりはないだろう。
バイト単位ならまだ読み飛ばしはできる、効果は顕著にもなる期待はできるがな >行で取りたい時点で
(先頭からの)行番号行数を指定したい時点で
が、より正確か
後ろから何行文ファイルから読むというのは逆に面倒なのでサポートしてなくても何ら不思議ではないな > from eof to -10
なんでこんな少量ぽっち読んでんの、ていうか値の根拠はなに
毎度小出しな感じがしてなんかイマイチ それはさすがに単なるテストだろってわかりそうなもんじゃないの
10行分取れなかった、10バイトだったってだけでしょ
それで行単位で指定できるのかの確認はできるんだから、何をつっこんでるんだかイマイチ Script Editor の Library から見る説明では、明確に byte と書いてるのは for でしかない(関連性ある for from to で)が、
>>84のではちゃんと逐一 byte って書いてるね。書いてるんだからそうでしかないのはまあ当たり前かな >>89
俺にはわからん、ろくに説明なしじゃ
わからんから tail -f ぽいの。欲しいのと全然違うだろうけど
a.scptとして保存したらターミナルで osascript a.scpt /var/log/system.log 等
property LINEMAX : 2048 -- sysctl user.line_max
global lastpos
on run argv
set lastpos to 0
set f to POSIX file (item 1 of argv)
repeat
set ll to getnewlines(f)
if ll is not {} then
repeat with l in ll
log l
end repeat
else
delay 1
end if
end repeat
end run
-- 続く -- 続き
on getnewlines(f)
if lastpos = 0 then
set eofpos to get eof f
if eofpos > LINEMAX * 11 then
set pos to eofpos - LINEMAX * 11
else
set pos to 1
end if
set ll to read f from pos using delimiter "
"
set lastpos to eofpos
if (count of ll) > 10 then
set ll to items -10 thru -1 of ll
end if
else
set eofpos to get eof f
if eofpos > lastpos then
set ll to read f from lastpos + 1 using delimiter "
"
set lastpos to eofpos
else
set ll to {}
end if
end if
return ll
end getnewlines >>91
ありがとうございます、良いヒントになりました
ループ内のシェル呼び出し減らせそうです
正規表現やワンライナーだけシェルに任せます property kBackwardsReadBlockSize : 1
on openBackwardsBlockReading(theFile)
script instance
property _fileRef : open for access theFile
property _readPos : (get eof of _fileRef) + 1
property _pendingPrevious1stItem : ""
on closeFile()
try
close access _fileRef
end try
set {_fileRef, _pendingPrevious1stItem} to {missing value, missing value}
end closeFile
on readNext()
if _readPos is 1 then return missing value
local readLen, readItems
set readLen to kBackwardsReadBlockSize
if _readPos is not greater than readLen then set readLen to _readPos - 1
set _readPos to _readPos - readLen
set readItems to paragraphs of (read _fileRef from _readPos for readLen)
set last item of readItems to last item of readItems & _pendingPrevious1stItem
set _pendingPrevious1stItem to ""
if _readPos is 1 then return readItems
set _pendingPrevious1stItem to first item of readItems
if (count of readItems) is 1 then return {}
return items 2 thru -1 of readItems
end readNext
end script
return instance
end openBackwardsBlockReading >>95
素晴らしいです、シェル呼び出しの30倍以上速いです、早速使わせて頂きます
シェル呼び出しは負荷が高いのでASで全て表現出来れば良いのですが難しいですね
コマンドプロセス確認の取得方法がわからないので ps aux
不特定行に現れる特定の文言があればエラーにする部分は sed
前後する数値の特定は sed と uniq と perl ワンライナー <= こいつの負荷が高い
ループ内のシェル呼び出し消せたので随分軽くなりました、感謝です 誤った歳の取り方、馬鹿な誤魔化しの人生が透けて見える感じ