Page 2 of 7 FirstFirst 1234 ... LastLast
Results 16 to 30 of 103

Thread: Монтирование облачного диска (DropBox, Яндекс.Диск, Box.com, GoogleDrive)

  1. #16
    Идея с DropBox очень полезна, с торрен качалкой для меня не актуально, а вот как резервная копия TrueCrypt образа лежащего в каталоге DropBox очень даже актуальна.
    Из реализуемой схемы не нравится только одно - необходимость регулярно проверять наличие файла и сверка "версионности".
    Позволяет ли API держать постоянный коннект и получать события о изменениях? На питоне не пишу а вот на PHP мог бы попробовать демона реализовать.

  2. #17
    Quote Originally Posted by Spartach View Post
    Из реализуемой схемы не нравится только одно - необходимость регулярно проверять наличие файла и сверка
    "версионности".
    Я бы предположил, что это скорее плюс, чем минус. У нас через API есть возможность скачивания любой ревизии файла, в том числе удалённого, так как хранилище Dropbox очень схоже с системой контроля версий как, например, SVN. Загляните в SDK: если эта возможность "мешает", то можно просто её не использовать. Для поиска изменений файлов в облаке есть возможность получения порции метаданных, из которой можно извлечь всю необходимую инфорацию.
    Quote Originally Posted by Spartach View Post
    Позволяет ли API держать постоянный коннект и получать события о изменениях? На питоне не пишу а вот на PHP мог бы попробовать демона реализовать.
    • насколько я понял, нет. Это http-запрос\ответ.
    • число обращений в сутки для одного токена ограничено пятью тысячами,
    • официального PHP SDK нет, но есть неофициальный,
    • возможности SDK ограничены пересылкой файлов до 125Мб, поэтому файлы бэкапов\образов truecrypt придётся дробить.
    Last edited by ryzhov_al; 28-02-2012 at 14:51.

  3. #18
    Да, сразу бросается в глаза 2 проблемы:
    1. На роутере лежит актуальный образ TC размером допустим 3 Гб, фиксируем изменение образа в каталоге ВropBox, не качать же все 3 гига заново, нужна только бинарная разница...
    2. ограничение по 125 Мб тоже немного портят картину...

  4. #19
    Обновил пакет python-dropbox в связи с выходом новой версией Dropbox Python API v1.4. Среди новшеств API - возможность вычисления бинарной разницы между локальными файлами и файлами в облаке и возможность копировать файлы в облаке из одного аккаунта в другой, не прибегая к скачиванию.

    Приведённые в теме скрипты остаются работоспособными, проверил. Кроме того, в связи с апдейтом python до v2.7.3rc2 исчез баг, мешающий работать с CLI-клиентом DropBox, входящим в качестве примера в официальный API.
    Last edited by ryzhov_al; 05-04-2012 at 12:49.

  5. #20
    Добрый день, хочу прикрутить скрипт отправки файлов на dropbox к motion, но споткнулся на конфигурации скрипта, на этом пункте:
    Quote Originally Posted by ryzhov_al View Post
    [B]... Запустите скрипт с ключом "-s":
    Code:
    $ uploadDropboxScript.py -s
    В ответ скрипт выдаст URL, который необходимо скопировать в адресную строку браузера и пройти по нему...
    У меня выдает следующие:
    Code:
    [admin@WL-20CF30CE3F64 root]$ uploadDropboxScript.py -s
    Traceback (most recent call last):
      File "/opt/bin/uploadDropboxScript.py", line 10, in <module>
        from dropbox import client, rest, session
      File "/opt/lib/python2.7/site-packages/dropbox/__init__.py", line 1, in <module>
        import client, rest, session
      File "/opt/lib/python2.7/site-packages/dropbox/client.py", line 8, in <module>
        import simplejson as json
    ImportError: No module named simplejson
    В phyton-е ничего не смыслю, в чем может быть проблема?

    P.S.
    Установленные пакеты:
    Code:
    [admin@WL-20CF30CE3F64 root]$ opkg list-installed
    alsa-lib - 1.0.24.1-1
    coreutils - 8.8-1
    distribute - 0.6.21-1
    ffmpeg - 0.8.7-1
    ffprobe - 0.8.7-1
    glib2 - 2.26.1-2
    ldconfig - -104
    libbz2 - 1.0.6-1
    libc - -104
    libffi - 3.0.9-1
    libffmpeg-full - 0.8.7-1
    libgcc - -104
    libiconv-full - 1.11.1-1
    libintl-full - 0.18.1.1-1
    libjpeg - 6b-1
    libncurses - 5.7-5
    libopenssl - 1.0.1-1
    libpthread - -104
    librt - -104
    libslang2 - 2.2.3-1
    libstdcpp - -104
    mc - 4.8.2-1
    motion - 20110826-051001-2
    nano - 2.2.6-1
    openssl-util - 1.0.1-1
    python - 2.7.3rc2-2
    python-cjson - 1.0.5-1
    python-dropbox - 1.4-1
    python-mini - 2.7.3rc2-2
    python-oauth - 1.0.1-1
    python-openssl - 2.7.3rc2-2
    simplejson - 2.2.1-1
    terminfo - 5.7-5
    uclibc-opt - 0.9.32-1
    zlib - 1.2.5-1
    [admin@WL-20CF30CE3F64 root]$

  6. #21

    Примите к сведению

    Quote Originally Posted by lohmat View Post
    в чем может быть проблема?
    В связи с обновлением python в рерпозитории OpenWRT до версии 2.7.3rc2 необходима переустановка всех пакетов с модулями python.

    Это единственный корректный способ вернуть в строй pyload, python-dropbox и другие программы, написанные на python.

  7. #22
    Quote Originally Posted by ryzhov_al View Post
    В связи с обновлением python в рерпозитории OpenWRT до версии 2.7.3rc2 необходима переустановка всех пакетов с модулями python.
    Да, удалил питона полностью с зависимостями(--force-reinstall не помогал), установил снова и заработало, спасибо.

    ryzhov_al, еще вопрос по работе скрипта uploadDropboxScript.py: как загружать файлы не в корень, а в определенную папку?
    Last edited by Omega; 21-05-2012 at 22:34. Reason: fixed

  8. #23
    Quote Originally Posted by lohmat View Post
    ryzhov_al, еще вопрос по работе скрипта uploadDropboxScript.py: как загружать файлы не в корень, а в определенную папку?
    Достаточно просто, в Tutorial'е всё расписано с примерами. Только нужны базовые знания по Python.^)

    Скрипт uploadDropboxScript.py написан ровно по шагам этого Tutorial'а.

  9. #24
    Quote Originally Posted by ryzhov_al View Post
    Достаточно просто, в Tutorial'е всё расписано с примерами. Только нужны базовые знания по Python.^)
    Базовых знаний python-а нету Но, немного погуглив, доработал Ваш скрипт(делал по аналогии):
    Code:
    #!/opt/bin/python
    import cmd
    import locale
    import os
    import pprint
    import shlex
    import sys
    import time
    
    from dropbox import client, rest, session
    
    APP_KEY = 'xxx'
    APP_SECRET = 'yyy'
    ACCESS_TYPE = 'dropbox'
    TOKEN_FILE = "/opt/var/token_store_dropbox.txt"
    
    
    
    class StoredSession(session.DropboxSession):
        """a wrapper around DropboxSession that stores a token to a file on disk"""
    
        def __init__(self, consumer_key, consumer_secret, access_type,tokenFile, locale=None):
    	self.tokenFile = tokenFile
    	super(StoredSession,self).__init__(consumer_key, consumer_secret, access_type, locale);
    
    
        def load_creds(self):
            try:
                stored_creds = open(self.tokenFile).read()
                self.set_token(*stored_creds.split('|'))
    	    return True
            except IOError:
    	    return False
    
        def write_creds(self, token):
            f = open(self.tokenFile, 'w+')
            f.write("|".join([token.key, token.secret]))
            f.close()
    
        def delete_creds(self):
            os.unlink(self.tokenFile)
    
        def link(self):
            request_token = self.obtain_request_token()
            url = self.build_authorize_url(request_token)
            print "url:", url
            print "Please authorize in the browser. After you're done, press enter."
            raw_input()
    
            self.obtain_access_token(request_token)
            self.write_creds(self.token)
    
        def unlink(self):
            self.delete_creds()
            session.DropboxSession.unlink(self)
    
    
    def main():
        if APP_KEY == '' or APP_SECRET == '':
            exit("You need to set a APP_KEY and APP_SECRET!")
    
        sess = StoredSession(APP_KEY, APP_SECRET, access_type=ACCESS_TYPE, tokenFile=TOKEN_FILE)
    
        #check command line arguments
        nextIsInput = False
        nextIsDir = False
        from_file_path = None
        dir_name = None
        for arg in sys.argv: 
    	if arg == "-s":
                 #setup mode
                 sess.link()
    	     exit("script is now ready to go")
    	     break
    	elif arg == "-p":
    	     nextIsDir = True
    	elif nextIsDir:
    	     dir_name = arg
    	     nextIsDir = False
            elif arg == "-f":
    	     #next one is the input file
    	     nextIsInput = True
    	elif nextIsInput:
    	     from_file_path = arg
    	     nextIsInput = False
        
        if not from_file_path:
            exit("no arguments given")
        
        api_client = client.DropboxClient(sess)
        if not sess.load_creds():
    	exit("You need to run this script in setup mode (-s option) before you can use it")
    
    
    
        from_file_path.strip()
        from_file = open(os.path.expanduser(from_file_path))
        from_file_parts = from_file.name.split("/")
        if not dir_name:
    	 api_client.put_file("/" + from_file_parts[len(from_file_parts)-1], from_file)
        else:
             dir_name = dir_name.strip()
    	 api_client.put_file("/" + dir_name +"/" + from_file_parts[len(from_file_parts)-1], from_file)
    
    if __name__ == '__main__':
        main()
    Зеленым отмечены мои вставки. Теперь ключом -p задается директория в dropbox, например:
    uploadDropboxScriptF.py -f file -p dir
    Если директории dir нет, то она создается.
    Вроде, работает. =)
    Attached Files Attached Files
    Last edited by lohmat; 06-04-2012 at 20:47. Reason: орфография :(

  10. #25

    Работа с Яндекс.Диском

    С сегодняшнего дня в новом репозитории доступны пакеты davfs2 и wdfs c аналогичным функционалом: они позволяют смонтировать на роутере сетевой ресурс WebDAV.

    Например, для того чтобы облачное хранилище Яндекс.Диск появилось на роутере как локальный диск всего лишь необходимо набрать:
    Code:
    $ opkg install davfs2
    $ mkdir /tmp/yandex_disk
    $ mount -t davfs https://webdav.yandex.ru /tmp/yandex_disk
    После чего Яндекс.Диск будет вам доступен как локальная папка. А дальше всё ограничено лишь вашей фантазией, например, можно организовать:

    • забор роутером *.torrent-файлов и выкладывание скаченного контента в Яндекс.Диск,
    • синхронизацию облаков Яндекс.Диск и Dropbox,
    • бэкап файлов на Я.Диск, благо размер пересылаемых файлов ограничен лишь объёмом, выделенным вам на Яндекс.Диске,
    • устраивание из Я.Диска SAMBA-шары для совместной командной работы,
    • устраивание из Я.Диска папки с медиаконтентом для плеера. Например, будете удалённо подкладывать новые скачанные мультики своему чаду, находясь на работе^)
    • you name it.

    Здесь приведён пример того, как обойти запрос на принятие серверного сертификата для автоматизации монтирования.

    Если у вас пока нет приглашения на тестирование Яндекс.Диска, то можно попробовать работу приложений с другими облаками, имеющими интерфейс WebDAV. Мне, например, удалось подключиться к Box.com. Хоть они и пишут что WebDAV у них доступен только с iOS, но файлы их облака читаются нормально.
    Upd. А вот и статья на Хабре про использование box.com с помощью davfs2.

    wdfs - легковесная утилита, состоящая из одного бинарника. В работе она по минимуму использует спецификацию WebDAV. С одной стороны, это позволяет общаться с любыми WedDAV-серверами, даже сильно капризными, как модуль WebDAV в lighttpd, не боясь вызвать ошибок о несуществующих расширениях стандарта, но с другой стороны набор её фич ограничен. Например, AFAIK, она не возвращает объём свободного места на подключенном хранилище.

    davfs2 - более развесистая и тюнингуемая, с конфигурационными файлами и пр. Разработка wdfs остановилась в 2007-м году, а davfs2 развивается до сих пор. В репозитории версия от «18» марта 2012г.

    Обе утилиты требуют для работы модуль fuse, соответствующий версии вашей прошивки.


    Проверил работу davfs2 со следующими облачными хранилищами:
    Сервис Халявное место Пример монтирования на роутере
    Яндекс.Диск 10Гб $ mount -t davfs https://webdav.yandex.ru /tmp/yandex_disk
    4shared.com 15Гб $ mount -t davfs https://webdav.4shared.com/ /tmp/4shared
    Box.com 50Гб (промо) $ mount -t davfs https://www.box.com/dav /tmp/box.com
    Google Drive 5Гб Только через сторонний сервис, на примере DAV-Pocket:
    $ mount -t davfs https://dav-pocket.appspot.com/docso /tmp/gdrive/
    Last edited by ryzhov_al; 21-05-2012 at 09:03. Reason: За идею спасибо моему хорошему знакомому, Андрею Пахоменкову

  11. #26
    Join Date
    Oct 2009
    Posts
    529
    Blog Entries
    1
    ryzhov_al, спасибо за davfs2
    работает как должно, но хочу поделиться некоторыми наблюдениями насчет
    Quote Originally Posted by ryzhov_al View Post
    устраивание из Я.Диска SAMBA-шары для совместной командной работы
    тщательно я еще не тестировал, но есть признаки проблем
    1) обращение через SMB-шару к точке монтирования davfs может внезапно приводить к запросу содержимого файла (проводник или Total Commander, к примеру, решат показать превью файлов или иконки отобразить)
    2) закачка тяжелого файла в таких условиях и отдача его одновременно по самбе уже сильно напрягает рутер
    3) davfs до кучи большой файл начинает кешировать (сейчас всё применительно к конфигу по-умолчанию). опять-таки пошла запись на диск.
    4) кэш по-умолчанию лежит в /opt/var/cache/ - если /opt на флешке, может банально не хватить емкости.

    возможно я попусту паникую, но пока буду осторожно пробовать подобные сценарии использования.

  12. #27
    Quote Originally Posted by MercuryV View Post
    ryzhov_al, спасибо за davfs2
    работает как должно, но хочу поделиться некоторыми наблюдениями насчет
    Quote Originally Posted by ryzhov_al View Post
    устраивание из Я.Диска SAMBA-шары для совместной командной работы
    тщательно я еще не тестировал, но есть признаки проблем
    Это уже не актуально. В Windows XP и выше Яндекс.Диск можно смонтировать как сетевую шару средствами ОС:

    Правда замеры скорости работы показывают плачевные 0,6Мб/c.

    PS Оказывается в Википедии есть страничка с характеристиками облачных хранилищ, можно посмотреть там какие из них работают через WebDAV.
    Last edited by ryzhov_al; 18-05-2012 at 10:22.

  13. #28

    Microsoft SkyDrive на роутере

    Коллеги, есть информация, что MS SkyDrive работает через WebDAV. У меня ресурсы Microsoft на роутере занесены в чёрный список, поэтому проверить прошу вас.

    1) Перейдите к SkyDrive и откройте в облачном хранилище любую папку, например, «Документы». URL в строке браузера будет иметь вид:
    Code:
    https://skydrive.live.com/#cid=xxxxxxxxxxxxxxxx&id=yyyyyyyyyyyyyyy!zzz
    где xxxxxxxxxxxxxxxx - ваш персональный cid. Он нам понадобится на следующем шаге.

    2) В роутере смонтируйте смонтируйте SkyDrive как WebDAV ресурс:
    Code:
    $ mkdir /tmp/skydrive
    $ mount -t davfs https://docs.live.com/xxxxxxxxxxxxxxxx /tmp/skydrive
    и после приглашения введите свои учётные данные Windows Live ID, например vasya@hotmail.com, P@ssw0rd.


    ЗЫ Неплохую сводную табличку по возможностям популярных облачных хранилищ для простых смертных можно посмотреть здесь.
    Last edited by ryzhov_al; 26-04-2012 at 08:51.

  14. #29
    Join Date
    Oct 2009
    Posts
    529
    Blog Entries
    1

    Unhappy

    Quote Originally Posted by ryzhov_al View Post
    Коллеги, есть информация, что MS SkyDrive работает через WebDAV
    AFAIK, информация устарела. Когда-то ранее, факт, описанный способ работал. Последние полгода уже нет.
    Специально попробовал еще раз сейчас. После логина наблюдаем:
    Code:
    mount.davfs: connection timed out two times;
    trying one last time
    mount.davfs: server temporarily unreachable;
    mounting anyway

  15. #30
    Quote Originally Posted by MercuryV View Post
    Специально попробовал еще раз сейчас. После логина наблюдаем:
    Да, получил аналогичный результат, но списал на то, что у меня windows.com и microsoft.com в чёрном списке.

    Значит, не работает, отбой.

    Интересно, а как сетевую папку SkyDrive тоже больше не смонтировать?
    Если так, то работать со SkyDrive на роутере можно только POST-запросами, но мне это кажется бесперспективным.
    Last edited by ryzhov_al; 27-04-2012 at 08:27. Reason: пунктуация

Page 2 of 7 FirstFirst 1234 ... LastLast

Similar Threads

  1. Монтирование NFS
    By CraFT in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 337
    Last Post: 17-01-2014, 14:31
  2. Вопрос по проверке диска (e2fsck)
    By VadimVB in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 67
    Last Post: 29-04-2012, 11:21

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •