Я искал информацию через Google для некоторых указателей, чтобы заставить меня перейти к чему-то, что мне нужно сделать в iPhoto через AppleScript, но пока не нашел много. Существуют различные старые обсуждения сценариев для различных старых версий iPhoto, которые плавают вокруг, но ничего, что было особенно полезно с тем, что мне нужно. В принципе, в псевдокоде, я ищу, чтобы сделать это:AppleScript Синтаксис для автоматизации iPhoto
for each photo in library
if photo.Description contains "a known string"
photo.Description = photo.Description.Replace("a known string", "")
end if
end for
То есть, у меня есть кусок странствующего текста, который сделал свой путь в каждый (ну, почти все) фото в моей библиотеке. Я догадываюсь, что в какой-то момент в прошлый раз я портил пакетное изменение и до сих пор не заметил его. Либо это, либо обновление с iPhoto '08 до '11 сделало это как-то. В любом случае, чистый результат будет таким же.
Я не хорошо разбираюсь в AppleScript, и у меня возникли проблемы с поиском правильного синтаксиса/словаря для использования в этом. В принципе, я нахожусь в части tell application "iPhoto"
, но не знаю, что сказать. Если важна иерархия того, как организованы фотографии в библиотеке:
- Каждая фотография организована в хронологическом порядке по событиям. (События - моя основная форма организации.)
- Существует большое количество альбомов, но не все в альбоме.
- В альбоме есть один умный альбом, в котором содержится всякая странная фотография. Это, конечно, основано на наличии известной строки в описании фотографии. Поэтому я полагаю, что, возможно, это нужно иметь в виду, если конечный код проходит через фотографии в этом умном альбоме, так как смарт-альбом может менять массив, который повторяется, нет?
Есть ли у кого-нибудь какие-либо ссылки или примеры кода, чтобы помочь мне? И наоборот, знает ли кто-нибудь лучший способ сделать это одноразовое массовое исправление?
Edit: Я побежал тест с помощью следующего кода:
tell application "iPhoto"
activate
set thePhotos to get every photo
repeat with aPhoto in thePhotos
if aPhoto's comment contains "[known string]" then
log aPhoto's comment
tell aPhoto to set it's comment to text 1 thru (offset of "[known string]" in aPhoto's comment) of aPhoto's comment
log aPhoto's comment
exit repeat
end if
end repeat
end tell
который привел следующий вывод:
tell application "iPhoto"
activate
get every photo
get comment of photo id 4.294977224E+9
(*comment of photo id 4.294977224E+9*)
offset of "[known string]" in comment of photo id 4.294977224E+9
«event ascrgdut»
offset of "[known string]" in comment of photo id 4.294977224E+9
end tell
tell current application
offset of "[known string]" in «class pcom» of «class ipmr» id 4.294977224E+9
Result:
error "iPhoto got an error: Can’t make comment of photo id 4.294977224E+9 into type string." number -1700 from comment of photo id 4.294977224E+9 to string
Edit: У меня было некоторое время, чтобы возиться с ним этим утром, и это похоже на то, что какой-то тип кастинга был всем, что было необходимо. Этот код успешно изменив первую найденную фотографию он находит:
tell application "iPhoto"
activate
set thePhotos to get every photo
repeat with aPhoto in thePhotos
if aPhoto's comment contains "[known string]" then
log aPhoto's comment as text
set theComment to aPhoto's comment as text
set theComment to text 1 thru (offset of "[known string]" in theComment) of theComment
tell aPhoto to set it's comment to theComment
log aPhoto's comment as text
exit repeat
end if
end repeat
end tell
Теперь, чтобы поддержать мою библиотеку и удалить exit repeat
. И, вероятно, сделайте что-нибудь еще на время, пока он работает :)
@ dscl: Выполнение теста на этом с помощью 'exit repeat' после первого catch условного, но я получаю сообщение об ошибке. Добавление вывода событий в вопрос. Может быть, 'comment' должен быть чем-то вроде' description' вместо этого?Может быть, 'comment' - это объект, который сам имеет текстовое поле, которое я ищу? – David
@ david: Какую версию iPhoto вы используете? Возможно, они изменили имена из версии, в которой я тестировал. – dscl
@ dscl: '11 (недавно обновлен с '08 через новый магазин приложений, поэтому библиотека изначально была '08). – David