Однажды мне надоело тыкать закладку Habrastorage в браузере. И я сделал вот что…
Вот за что я люблю MacOS — за Automator и AppleScript.
Запускаем Automator, выбираем тип — Служба.
В выпадающих меню выбираем, чтобы служба работала только на графических файлах в финдере:
Слева в поиске находим действие «Run Apple Script» и перетаскиваем его в рабочую область:
Пишем небольшой скрипт:
on run
tell application "Finder"
return POSIX path of (selection as alias)
end tell
end run
Состоит он, по сути, из двух строчек:
tell application «Finder» — вызываем приложение Finder
return POSIX path of (selection as alias) — скрипт возвращает адрес выделенного файла в POSIX стиле(если просто попросить path — то он отдаст адрес с разделителями-двоеточиями).
Теперь сбоку находим «Run shell script» и тоже перетаскиваем его в рабочую область. Выбираем в меню «Передать ввод: как аргументы» В этом случае то, что вернет верхний скрипт передатся не на стандартный ввод, а как будто мы запустили этот скрипт с параметром(у нас это путь к файлу)
Пишем в него вот что:
curl -F "Filedata=@$1" "http://habrastorage.org/uploadController/?username=vvzvlad&userkey=7a25d94cde460365b6f7ce137675c623ec" | json_pp | grep url | awk -F '"' '{print $4}'
Эту строчку я нашел вот в этом комментарии. Первая часть — это загрузка методом POST в параметре Filedata нашего файла. $1 — это как раз тот аргумент, который передает верхний скрипт — адрес файла. Тоесть, у меня это выглядит вот так:
curl -F "Filedata=@/Users/vvzvlad/Documents/REVIEWS/alpha mio/foto/003.jpg" "http://habrastorage.org/uploadController/?username=vvzvlad&userkey=7a25d94cde460365b6f7ce137675c623ec"
Как получить магическую строку userkey описано вот тут. Надо зайти на адрес habrahabr.ru/whoami/ но не просто так, а с реферером habrastorage. Проще всего это сделать так: заходим на habrastorage.org, смотрим исходный код, находим строчку(она у меня 13), и тыкаем на нее.
Получаем вот такую строчку, которую и копируем себе в скрипт:
Остальная часть строки:
| json_pp | grep url | awk -F '"' '{print $4}'
Это разбор JSON-ответа, чтобы выдрать из него то, что нас интересует — урл загруженной картинки.
Теперь мы получили адрес, но нам его надо вы еще как-то отдать пользователю. Например, скопировать в буфер обмена. Добавляем в редакторе еще один блок Apple скрипта:
В нем у нас такой скрипт:
on run {input}
set the clipboard to "<img src="" & input & "" alt="image"/>"
display notification input with title "Habrastorage" subtitle "Картинка загружена"
end run
on run {input} — получаем от предыдущего скрипта строчку с адресом
set the clipboard to "<img src="" & input & "" alt=«image»/>" — копируем ее в буфер обмена, заодно оборачивая в тег img
display notification input with title «Habrastorage» subtitle «Картинка загружена» и показываем уведомление, чтобы пользователь понял что картинка уже загружена, и ее можно вставлять в текст.
Все, скрипт работает, можно загружать файлы сразу из Finder, не трогая лишний раз глючный Flash и не открывая вкладку браузера.
Материалы:
AppleScript для новичков
Сам скрипт живет тут
Его надо распаковать и положить в папку /Users/User/Library/Services/, не забыв вставить внутрь свою строчку.
P.S. Я понимаю что он не очень оптимален, и можно сделать все в одном Apple Script. Но я не понял, как правильно передать аргумент внутрь do shell script, а так же, как там экранировать символы.
Автор: vvzvlad