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

ссылка на оригинал статьи http://habrahabr.ru/post/207282/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *