Найти - Пользователи
Полная версия: Закачка файла на dropbox (дам 30 wmz за решение)
Начало » Python для новичков » Закачка файла на dropbox (дам 30 wmz за решение)
1 2
Galvanize
Привет.
В общем, уткнулся в проблему - закачка файла на dropbox.com средствами python, не прибегая к использованию API. Очень нужно, но сам никак не могу к этому прийти. Бьюсь уже третий день :(((
Принимается любое решение реализуемое средствами python.

wmz и море благодарностей достанутся первому предоставившему рабочий код.
Спасибо!

Аккаунт для тестов:
login: jepalabor@solvemail.info
password: 123321
PanovSergey
Это что ли не работает?
sanodin
вообще есть готовые решения, например http://code.activestate.com/recipes/578030-dropbox-file-uploader-via-web-interface-using-pyth/
Galvanize
Оба варианта практически одно и тоже, и оба не работают :(
sanodin
Что значит не работают….?
Если у всех работают а у вас нет, то что пишет, какие ошибки?
sanodin
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)
проверил, есть картинка на тестовом акк, и директории создает
)))) смотрю, не я один проверил
здесь все просто, картинка в директории со скриптом и запускаете скрипт, без параметров…все
Galvanize
Странно. У меня всегда пишет Unable to find upload form.
sanodin
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!
wmz заносить на счет форума
Galvanize
wmz тут незачто вносить, т.к. решение не ваше. Я натыкался на эти скрипты, и все другие скрипты, которые используют механайз. У меня они почему-то не срабатывают. Пробовал даже отдельно механайзом “в ручную” заходить на акк и залить фал. Ничего не вышло.

Поставил вам по плюсу.
sanodin
Да на счет wmz никто особо не расчитывал, так в шутку говорилось, понимаю что скрипт не работает именно у вас, скажите какие версии пользуете, python, os?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB