Dropbox-Upload mit Python

Dieser Beitrag zeigt, wie Sie mit einem kleinen Python-Script Dateien vom Raspberry Pi in Ihr Dropbox-Konto hochladen. Da der in der ersten Auflage unseres Buchs beschriebene Python-Dropbox-Uploader nicht mehr funktioniert, erklären wir Ihnen hier die Verwendung der offiziellen Dropbox-API.

VORSICHT: Dieser Artikel beschreibt eine Vorgehensweise auf Basis der Dropbox API v1. Diese API-Version wird ab 28.6.2017 nicht mehr funktionieren. Alle Dropbox-Programme müssen dann die neue API v2 nutzen. Hier ist eine aktualisierte Fassung dieses Artikels!

Dropbox-App einrichten

Die Grundvoraussetzung besteht natürlich einmal darin, dass Sie über ein eigenes Dropbox-Konto verfügen. Auf den Dropbox-Developer-Seiten richten Sie in der sogenannten »App Console« eine neue Dropbox-App ein:

https://www.dropbox.com/developers/apps

Für dieses Beispiel haben wir der App den Namen rapi-uploader gegeben. Sie müssen als App-Namen einen im Dropbox-Universum eindeutigen Namen verwenden! Wenn Ihnen nichts besseres einfällt, versuchen Sie es mit einer Kombination aus Ihrem Namen vorname-nachname-test123.

Beim Einrichten den App haben Sie die Wahl zwischen zwei Zugriffsvarianten (access type):

  • App folder: die App hat nur den Zugriff auf ein Verzeichnis, das gleichlautend wie der App-Name ist
  • Full dropbox: die App hat Zugriff auf alle ihre Dropbox-Daten

In der Einstellungsseite dieser App finden Sie nun den Button Generate, um einen App-spezifischen Code (ein Token) zu generieren.

Dropbox-App einrichten
Dropbox-App einrichten

Dropbox-Funktionen installieren

Für Python-Funktionen zur Kommunikation mit Dropbox befinden sich in einem Erweiterungspaket, das sich am einfachsten mit pip installieren lässt. Der Kommandoname pip steht für Pip Installs Python und ist eine eigenes Paketverwaltungssystem für Python.

sudo apt-get install python3-pip
sudo pip-3.2 install dropbox

Erste Tests

Mit dem zuvor generierten Token können wir nun testen, ob der Verbindungsaufbau
zu Dropbox gelingt. Das folgende Mini-Script sollte Informationen über Ihren
Dropbox-Account liefern:

#!/usr/bin/python3
import dropbox
dbc = dropbox.client.DropboxClient('xxx-token-code-xxx')
print('linked account: ', dbc.account_info())

Klappt soweit alles, ist es Zeit für den ersten Upload. Die folgenden Zeilen laden die Datei test.jpg aus dem lokalen Verzeichnis in das Root-Verzeichnis Ihres Dropbox-Kontos hoch:

#!/usr/bin/python3
# Datei dropbox-upload.py
import dropbox
dbc = dropbox.client.DropboxClient('xxx-token-code-xxx')
fname = 'test.jpg'
f = open(fname, 'rb')              # Datei öffnen,
response = dbc.put_file(fname, f)  # ... hochladen
print('uploaded:', response)
f.close()                          # ... und schließen

Foto mit Datum- und Zeitinfos hochladen

Ein wenig praxisnäher ist das zweite Beispiel: Es erstellt zuerst ein Foto und lädt dieses dann in das Dropbox-Verzeichnis hoch. Der Dateiname des Fotos unter Dropbox setzt sich aus Rapi- und dem Datum zusammen, z.B. Rapi-2015-06-30.jpg.

#!/usr/bin/python3
# Datei dropbox-foto.py
import datetime, dropbox, picamera
dbc = dropbox.client.DropboxClient('xxx-token-code-xxx')

# Foto erstellen und lokal speichern
localname = 'tmp.jpg'
camera = picamera.PiCamera()
camera.resolution=(1280, 960)
camera.capture(localname)
camera.close()

# Foto hochladen
f = open(localname, 'rb')
today = datetime.date.today()
upname = today.strftime('Rapi-%Y-%m-%d.jpg')
dbc.put_file(upname, f)
f.close()

Allgemeingültige Dropbox-Authentifizierung

Wir sind hier davon ausgegangen, dass Ihr Script nur mit Ihrem eigenen Dropbox-Konto kommunizieren möchte. Ganz anders ist die Ausgangslage, wenn Sie ein Script zur Weitergabe an andere Benutzer entwickeln, die jeweils ihre eigenen Dropbox-Konten verwenden möchten.

In diesem Fall müssen Sie im Script Code vorsehen, der dem Benutzer die Möglichkeit gibt, den jeweiligen Dropbox-Zugriff zu authentifizieren. Der Benutzer wird dabei auf eine Seite von Dropbox geleitet, muss dort sein Dropbox-Passwort angeben und erhält dann einen speziellen Code für das Script. Ihr Script bittet um die Eingabe dieses Codes und speichert ihn so, dass es später wieder darauf zugreifen kann. Mehr Details können Sie hier nachlesen:

https://stackoverflow.com/questions/23894221
https://www.dropbox.com/developers/core/docs/python

5 Gedanken zu „Dropbox-Upload mit Python“

  1. Hallo, ich habe nun den Key von Dropbox bei taken-code eingesetzt, jedoch kommen mehrere Fehlermeldungen auf.
    Was habe ich falsch gemacht?

  2. Dropbox schaltet jetzt ja die alte API ab und führt eine neue ein. Gibt es dafür schon einen neuen Skript oder eine Lösung?

  3. Hallo,
    wenn man den Dropbox Token falsch eingegeben bzw. sich geändert hat, gibt es hier eine Möglichkeit diesen zu ändern auf den Raspberry Pi?

Kommentare sind geschlossen.