質問

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

実装の参照として使用し、アプリエンジンからファイルを保存する方法を確認できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top