Форум сайта python.su
0
Привет.
В общем, уткнулся в проблему - закачка файла на dropbox.com средствами python, не прибегая к использованию API. Очень нужно, но сам никак не могу к этому прийти. Бьюсь уже третий день :(((
Принимается любое решение реализуемое средствами python.
wmz и море благодарностей достанутся первому предоставившему рабочий код.
Спасибо!
Аккаунт для тестов:
login: jepalabor@solvemail.info
password: 123321
Отредактировано Galvanize (Март 23, 2014 06:59:06)
Офлайн
19
Офлайн
31
вообще есть готовые решения, например http://code.activestate.com/recipes/578030-dropbox-file-uploader-via-web-interface-using-pyth/
Офлайн
0
Оба варианта практически одно и тоже, и оба не работают :(
Офлайн
31
Что значит не работают….?
Если у всех работают а у вас нет, то что пишет, какие ошибки?
Офлайн
31
import mechanize import os import glob verbose = True def usage(): print ''' Upload file(s) to dropbox. dropbox.py file1.txt # upload to root folder dropbox.py dir:/Backups/2012 file1.txt # upload to custom folder dropbox.py dir:/Backups/2012 *.txt # upload by file mask dropbox.py dir:/Backups/2020 * # upload all files in current dir ''' def upload_files(local_files, remote_dir, email, password): """ Upload a local file to Dropbox """ # Fire up a browser using mechanize br = mechanize.Browser() br.set_handle_equiv(True) # br.set_handle_gzip(True) br.set_handle_redirect(True) br.set_handle_referer(True) br.set_handle_robots(False) # br.set_debug_http(True) # br.set_debug_responses(True) # br.set_debug_redirects(True) br.addheaders = [('User-agent', ' Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1018.0 Safari/535.19')] if verbose: print 'Opening login page...' # Browse to the login page r = br.open('https://www.dropbox.com/login') # just in case you need the html # html = r.read() # this shows a lot of info print r.info() if verbose: print br.title(), br.geturl() # Enter the username and password into the login form isLoginForm = lambda l: l.action == "https://www.dropbox.com/login" and l.method == "POST" try: if verbose: print 'selecting form...' br.select_form(predicate=isLoginForm) except: print("Unable to find login form."); exit(1); br['login_email'] = email br['login_password'] = password # Send the form if verbose: print 'submitting login form...' response = br.submit() # Add our file upload to the upload form once logged in isUploadForm = lambda u: u.action == "https://dl-web.dropbox.com/upload" and u.method == "POST" for local_file in local_files: try: br.select_form(predicate=isUploadForm) except: print("Unable to find upload form."); print("Make sure that your login information is correct."); exit(1); br.form.find_control("dest").readonly = False br.form.set_value(remote_dir, "dest") remote_file = os.path.basename(local_file) if (os.path.isfile(local_file)): br.form.add_file(open(local_file, "rb"), "", remote_file) # Submit the form with the file if verbose: print 'Uploading %s... to <<Dropbox>>:/%s/%s' % (local_file, remote_dir, remote_file), br.submit() if verbose: print 'Ok' print 'All completed Ok!' if __name__ == "__main__": from getpass import getpass email = 'jepalabor@solvemail.info' password = '123321'#getpass('kastaneda') # email = '' # password = '' # allow multiple local file names as input args # first arg with 'dir:' prefix is parsed as remote path remote_dir = '/Path/In/Dropbox/' if not remote_dir.startswith('/'): remote_dir = '/' + remote_dir if verbose: print 'Using remote_dir=', remote_dir local_files = ['kartinka.jpg'] prepared_local_files = [] for local_file in local_files: # explode globs if '*' in local_file: prepared_local_files += glob.glob(local_file) else: prepared_local_files.append(local_file) if not len(prepared_local_files): usage() sys.exit(2) upload_files(prepared_local_files, remote_dir, email, password)
Отредактировано sanodin (Март 23, 2014 16:22:06)
Офлайн
0
Странно. У меня всегда пишет Unable to find upload form.
Офлайн
31
Using remote_dir= /Path/In/Dropbox/ Opening login page... Server: nginx Date: Sun, 23 Mar 2014 14:26:28 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: close set-cookie: locale=en; expires=Fri, 22 Mar 2019 14:26:28 GMT; Path=/ set-cookie: gvc=Mzc5MTgxNzQ2NDc4NDQxNzAwNjE0MzY5MTgxOTM1ODQwODM5NjQ%3D; expires=Fri, 22 Mar 2019 14:26:28 GMT; Path=/; httponly set-cookie: t=0VCG54_7237xb8Y_qHSroRld; Domain=dropbox.com; expires=Tue, 22 Apr 2014 14:26:28 GMT; Path=/; secure; httponly strict-transport-security: max-age=2592000; includeSubDomains x-server-response-time: 58 x-dropbox-request-id: e5e3556fcef9d5d0bfec0f8671149a30 pragma: no-cache cache-control: no-cache x-dropbox-http-protocol: None x-frame-options: SAMEORIGIN X-RequestId: 22706061cbee02dd22292bd8e05dc900 content-type: text/html; charset=UTF-8 Dropbox - Sign in https://www.dropbox.com/login selecting form... submitting login form... Uploading kartinka.jpg... to <<Dropbox>>://Path/In/Dropbox//kartinka.jpg Ok All completed Ok!
Офлайн
0
wmz тут незачто вносить, т.к. решение не ваше. Я натыкался на эти скрипты, и все другие скрипты, которые используют механайз. У меня они почему-то не срабатывают. Пробовал даже отдельно механайзом “в ручную” заходить на акк и залить фал. Ничего не вышло.
Поставил вам по плюсу.
Офлайн
31
Да на счет wmz никто особо не расчитывал, так в шутку говорилось, понимаю что скрипт не работает именно у вас, скажите какие версии пользуете, python, os?
Офлайн