google-app-engine – 从GAE将文件写入Dropbox帐户

我正在尝试从GAE应用程序在Dropbox.com文件夹中创建文件.
我已经完成了注册一个Dropbox应用程序的所有步骤,并从我的开发机器上的Dropbox本地安装了Python SDK. (请参阅dropbox.com API).
当我使用本地机器上的dropbox SDK中的cli_client.py测试脚本访问dropbox – 可以’put’文件等时,这一切都会很好地运行.

我现在想在GAE环境中开始工作,所以有点棘手.
一些帮助将是有用的.

对于熟悉Dropbox API代码的人,到目前为止我遇到以下问题:

问题1

rest.py Dropbox API模块使用pkg_resources获取安装在本地机器安装的站点包中的证书.
我换了

TRUSTED_CERT_FILE = pkg_resources.resource_filename(__name__, 'trusted-certs.crt')

TRUSTED_CERT_FILE = file('trusted-certs.crt')

并将证书文件放在我的GAE应用程序目录中.也许这是不对的;请看我下面的认证错误代码.

问题2

session.py Dropbox API模块使用oauth模块,因此我将include更改为appengine oauth.

但是提出了一个例外,GAE的oauth没有使用Dropbox session.py模块的OAuthConsumer方法.所以我下载了oauth 1.0,并添加到我的应用程序,现在导入这个而不是GAE oauth.

问题3

GAE ssl模块似乎没有CERT_REQUIRED属性.

这是一个常数,所以我改变了

self.cert_reqs = ssl.CERT_REQUIRED

self.cert_reqs = 2

调用时使用

ssl.wrap_socket(sock, cert_reqs=self.cert_reqs, ca_certs=self.ca_certs)

授权错误

但是我仍然无法连接到Dropbox:

Status: 401
Reason: Unauthorized
Body: {"error": "Authentication failed"}
Headers: [('date', 'Sun, 19 Feb 2012 15:11:12 GMT'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('content-type', 'application/json'), ('server', 'dbws')]
这是我的补丁版本的Dropbox Python SDK 1.4,它适用于我的Python 2.7 GAE:dropbox_python_sdk_gae_patched.7z.base64.不需要额外的第三方库,只有GAE环境提供.

只有文件上传(put_file)被测试.这里是设置步骤:

>将档案解压缩到GAE应用程序的根文件夹(如果主应用程序在根文件夹中).您可以使用Base64 Encoder/Decoder解码BASE64:base64.exe -d dropbox_python_sdk_gae_patched.7z.base64 dropbox_python_sdk_gae_patched.7z.
>设置APP_KEY,APP_SECRET,ACCESS_TYPE,ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET.前三个配置在Dropbox应用程序创建时间.授予应用程序访问特定保管箱帐户时可获得最后两项权限,您可以通过来自token_store.txt文件的cli_client.py(来自DB Python SDK)获取最后一个.
>在这样的代码中使用:

import dropbox
# ...
def DropboxUpload(path, data):
    sess = dropbox.session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
    sess.set_token(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET)
    cli = dropbox.client.DropboxClient(sess)
    data_file = StringIO.StringIO(data)
    return cli.put_file(path, data_file)
# ...
import json
class DropboxUploadHandlerExample(webapp2.RequestHandler):
    def get(self):
        url = "http://www.google.com/"
        result = urlfetch.fetch(url)
        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(json.dumps(DropboxUpload('/fetch_result.dat', result.content)))
http://stackoverflow.com/questions/9350634/writing-files-to-dropbox-account-from-gae

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:google-app-engine – 从GAE将文件写入Dropbox帐户