3

ファイル/ドキュメントを GAE アプリケーションの Google ドキュメントにアップロードする必要があります。これは十分に単純なはずですが、私は API で多くの問題を抱えています。

コンテキスト:

import gdata.docs.service

client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'pass')

ms = gdata.MediaSource(#what goes in here?)
client.Upload(media_source=ms, title='title')

アップロードするにclient.Upload()は、 MediaSource (ラッパー) オブジェクトをパラメーターとして受け取る を使用しています。ただし、MediaSource()ドキュメントのファイルパスのみを受け入れるようです: 'C:/Docs/ex.doc'.

私はファイル システムのない GAE を使用しているため、ブロブストアまたはファイルへの直接 URL を介してのみファイルにアクセスできます。しかし、どうすればそれを に入力できMediaSource()ますか?

を使用して Javaでこれを達成する方法があるようMediaByteArraySource()ですが、Python には何もありません。

4

2 に答える 2

1

興味のある方は、Document List API を使用してこの問題を解決した方法を次に示します。

多くのことが複雑になるため、 Drive SDKは使いたくありませんでした。List API を使用すると、OAuth のトリッキーを必要とせずに認証/ログインするだけの方がはるかに簡単です。これはgdata Python ライブラリのバージョン 2.0.14 を使用しています。これは現在のバージョン (2.0.17) ではありませんが、より単純なアップロード メカニズムを備えているようです。

2.0.14 のオンライン ドキュメントももう少し (まだまばらですが) ありますが、さまざまな情報源と試行錯誤からこれをつなぎ合わせる必要がありました。欠点は、このバージョンでは pdf をアップロードできないことです。このコードは2.0.17 では機能しません。

コードは次のとおりです。

import gdata.docs.service
import gdata.docs.data
from google.appengine.api import urlfetch

# get file from url
result = urlfetch.fetch('http://example.com/test.docx')
headers = result.headers
data = result.content

# authenticate client object
client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'password')

# create MediaSource file wrapper
ms = gdata.MediaSource(file_handle=result.content, 
content_type=headers['content-type'], 
content_length=int(headers['content-length']))

# upload specific folder, return URL of doc
google_doc_name = 'title'
folder_uri = '/feeds/folders/private/full/folder:j7XO8SJj...'
entry = client.Upload(ms, google_doc_name, folder_or_uri=secret.G_FOLDER_URI)
edit_url = entry.GetAlternateLink().href
于 2012-10-03T01:29:30.043 に答える
0

Google ドライブ SDK ドキュメントには、App Engine で実行される Python で記述された完全なサンプル アプリケーションが含まれています。

https://developers.google.com/drive/examples/python

これを実装のリファレンスとして使用し、App Engine からファイルを保存する方法を確認できます。

于 2012-09-30T23:36:48.670 に答える