Драйвер для Media Source для работы с Яндекс.Диск
1 500
Рад представить вам на суд весьма полезное, по моему мнению, дополнение для MODX Revolution.
Всем известно, что для доступак файлам в MODX Revo используются так называемые медиа ресурсы, предоставляющие доступ к файлам размещенным как в файловой системе так и на других сторонних сервисах. Из коробки MODX умеет работать только с обычными файлами на диске и файлами в Amazon S3. Но ничего не мешает написать собственный провайдер, предоставляющий доступ к любому другому сервису.
Где-то год назад разработчик из Гонконга сделал подобный провайдер для работы с Dropbox, Марк Хамстра писал об этом. Именно тогда у меня появилась желание реализовать подобный провайдер для работы с Яндекс.Диском, но за год продвинуться сильно не удалось из-за особенностей работы с протоколом webdav и отсутствием нормальных библиотек на php для работы с этим протоколом. Но перед новым годом наткнулся на официальный SDK для работы с сервисами Яндекса от компании NIX Solutions из Харькова и решил возобновить работу над проектом.
И вот буквально вчера я закончил версию 0.5.0-alpha. В ней реализованы базовые функции для работы с файлами в Яндекс.Диске, а именно: создание, удаление, перемещение файлов и каталогов, создание и редактирование текстовых файлов из MODX. Генерация превью выполняется на стороне Яндекса, но для ускорения работы сгенерированные превью кешируются в самом MODX.
У альфа-версии скорее всего найдется еще куча багов и проблем, но у самого у меня не хватит ресурсов протестировать пакет в различных ситуациях. Поэтому я прошу вашей помощи в тестировании. Ниже инструкции, как установить, настроить и использовать компонент.
Ну и для скорейшего выпуска стабильной версии объявляется сбор денег (5000 рублей) для повышения мотивации меня, как разработчика.
Webmoney
Z203304231268
R140312479061
ЯД:
41001878021446
Уже собрано 1500
На этой неделе начну активно исправлять описанные баги.
Использование Yandex Disk Media Source
В ПЕРВУЮ ОЧЕРЕДЬ СДЕЛАЙТЕ БЕКАП СВОИХ ДАННЫХ НА ДИСКЕ. ЕЩЕ РАЗ ОБРАЩАЮ ВНИМАНИЕ, СДЕЛАЙТЕ БЕКАП!
Работает только на PHP 5.4+
Для начала нужно скачать сам пакет и загрузить его в папку
После установки нужно создать новый медиа-ресурс, где в качестве типа выбрать Яндекс.Диск.

После создания необходимо кликнуть правой клавишей мыши и нажать «Редактировать ресурс», где в настройках нужно прописать токен для вашего приложения и не забыть сохранить изменения.


Как получить токен
Задача не самая простая на первый взгляд, но пока нет идей по ее улучшению. В целом все написано в инструкции для разработчиков самого Диска, но опишу по шагам порядок действий:
1. Если нет аккаунта в Яндексе, то заводим его, тут все понятно
2. Идем сюда oauth.yandex.ru/client/new и создаем приложение для работы с Диском
3. Название и описание пишете какое душе угодно
4. В правах выбираем Яндекс.Диск и в раскрывшемся списке отмечаем единственную галку «Доступ к Яндекс.Диску для приложений»
5. В самом низу отмечаем галку «Клиент для разработки» (это важно)
6. Сохраняем приложение
7. Составляем ссылку вида oauth.yandex.ru/authorize?response_type=token&client_id=<client_id>, где заменяем <client_id> на id вашего приложения и переходим по ней.
8. Нажимаем кнопку «Подтвердить»
9. Находим в адресной строке браузера параметр access_token, именно он нам и нужен
10. Вставляем его в параметр token в настройках медиа-ресурса.
Куда писать о проблемах?
Код пакета размещается на GitHub, соответственно все сообщения об ошибках лучше писать туда в issues, либо по почте ivan@klimchuk.com, или если совсем хочется живого общения — в скайп Alroniks.
О том, как устроены сами провайдеры и как велась разработка, будет отдельная заметка позже.
Всем известно, что для доступак файлам в MODX Revo используются так называемые медиа ресурсы, предоставляющие доступ к файлам размещенным как в файловой системе так и на других сторонних сервисах. Из коробки MODX умеет работать только с обычными файлами на диске и файлами в Amazon S3. Но ничего не мешает написать собственный провайдер, предоставляющий доступ к любому другому сервису.
Где-то год назад разработчик из Гонконга сделал подобный провайдер для работы с Dropbox, Марк Хамстра писал об этом. Именно тогда у меня появилась желание реализовать подобный провайдер для работы с Яндекс.Диском, но за год продвинуться сильно не удалось из-за особенностей работы с протоколом webdav и отсутствием нормальных библиотек на php для работы с этим протоколом. Но перед новым годом наткнулся на официальный SDK для работы с сервисами Яндекса от компании NIX Solutions из Харькова и решил возобновить работу над проектом.
И вот буквально вчера я закончил версию 0.5.0-alpha. В ней реализованы базовые функции для работы с файлами в Яндекс.Диске, а именно: создание, удаление, перемещение файлов и каталогов, создание и редактирование текстовых файлов из MODX. Генерация превью выполняется на стороне Яндекса, но для ускорения работы сгенерированные превью кешируются в самом MODX.
У альфа-версии скорее всего найдется еще куча багов и проблем, но у самого у меня не хватит ресурсов протестировать пакет в различных ситуациях. Поэтому я прошу вашей помощи в тестировании. Ниже инструкции, как установить, настроить и использовать компонент.
Ну и для скорейшего выпуска стабильной версии объявляется сбор денег (5000 рублей) для повышения мотивации меня, как разработчика.
Webmoney
Z203304231268
R140312479061
ЯД:
41001878021446
Уже собрано 1500
На этой неделе начну активно исправлять описанные баги.
Использование Yandex Disk Media Source
В ПЕРВУЮ ОЧЕРЕДЬ СДЕЛАЙТЕ БЕКАП СВОИХ ДАННЫХ НА ДИСКЕ. ЕЩЕ РАЗ ОБРАЩАЮ ВНИМАНИЕ, СДЕЛАЙТЕ БЕКАП!
Работает только на PHP 5.4+
Для начала нужно скачать сам пакет и загрузить его в папку
/core/packagesЗатем в управлении пакетами нажать кнопку «Искать пакеты локально» и установить появившийся yandexdisk пакет. В версии 2.2.14 есть возможность загрузить пакет прямо из раздела управлениями пакетами. После установки нужно создать новый медиа-ресурс, где в качестве типа выбрать Яндекс.Диск.

