Как стать автором
Обновить

Служба Automator, загружающая изображения на Яндекс.Фотки

Обработка изображений *Яндекс API *
К созданию этой службы меня подтолкнул пост Скрипт Automator, загружающий изображения на Habrastorage, а точнее, вот этот комментарий.

Итак, в чем же сложность написания подобной службы? В том, что для загрузки изображений требуется OAuth токен, т.е. необходимо как-то его получить (и сохранить для последующего использования). Конечно же, можно создать собственное OAuth приложение и получить токен вручную. Но это не наш метод.

Вспомним, как же происходит OAuth авторизация приложения на Яндекс.Фотках:
3. OAuth-сервер осуществляет редирект на указанный разработчиком URI, добавив к нему в качестве параметра токен или код подтверждения, дающий право на последующее получение токена.

Как раз то, что нам надо. Остался один вопрос: как же нам получить этот токен? А очень просто. Нам необходимо указать в настройках приложения такой Callback URL, который будет приводить к открытию нашего приложения, а уже оно и будет получать и сохранять токен.

Для этого мы воспользуемся возможностью OS X приложений объявлять себя обработчиками URL схем. Например, приложение может указать, что оно является обработчиком URL-ов вида ypu-oauth://..., и при любой попытке «открыть» такой URL — будет запущено приложение, которому будет передан исходный URL для обработки.

Итак, поехали. Для начала создадим наше приложение. Нет-нет, не спешите запускать Xcode, он нам совершенно не понадобится. Мы напишем приложение на чистейшем AppleScript.

Открываем Редактор AppleScript, создаем новый файл и сохраняем его как Программу.



Код нашего приложения довольно простой:

on open location theUrl
  # переменная theUrl — строка с исходным "перехваченным" URL
  # Пример: ypu-oauth://do#access_token=...&token_type=bearer&state=&expires_in=31536000
  # получаем access_token из theUrl
  # сохраняем access_token для будущего использования
  # получаем и сохраняем информацию о пользователе Яндекс.Фоток
  # создаем альбом для загрузки изображений и сохраняем его идентификатор
end open location


Теперь нам необходимо подправить Info.plist нашего приложения, добавив информацию о типе обрабатываемых им URL-ов.

Кликаем правой кнопкой на сохраненной приложении, выбираем Показать содержимое пакета и переходим в папку Contents. Редактируем файл Info.plist вашим любимым текстовым редактором и добавляем следующие строки:
<key>CFBundleURLTypes</key>
<array>
	<dict>
		<key>CFBundleURLName</key>
		<string>YPU OAuth Authorizer</string>
		<key>CFBundleURLSchemes</key>
		<array>
			<string>ypu-oauth</string>
		</array>
	</dict>
</array>


Итоговый вид содержимого должен стать примерно таким:



Не забудьте сохранить измененный файл!

Финальный шаг. Изменяем настройки нашего OAuth приложения на Яндекс.Фотках:



Реализация службы тоже довольно проста и подробно описана в указанной выше блогозаписи. Добавлю лишь свои пять копеек. Служба уже получает список выбранных файлов, поэтому нет нужды дополнительно запрашивать этот список у Finder'а.



Готовые службу, приложение-авторизатор и их установщик можно взять здесь. Протестировано на 10.7 и 10.9. Должно работать и на 10.8. Лицензия стандартная — WTFPL.
Теги:
Хабы:
Всего голосов 19: ↑16 и ↓3 +13
Просмотры 7.1K
Комментарии Комментарии 17