最近发现越来越多的app集成dropbox来读取和保存文件了。我重新考虑了一下我的备份blog数据库的策略。之前我是直接在服务器上运行一个dropbox客户端来进行备份数据库,这样其实相当的浪费服务器资源。当然直接运行一个dropbox是比较简单,只要把保存到dropbox的文件夹下面即可。
不过为了不浪费服务器资源,我看了一下dropbox的api文档,写了一个简单的脚本来上传文件到dropbox。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#author: juntao liu
import sys
import json
from dropbox import client, rest, session
#app key and secret
APP_KEY = 'your app key'
APP_SECRET = 'your app secret key'
#access type 'dropbox' or 'app_folder'
ACCESS_TYPE = 'app_folder'
#TOKEN_FILE save token for next time access
TOKEN_FILE = 'your token file path'
class DPClient:
client = None
def __init__(self, app_key, app_secret, access_type='app_folder'):
self.sess = session.DropboxSession(app_key, app_secret, access_type)
self.request_token = self.sess.obtain_request_token()
def build_authorize_url(self):
# Make the user log in and authorize this token
return self.sess.build_authorize_url(self.request_token)
def token_from_dropbox(self):
#This will fail if the user didn't vist the authorize url and hit 'Allow'
self.access_token = self.sess.obtain_access_token(self.request_token)
self.key = self.access_token.key
self.secret = self.access_token.secret
self.client = client.DropboxClient(self.sess)
def token_from_file(self, file_path):
try:
d = json.loads(file(file_path).read())
self.sess.set_token(d['key'], d['secret'])
except:
return False
self.client = client.DropboxClient(self.sess)
return True
def save_token(self, file_path):
d = {'key': self.key, 'secret': self.secret}
file(file_path, 'w+').write(json.dumps(d))
def upload_file(self, full_path, rename='', overwrite=True):
from os import path
if not client:
print 'dropbox client not exists'
return
if not path.exists(full_path):
print 'file not exists'
return
f = open(full_path)
if not rename:
filename = path.basename(full_path)
else:
filename = rename
self.client.put_file(filename, f, overwrite)
if __name__ == '__main__':
if len(sys.argv) != 2:
print "./upload_dp.py <file>"
sys.exit(1)
dp = DPClient(APP_KEY, APP_SECRET)
if not dp.token_from_file(TOKEN_FILE):
print "url:", dp.build_authorize_url()
print "please authorize in the browser. After you're done, press enter"
raw_input()
dp.token_from_dropbox()
dp.save_token(TOKEN_FILE)
dp.upload_file(sys.argv[1])
很简单的程序,就像我说的很简单的目的只是为了上传文件。
默认DPClient上传文件会覆盖同名文件,并且使用传入的文件名作为上传的文件名。更多的功能请参考Dropbox的开发者网站:https://www.dropbox.com/developers
Related posts:





Recent Comments