it-swarm.com.de

lade eine Datei von python script in meine Dropbox hoch

Ich möchte eine Datei von meinem python= Skript automatisch in mein Dropbox-Konto hochladen. Ich kann dies ohnehin nicht mit nur einem Benutzer/Pass tun. Alles, was ich im Dropbox-SDK sehe, hängt zusammen auf eine App mit Benutzerinteraktion. Ich möchte nur so etwas tun:

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

44
Christina

Wichtiger Hinweis: Diese Antwort ist veraltet, da Dropbox jetzt die v2-API verwendet.
In der Antwort von @ SparkAndShine finden Sie die aktuelle API-Versionslösung

Vielen Dank an @smarx für die Antwort oben! Ich wollte nur für jeden klarstellen, der dies versucht.

  1. Stellen Sie sicher, dass Sie zuerst das Dropbox-Modul pip install dropbox Installieren.

  2. Erstellen Sie eine App unter Ihrem eigenen Dropbox-Konto in der "App Console". ( https://www.dropbox.com/developers/apps )

  3. Nur zur Veranschaulichung habe ich meine App folgendermaßen erstellt:

    ein. App-Typ als "Dropbox API APP".

    b. Art des Datenzugriffs als "Files & Datastores"

    c. Ordnerzugriff als "Meine App benötigt Zugriff auf Dateien, die sich bereits in Dropbox befinden". (dh: Berechtigungstyp als "Full Dropbox".)

  4. Klicken Sie anschließend auf die Schaltfläche "Zugriffstoken generieren" und fügen Sie anstelle von <auth_token> Folgendes in das Beispiel python=) ein:



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
52
Christina

Die Antwort von @ Christina basiert auf Dropbox APP v1 , die jetzt veraltet ist und am 28.06.2017 deaktiviert wird. (Weitere Informationen finden Sie unter hier .)

APP v2 wird im November 2015 eingeführt, was einfacher, konsistenter und umfassender ist.

Hier ist der Quellcode mit APP 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 __== '__main__':
    main()

Der Quellcode wird auf GitHub gehostet, hier .

50
SparkAndShine

Hier ist mein Ansatz mit API v2 (und Python 3). Ich wollte eine Datei hochladen und einen Freigabe-Link dafür erstellen, den ich per E-Mail an Benutzer senden kann. Es basiert auf dem Beispiel von sparkandshine. Hinweis I Ich denke, die aktuelle API-Dokumentation hat einen kleinen Fehler, den sparkandshine korrigiert hat.

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)
11
Steve Lockwood

Die einzige Möglichkeit, Aufrufe an die Dropbox-API zu authentifizieren, besteht in der Verwendung von OAuth, bei der der Benutzer der App die Berechtigung erteilt. Apps von Drittanbietern dürfen keine Benutzeranmeldeinformationen (Benutzername und Kennwort) verarbeiten.

Wenn dies nur für Ihr Konto gilt, beachten Sie, dass Sie leicht ein OAuth= Token für Ihr eigenes Konto erhalten und dieses verwenden können. Siehe https://www.dropbox.com/ developers/blog/94/generiere-ein-Zugriffstoken-für-dein-eigenes-Konto .

In diesem Fall müssen andere Benutzer Ihre App einmal über den Browser autorisieren, damit Sie ein OAuth Token erhalten. Sobald Sie das Token haben, können Sie es jedoch weiterhin verwenden. Daher sollte jeder Benutzer dies nur einmal tun müssen.

6
smarx
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)
3
user7384403

Tut mir leid, wenn ich etwas vermisse, aber ich kann nicht einfach die Dropbox-Anwendung für Ihr Betriebssystem herunterladen und dann die Datei (in Windows) speichern in:

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

ich habe gerade ein python Programm zum Speichern einer Textdatei gestartet, meine Dropbox überprüft und sie in Ordnung gespeichert.

1
Caleb Connolly