...

среда, 25 декабря 2013 г.

Скрипт Automator, загружающий изображения на Habrastorage

Однажды мне надоело тыкать закладку Habrastorage в браузере. И я сделал вот что…

image




Вот за что я люблю MacOS — за Automator и AppleScript.

Запускаем Automator, выбираем тип — Служба.

image

В выпадающих меню выбираем, чтобы служба работала только на графических файлах в финдере:

image

Слева в поиске находим действие «Run Apple Script» и перетаскиваем его в рабочую область:

image

Пишем небольшой скрипт:

image



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» и тоже перетаскиваем его в рабочую область. Выбираем в меню «Передать ввод: как аргументы» В этом случае то, что вернет верхний скрипт передатся не на стандартный ввод, а как будто мы запустили этот скрипт с параметром(у нас это путь к файлу)

image

Пишем в него вот что:

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), и тыкаем на нее.

image

Получаем вот такую строчку, которую и копируем себе в скрипт:

image

Остальная часть строки:

| json_pp | grep url | awk -F '"' '{print $4}'




Это разбор JSON-ответа, чтобы выдрать из него то, что нас интересует — урл загруженной картинки.

Теперь мы получили адрес, но нам его надо вы еще как-то отдать пользователю. Например, скопировать в буфер обмена. Добавляем в редакторе еще один блок Apple скрипта:

image

В нем у нас такой скрипт:

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, а так же, как там экранировать символы.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий