Pull to refresh

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

Reading time3 min
Views14K
Однажды мне надоело тыкать закладку 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, а так же, как там экранировать символы.

P.P.S. В статье все изображения загружены с помощью этого скрипта.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 84: ↑74 and ↓10+64
Comments37

Articles