После создания необходимо кликнуть правой клавишей мыши и нажать «Редактировать ресурс», где в настройках нужно прописать токен для вашего приложения и не забыть сохранить изменения.


Как получить токен
Задача не самая простая на первый взгляд, но пока нет идей по ее улучшению. В целом все написано в инструкции для разработчиков самого Диска, но опишу по шагам порядок действий:
1. Если нет аккаунта в Яндексе, то заводим его, тут все понятно
2. Идем сюда oauth.yandex.ru/client/new и создаем приложение для работы с Диском
3. Название и описание пишете какое душе угодно
4. В правах выбираем Яндекс.Диск и в раскрывшемся списке отмечаем единственную галку «Доступ к Яндекс.Диску для приложений»
5. В самом низу отмечаем галку «Клиент для разработки» (это важно)
6. Сохраняем приложение
7. Составляем ссылку вида oauth.yandex.ru/authorize?response_type=token&client_id=<client_id>, где заменяем <client_id> на id вашего приложения и переходим по ней.
8. Нажимаем кнопку «Подтвердить»
9. Находим в адресной строке браузера параметр access_token, именно он нам и нужен
10. Вставляем его в параметр token в настройках медиа-ресурса.
Куда писать о проблемах?
Код пакета размещается на GitHub, соответственно все сообщения об ошибках лучше писать туда в issues, либо по почте ivan@klimchuk.com, или если совсем хочется живого общения — в скайп Alroniks.
О том, как устроены сами провайдеры и как велась разработка, будет отдельная заметка позже.
Комментарии: 36
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
А так — очень даже польза, могу влить денег, но чуть позже — вывел вчера все виртуальные деньги на карту.
Я занимался его разработкой и насчет токена думаю можно применить ту же схему: если указаны API key и API secret, то в описании параметра Auth token выводится ссылка на авторизацию. После перехода по ней и подтверждения пользователь возвращается обратно на страницу настройки Media Source и токен автоматически сохраняется в настройки.
Поскольку для Яндекс redirect_url должен задаваться в настройках приложения, можно на странице редактирования Media Source выводить ссылку на текущую страницу, отметив что ее необходимо указать в настройках приложения. А в остальном использовать тот же принцип для авторизации пользователя.
У меня вопрос — почему код не выложен на github? Там есть пару спорных мест и не все части реализованы, например нет создания и обновления файла из админки MODX. Можно было бы доработать. Брать код и переписывать под своим именем не комильфо, а пуллриквест заслал бы.
Добавлю еще пару причин пользоваться подобными файлохранилищами.
Распределенная нагрузка и меньшая стоимость дополнительного места.
посмотрел лог приложения на яндекс, обращений не было…
в чем дело может быть?
p.s. PHP 5.4.19
В любом случае, у тебя всё понятно написано:
и вообще почему он за пределы папки www смотрит?
Modx находится по пути /var/www/reg33/www/
это же должно снять ограничение?
но тогда получил
значит дело в правах точно…
че ж ему зараза не нравится
В моих конфигах, например, указано так:
Если и у тебя так же, то это косяк SDK, что он не смотрит в настройку.
Ну а open_basedir запрещает обращаться к любым файлам выше указанной директории. Защита на случай взлома или других гадостей.
я просто пока прописал так
ну и соответственно он распаковывает файлы во временной директории /tmp/
ругаться перестал, все нормально…
p.s. но по сути я его выпустил выше, в плане защиты не есть хорошо да?
Осталось понять, это косяу конфигурации сайта, или используемой библиотеки для работы с ЯД?
Можешь посмотреть как сделано у меня в драйвере для Swift github.com/evd/modx-swift/blob/master/_build/build.transport.php#L54
Это ж при показе картинки её нужно выгружать с сервиса и кэшировать у себя, а потом показывать. При очистке кэша — повторять. В чём экономия, где скорость?
Имеет смысл использовать только Amazon S3, Selectel Cloud Storage или подобные решения. Загрузил файлы, сохранил прямые ссылки и народ их грузит по CDN быстро-быстро, а ты еще место на сайте экономишь.
Любые другие удалённые источники мне непонятны. Только приватные документы владельца сайта хранить, что ли?