Прототип клиента Яндекс.Диска для Linux и открытие API

    На днях Яндекс открыл документацию API Яндекс.Диска, и я хочу рассказать о примере программы, созданной на базе этого API.

    У Яндекс.Диска есть отдельные клиентские программы для ОС Windows и Mac OS X, которые поддерживают локальную копию файлового хранилища. Это невероятно удобно! Надо отдать должное Дропбоксу, который, кажется, первым предложил именно такой способ использования облачного файлового хранилища.

    Для Линукса клиента нет, но зато Яндекс.Диск поддерживает доступ к файлам по открытому и отлично себя зарекомендовавшему за многие годы протоколу WebDAV. Поддержка WebDAV в ядре Линукса позволила относительно малой кровью создать прототип синхронизирующего клиента Яндекс.Диска.

    Текущая версия доступна на гитхабе — это примерно 130 строк кода на Перле, а здесь я очень кратко расскажу, как она устроена и работает.

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

    В домашнем каталоге пользователя появляется подкаталог YandexDisk, который содержит локальную копию файлов из Диска, а также скрытый каталог .yadisk-davfs, который является точкой монтирования для файловой системы davfs2 и предоставляет файловый доступ к реальным данным в облаке Яндекса. Задача синхронизатора — поддерживать эти два каталога в идентичном виде, подхватывая изменения в каждом из них.

    Эту задачу yadisk-sync решает с помощью трёх важных инструментов:

    • Во-первых, для слежения за изменениями в локальной копии используется механизм inotify, доступный во всех современных ядрах.
    • Во-вторых, для получения изменений из облака используется подписка на XMPP-сообщения. Эта часть протокола Яндекс.Диска пока не документирована.
    • В-третьих, для синхронизации двух каталогов используется известный пакет unison. Он-то и выполняет львиную долю работы по синхронизации.

    Любые изменения — локальные или удалённые — приводят к запуску unison, который, используя rsync-подобный протокол, а также сохранённое во время предыдущих запусков знание о состоянии каталогов, копирует, удаляет и редактирует файлы так, чтобы оба каталога содержали одно и то же.

    Сама программа yadisk-sync.pl не демонизируется для упрощения отладки, а для установки и конфигурирования требует выполнения инструкций из файла «README.txt». Тестировалось это всё только на Ubuntu 11.10 и Mint 12.

    Попробуйте, возможно кого-то этот прототип вдохновит на какие-то интересные разработки. Или используйте API Диска для создания совершенно новых программ и приложений.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 22

      –3
      Использую DavFS как раз по той причине, что у меня ничего не хранится. Было бы хорошо, если бы там было гигов 100, тогда кинул туда архив фоток и нет проблем с диском на нетбуке, когда надо можно посмотреть.
        0
        Для этих целей яндекс фотки подходят в принципе. Только я не нашёл работающего скрипта/программы, чтобы хотя бы нормально залить, с учётом папок, через api и чтобы не перл :). На гитхабе на python нашёл, но там fuse не доделанный только на скачивание. Доделать сил не хватило, по идее должно работать, но api возвращает ошибку и причину проблемы найти не удалось :(
        • UFO just landed and posted this here
        0
        Ubuntu 10.04
        Работает, но как-то странно :)
        При запуске синхронизирует нормально, по ходу работы — то да, то нет, не могу точно воспроизвести.
        Как бы когда делаешь что-то в веб-интерфейсе (создание-удаление), это же происходит на диске. Когда что-то делаешь локально, в веб-интерфейсе ничего не происходит, пока в нём не сделаешь что-то другое.
        Например:
        1. Удаляем локально файл. В веб-интерфейсе он остаётся
        2. Удаляем в веб-интерфейсе другой файл, второй удаляется локально, а в веб-интерфейсе — оба.

        Как-то так.
          +1
          Интересно. А как локально удаляете файлы? Попробуйте это сделать командой rm из командрой строки — просто для теста.
            0
            Все действия делал через наутилус.
              +1
              Да, нашёл. Обработчик изменений локальной папки не подхватывает ситуацию, когда файл не удаляют, а перемещают в другую папку, которая находится за пределами ~/YandexDisk. Наутилус перемещает в Корзину.

              Починю.
        • UFO just landed and posted this here
            0
            В поле user — важ юзернэйм на яндексе, в folder — путь к пустой папке, куда хотите примонтировать диск.
            Пароль видимо будет запрошен в процессе коннекта.
            • UFO just landed and posted this here
                0
                lmgtfy.com/?q=Yandex+disk+KDE
                Первая ссылка говорит, что нужно поставить галочку Use encryption и в поле сервер вбивать webdav.yandex.ru без https и слешей
                • UFO just landed and posted this here
            0
            Написать для андроида клиент иль уже есть?
              +1
              Клиент Яндекс.Диска для Андроида встроен в приложение Яндекс.Почта.
              0
              Как я понимаю, скрипт не использует API вообще?
              Если у кого-то есть родной Windows Яндекс диск, можете посмотреть tcpdump. Он тоже работает без апи, путем синхронизации двух папок?
                0
                Да, скрипт всю работу с API перекладывает на davfs2. Самостоятельно использует только XMPP.
                –5
                — Вот такой телефон. Два экрана. Это пока прототип.
                — Прототип?
                — Да, прототип.
                — Наш продукт?
                — Да, наш продукт.
                — А выпускать у нас будете?
                — Нет, но это наш продукт. Прототип.
                — Прототип?
                — Да, прототип.
                — Наш продукт?
                — Да, наш продукт, но выпускаться будет на Тайване пока.
                — Но ведь это наш продукт?
                — Да, прототип пока. Два экрана будет.
                — Прототип?
                — Да, прототип
                  0
                  Заметил, что на davfs копии читаемых/записываемых файлов хранятся в ~/.davfs2/cache/<папка для yandex.disk>. Как бы настроить очищение кеша после отмонтирования? Монтирую через mount (от юзера) и сточку в /etc/fstab.
                    0
                    savannah.nongnu.org/support/?107864 — разработчики говорят, что не видят в этом смысла.
                      0
                      Печально :(
                      Вроде как логичная операция возможная к логичной автоматизации…
                    0
                    кто то пользуется webdav?

                    у меня при попытке синхронизации флешки через

                    rsync -avx /локальная директория /точка монтирования webdav.yandex.ru

                    работает крайне нестабильно — в начале процесса, через пару минут ошибки failed: Permission denied (13) и rsync разрыв соединения, успевает залиться несколько десятков документов и пару папок

                    Déjà Dup файлы не загружает, обрывается соединение

                    сейчас стоит свежая Убунта 12.04
                      0
                      Аналогично на маке с rsync. cp копирует стабильно почему то.

                    Only users with full accounts can post comments. Log in, please.