Python Gae Googleドキュメントにアップロードします
-
11-12-2019 - |
質問
Googleアプリケーションの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')
.
アップロードするには、MediaSource(Wrapper)オブジェクトをパラメータとして使用しているclient.Upload()
を使用しています。ただし、MediaSource()
は文書のファイルパスのみを受け入れるように見えます.'C:/Docs/ex.doc'
。
ファイルシステムなしでGAEにいるので、BLOBストアまたはファイルへの直接のURLを介してファイルにアクセスできます。しかし、それをMediaSource()
に入力する方法は?
Java の方法でMediaByteArraySource()
を使用することでこれを実現するための方法ですが、Pythonには何もありません。
解決
誰かが興味があるなら、これが文書リストAPIを使用してこの問題を解決する方法です。
ドライブSDK を使用したくなかった。いくつかのOAuthトリックを必要とせずに認証/ログインするだけで、リストAPIがはるかに簡単です。これは 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
他のヒント
Google Drive SDKドキュメントには、App Engineで実行されるPythonで書かれた完全なサンプルアプリケーションが含まれています。
https://developers.google.com/drive/examples/python
実装の参照として使用し、アプリエンジンからファイルを保存する方法を確認できます。