Подтвердить что ты не робот

Загрузить файл в мой Dropbox из python script

Я хочу автоматически загрузить файл из моего скрипта Python в мою учетную запись Dropbox. Я не могу найти в любом случае, чтобы сделать это только с пользователем/пасс. Все, что я вижу в Dropbox SDK, связано с приложением, взаимодействующим с пользователем. Я просто хочу сделать что-то вроде этого:

https://api-content.dropbox.com/1/files_put//? user = me & pass = blah

4b9b3361

Ответ 1

Важное примечание: этот ответ устарел, так как dropbox использует v2 API.
См. Ответ @SparkAndShine для решения текущей версии API

Спасибо @smarx за ответ выше! Я просто хотел уточнить, кто еще пытается это сделать.

  1. Убедитесь, что вы сначала установили модуль dropbox, pip install dropbox.

  2. Создайте приложение под своей учетной записью Dropbox в "Консоли приложений". (https://www.dropbox.com/developers/apps)

  3. Просто для записи я создал свое приложение со следующим:

    а. Тип приложения как "Dropbox API APP".

    б. Тип доступа к данным как "Файлы и хранилища данных"

    с. Доступ к папке как "Моему приложению нужен доступ к файлам, уже находящимся в Dropbox". (то есть: тип разрешения как "Полный Dropbox".)

  4. Затем нажмите кнопку "Создать маркер доступа" и вставьте/вставьте в приведенный ниже пример python вместо <auth_token>:



import dropbox

client = dropbox.client.DropboxClient(<auth_token>)
print 'linked account: ', client.account_info()

f = open('working-draft.txt', 'rb')
response = client.put_file('/magnum-opus.txt', f)
print 'uploaded: ', response

folder_metadata = client.metadata('/')
print 'metadata: ', folder_metadata

f, metadata = client.get_file_and_metadata('/magnum-opus.txt')
out = open('magnum-opus.txt', 'wb')
out.write(f.read())
out.close()
print metadata

Ответ 2

Ответ @Christina основан на Dropbox APP v1, который устарел и будет отключен 28.06.2017. (Обратитесь к здесь для получения дополнительной информации.)

Приложение APP v2 выпущено в ноябре 2015 года, оно более простое, последовательное и всеобъемлющее.

Вот исходный код с приложением v2.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import dropbox

class TransferData:
    def __init__(self, access_token):
        self.access_token = access_token

    def upload_file(self, file_from, file_to):
        """upload a file to Dropbox using API v2
        """
        dbx = dropbox.Dropbox(self.access_token)

        with open(file_from, 'rb') as f:
            dbx.files_upload(f.read(), file_to)

def main():
    access_token = '******'
    transferData = TransferData(access_token)

    file_from = 'test.txt'
    file_to = '/test_dropbox/test.txt'  # The full path to upload the file to, including the file name

    # API v2
    transferData.upload_file(file_from, file_to)

if __name__ == '__main__':
    main()

Исходный код размещен на GitHub, здесь.

Ответ 3

Здесь мой подход с использованием API v2 (и Python 3). Я хотел загрузить файл и создать для него ссылку для общего доступа, которую я мог бы отправлять по электронной почте пользователям. Он основан на примере искры. Примечание. Я думаю, что в текущей документации API имеется небольшая ошибка, исправленная искробезопасной.

import pathlib
import dropbox
import re

# the source file
folder = pathlib.Path(".")    # located in this folder
filename = "test.txt"         # file name
filepath = folder / filename  # path object, defining the file

# target location in Dropbox
target = "/Temp/"              # the target folder
targetfile = target + filename   # the target path and file name

# Create a dropbox object using an API v2 key
d = dropbox.Dropbox(your_api_access_token)

# open the file and upload it
with filepath.open("rb") as f:
   # upload gives you metadata about the file
   # we want to overwite any previous version of the file
   meta = d.files_upload(f.read(), targetfile, mode=dropbox.files.WriteMode("overwrite"))

# create a shared link
link = d.sharing_create_shared_link(targetfile)

# url which can be shared
url = link.url

# link which directly downloads by replacing ?dl=0 with ?dl=1
dl_url = re.sub(r"\?dl\=0", "?dl=1", url)
print (dl_url)

Ответ 4

Единственный способ аутентификации вызовов API Dropbox - это использование OAuth, при котором пользователь дает разрешение на ваше приложение. Мы не разрешаем сторонним приложениям обрабатывать учетные данные пользователя (имя пользователя и пароль).

Если это только для вашей учетной записи, обратите внимание, что вы можете легко получить токен OAuth для своей учетной записи и просто использовать его. См. Https://www.dropbox.com/developers/blog/94/generate-an-access-token-for-your-own-account.

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

Ответ 5

import dropbox
access_token = '************************'
file_from = 'index.jpeg'  //local file path
file_to = '/Siva/index.jpeg'      // dropbox path
def upload_file(file_from, file_to):
    dbx = dropbox.Dropbox(access_token)
    f = open(file_from, 'rb')
    dbx.files_upload(f.read(), file_to)
upload_file(file_from,file_to)

Ответ 6

Извините, если я что-то пропустил, но не могу просто загрузить приложение Dropbox для вашей ОС, а затем сохранить файл (в окнах) в:

C:\Users\<UserName>\Dropbox\<FileName>

Я только что запустил программу python для сохранения текстового файла, проверил мой dropbox и сохранил их.

Ответ 7

Вот код для загрузки livevideo на Dropbox с использованием python в Windows. Надеюсь, это поможет вам.

import numpy as np
import cv2
import dropbox
import os
from glob import iglob


access_token = 'paste your access token here'   #paste your access token in-between ''
client = dropbox.client.DropboxClient(access_token)
print 'linked account: ', client.account_info()
PATH = ''

cap = cv2.VideoCapture(0)


# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('C:\python27\output1.avi',fourcc, 20.0, (640,480))

#here output1.avi is the filename in which your video which is captured from webcam is stored. and it resides in C:\python27 as per the path is given.

while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
#frame = cv2.flip(frame,0) #if u want to flip your video

# write the (unflipped or flipped) frame
out.write(frame)

cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

for filename in iglob(os.path.join(PATH, 'C:/Python27/output1.avi')):
print filename
try:
f = open(filename, 'rb')
response = client.put_file('/livevideo1.avi', f)
print "uploaded:", response
f.close()
#os.remove(filename)
except Exception, e:
print 'Error %s' % e

Ответ 8

Вот код для загрузки существующего видео в вашу учетную запись Dropbox с помощью python в Windows.

Надеюсь, это поможет вам.

# Include the Dropbox SDK
import dropbox

# Get your app key and secret from the Dropbox developer website
app_key = 'paste your app-key here'
app_secret = 'paste your app-secret here'

flow = dropbox.client.DropboxOAuth2FlowNoRedirect(app_key, app_secret)

# Have the user sign in and authorize this token
authorize_url = flow.start()
print '1. Go to: ' + authorize_url
print '2. Click "Allow" (you might have to log in first)'
print '3. Copy the authorization code.'
code = raw_input("Enter the authorization code here: ").strip()

# This will fail if the user enters an invalid authorization code
access_token, user_id = flow.finish(code)

client = dropbox.client.DropboxClient(access_token)
print 'linked account: ', client.account_info()

f = open('give full path of the video which u want to upload on your dropbox account(ex: C:\python27\examples\video.avi)', 'rb')
response = client.put_file('/video1.avi', f) #video1.avi is the name in which your video is shown on your dropbox account. You can give any name here.
print 'uploaded: ', response

folder_metadata = client.metadata('/')
print 'metadata: ', folder_metadata

f, metadata = client.get_file_and_metadata('/video1.avi')
out = open('video1.avi', 'wb')
out.write(f.read())
out.close()
print metadata

Теперь для загрузки изображений используется тот же код.

Запишите имя файла изображения, которое вы хотите загрузить для ex: image.jpg вместо имени видео. Также измените имя video1.avi и напишите имя для изображения, в котором ваше загруженное изображение будет показано в вашем Dropbox для ex: image1.jpg.