2012-05-11 19 views
7

Ich möchte vermeiden, dieses Skript immer wieder autorisieren zu müssen. Mit anderen Worten, wenn ich das Skript vom Terminal aus starte, gibt es mir einen Link, den ich in einem Browser öffnen muss, dann klicke auf den "Zulassen" -Button im Browser und gehe zurück zum Terminal ... Ich denke, es gibt einen Weg um die Authentifizierungsdetails zu speichern, aber wie?python dropbox api - Token-Datei speichern?

# Include the Dropbox SDK libraries 
from dropbox import client, rest, session 

# Get your app key and secret from the Dropbox developer website 

APP_KEY = 'xxxxxxxxxxx' 
APP_SECRET = 'yyyyyyyyyyyy' 
ACCESS_TYPE = 'dropbox' 


sess = session.DropboxSession(APP_KEY,APP_SECRET, ACCESS_TYPE) 

request_token = sess.obtain_request_token() 

# Make the user sign in and authorize this token 
url = sess.build_authorize_url(request_token) 
print "url:", url 
print "Please authorize in the browser. After you're done, press enter." 
raw_input() 

# This will fail if the user didn't visit the above URL and hit 'Allow' 
access_token = sess.obtain_access_token(request_token) 

client = client.DropboxClient(sess) 
#stored_creds = open(CONF_DIR + self.TOKEN_FILE).read() 
print "linked account:", client.account_info() 

f = open('t.txt') 
response = client.put_file('/uploaded_with_python.txt', f) 
print "uploaded:", response 

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

f, metadata = client.get_file_and_metadata('/uploaded_with_python',rev='362e2029684fe') 
out = open('/uploaded_with_python.txt', 'w') 
out.write(f) 
print(metadata) 

------------------------------------------- -------------------------------------------------BEARBEITEN

ich das Skript geändert und es erstellt das Skript aber ich habe immer noch Probleme, die die Token-Datei zu lesen

# Include the Dropbox SDK libraries 
from dropbox import client, rest, session 

# Get your app key and secret from the Dropbox developer website 

APP_KEY = 'i4ffahjltei1bnu' 
APP_SECRET = 'cjullao1iiymrse' 
ACCESS_TYPE = 'dropbox' 

#acces token file 
token_file = open(TOKENS) 
token_key,token_secret = token_file.read().split('|') 
token_file.close() 

sess = session.DropboxSession(APP_KEY,APP_SECRET, ACCESS_TYPE) 

request_token = sess.obtain_request_token() 

# Make the user sign in and authorize this token 
url = sess.build_authorize_url(request_token) 
print "url:", url 
print "Please authorize in the browser. After you're done, press enter." 
raw_input() 

# This will fail if the user didn't visit the above URL and hit 'Allow' 
access_token = sess.obtain_access_token(request_token) 
#save token file 
TOKENS = 'dropbox_token.txt' 
token_file = open(TOKENS,'w') 
token_file.write("%s|%s" % (access_token.key,access_token.secret)) 
token_file.close() 

client = client.DropboxClient(sess) 

print "linked account:", client.account_info() 

f = open('t.txt') 
response = client.put_file('/uploaded_with_python.txt', f) 
print "uploaded:", response 

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

f, metadata = client.get_file_and_metadata('/uploaded_with_python',rev='362e2029684fe') 
out = open('/uploaded_with_python.txt', 'w') 
out.write(f) 
print(metadata) 

ich diesen Fehler:

Traceback (most recent call last): 
    File "dropb.py", line 14, in <module> 
    token_file = open(TOKENS) 
NameError: name 'TOKENS' is not defined 
+0

der Fehler "' Name 'TOKENS' ist nicht defined'" sagt alles: Das liegt daran, dass Sie in Ihrem Bearbeitungscode die Definition "' TOKENS = 'dropbox_token.txt'' "ein paar Zeilen nach der ersten Verwendung geschrieben haben, nämlich die Zeile" 'token_file = open (TOKENS)' " ... Verschieben Sie die Definitionszeile früher in Ihrem Code, bevor die erste Verwendungszeile angezeigt wird. – sdaau

+0

Wollen Sie APPKEY und APPTOKEN wirklich mit dem Internet teilen? –

Antwort

20

Sie können schreiben die access_token in eine Datei:

TOKENS = 'dropbox_token.txt' 
token_file = open(TOKENS,'w') 
token_file.write("%s|%s" % (access_token.key,access_token.secret)) 
token_file.close() 

Wenn man das einmal tun, dann anschliessend Sie diese Token verwenden:

token_file = open(TOKENS) 
token_key,token_secret = token_file.read().split('|') 
token_file.close() 

sess = session.DropboxSession(APP_KEY,APP_SECRET, ACCESS_TYPE) 
sess.set_token(token_key,token_secret) 
client = client.DropboxClient(sess) 
+0

Die Token-Datei gespeichert wird jedoch habe ich diesen Fehler: Traceback (jüngste Aufforderung zuletzt): File "dropb.py", Zeile 11, in token_file = open (TOKENS) Nameerror: name 'TOKENS' ist nicht definiert – alkopop79

+0

tolle Lösung –

Verwandte Themen